diff options
author | Alexis de Talhouët <adetalhouet89@gmail.com> | 2019-02-19 10:02:00 -0500 |
---|---|---|
committer | Alexis de Talhouët <adetalhouet89@gmail.com> | 2019-02-20 21:02:16 +0000 |
commit | 02bcf30f2ab243ac4396f49a54309c024a727a61 (patch) | |
tree | 2dfb81a91d03fbde089287a5d25a1bd011b58c70 /ms/blueprintsprocessor/functions/netconf-executor/src/main/kotlin/org | |
parent | 0613ae8f927834f7621011fda3f0cb1b7f8e07ad (diff) |
Add support for commit confirmed capability
Change-Id: I3608a6a62469d4b5dfc5fc69f610f9da186156c2
Issue-ID: CCSDK-790
Signed-off-by: Alexis de Talhouët <adetalhouet89@gmail.com>
Diffstat (limited to 'ms/blueprintsprocessor/functions/netconf-executor/src/main/kotlin/org')
3 files changed, 69 insertions, 5 deletions
diff --git a/ms/blueprintsprocessor/functions/netconf-executor/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/functions/netconf/executor/api/NetconfRpcService.kt b/ms/blueprintsprocessor/functions/netconf-executor/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/functions/netconf/executor/api/NetconfRpcService.kt index e2c9bf900..550852165 100644 --- a/ms/blueprintsprocessor/functions/netconf-executor/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/functions/netconf/executor/api/NetconfRpcService.kt +++ b/ms/blueprintsprocessor/functions/netconf-executor/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/functions/netconf/executor/api/NetconfRpcService.kt @@ -67,9 +67,29 @@ interface NetconfRpcService { /** * Commit * + * @param confirmed Perform a confirmed <commit> operation. If flag set to true, + * then it is expected to have a follow-up <commit> operation to confirm the request + * @param confirmTimeout Timeout period for confirmed commit, in seconds. + * @param persist Make the confirmed commit survive a session termination, and + * set a token on the ongoing confirmed commit. + * @param persistId Used to issue a follow-up confirmed commit or a confirming + * commit from any session, with the token from the previous <commit> operation. + * If unspecified, the confirm timeout defaults to 600 seconds. * @return Device response */ - fun commit(): DeviceResponse + fun commit(confirmed: Boolean = false, confirmTimeout: Int = 60, persist: String = "", + persistId: String = ""): DeviceResponse + + /** + * Cancels an ongoing confirmed commit. If the <persist-id> parameter is not given, + * the <cancel-commit> operation MUST be issued on the same session that issued + * the confirmed commit. + * + * @param persistId Cancels a persistent confirmed commit. The value MUST be equal + * to the value given in the <persist> parameter to the <commit> operation. + * If the value does not match, the operation fails with an "invalid-value" error. + */ + fun cancelCommit(persistId: String = ""): DeviceResponse /** * Unlock diff --git a/ms/blueprintsprocessor/functions/netconf-executor/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/functions/netconf/executor/core/NetconfRpcServiceImpl.kt b/ms/blueprintsprocessor/functions/netconf-executor/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/functions/netconf/executor/core/NetconfRpcServiceImpl.kt index be8355576..8d8e0ea46 100644 --- a/ms/blueprintsprocessor/functions/netconf-executor/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/functions/netconf/executor/core/NetconfRpcServiceImpl.kt +++ b/ms/blueprintsprocessor/functions/netconf-executor/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/functions/netconf/executor/core/NetconfRpcServiceImpl.kt @@ -101,12 +101,12 @@ class NetconfRpcServiceImpl(private var deviceInfo: DeviceInfo) : NetconfRpcServ return output } - override fun commit(): DeviceResponse { + override fun commit(confirmed: Boolean, confirmTimeout: Int, persist: String, persistId: String): DeviceResponse { var output = DeviceResponse() val messageId = messageIdInteger.getAndIncrement().toString() log.info("$deviceInfo: commit: messageId($messageId)") try { - val messageContent = NetconfMessageUtils.commit(messageId) + val messageContent = NetconfMessageUtils.commit(messageId, confirmed, confirmTimeout, persist, persistId) output = asyncRpc(messageContent, messageId) } catch (e: Exception) { output.status = RpcStatus.FAILURE @@ -115,6 +115,20 @@ class NetconfRpcServiceImpl(private var deviceInfo: DeviceInfo) : NetconfRpcServ return output } + override fun cancelCommit(persistId: String): DeviceResponse { + var output = DeviceResponse() + val messageId = messageIdInteger.getAndIncrement().toString() + log.info("$deviceInfo: cancelCommit: messageId($messageId)") + try { + val messageContent = NetconfMessageUtils.cancelCommit(messageId, persistId) + output = asyncRpc(messageContent, messageId) + } catch (e: Exception) { + output.status = RpcStatus.FAILURE + output.errorMessage = "$deviceInfo: failed in cancelCommit command $e.message" + } + return output + } + override fun discardConfig(): DeviceResponse { var output = DeviceResponse() val messageId = messageIdInteger.getAndIncrement().toString() diff --git a/ms/blueprintsprocessor/functions/netconf-executor/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/functions/netconf/executor/utils/NetconfMessageUtils.kt b/ms/blueprintsprocessor/functions/netconf-executor/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/functions/netconf/executor/utils/NetconfMessageUtils.kt index 7e48912d1..4de3860c5 100644 --- a/ms/blueprintsprocessor/functions/netconf-executor/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/functions/netconf/executor/utils/NetconfMessageUtils.kt +++ b/ms/blueprintsprocessor/functions/netconf-executor/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/functions/netconf/executor/utils/NetconfMessageUtils.kt @@ -115,15 +115,45 @@ class NetconfMessageUtils { return doWrappedRpc(messageId, request.toString()) } - fun commit(messageId: String): String { - val request = StringBuilder() + fun commit(messageId: String, confirmed: Boolean, confirmTimeout: Int, persist: String, + persistId: String): String { + + if (!persist.isEmpty() && !persistId.isEmpty()) { + throw NetconfException("Can't proceed <commit> with both persist($persist) and " + + "persistId($persistId) specified. Only one should be specified.") + } + if (confirmed && !persistId.isEmpty()) { + throw NetconfException("Can't proceed <commit> with both confirmed flag and " + + "persistId($persistId) specified. Only one should be specified.") + } + val request = StringBuilder() request.append("<commit>").append(NEW_LINE) + if (confirmed) { + request.append("<confirmed/>") + request.append("<confirm-timeout>$confirmTimeout</confirm-timeout>") + if (!persist.isEmpty()) { + request.append("<persist>$persist</persist>") + } + } + if (!persistId.isEmpty()) { + request.append("<persist-id>$persistId</persist-id>") + } request.append("</commit>").append(NEW_LINE) return doWrappedRpc(messageId, request.toString()) } + fun cancelCommit(messageId: String, persistId: String): String { + val request = StringBuilder() + request.append("<cancel-commit>").append(NEW_LINE) + if (!persistId.isEmpty()) { + request.append("<persist-id>$persistId</persist-id>") + } + request.append("</cancel-commit>").append(NEW_LINE) + + return doWrappedRpc(messageId, request.toString()) + } fun unlock(messageId: String, configType: String): String { val request = StringBuilder() |