- NetconfMessage responseMessage = netconfClient.sendMessage(message, NETCONF_SEND_ATTEMPTS, NETCONF_SEND_ATTEMPT_MS_DELAY);
-
- XmlElement element = XmlElement.fromDomDocument(responseMessage.getDocument());
- Preconditions.checkState(element.getName().equals(XmlNetconfConstants.RPC_REPLY_KEY));
- element = element.getOnlyChildElement();
-
- Util.checkIsOk(element, responseMessage);
- response.append(XmlUtil.toString(responseMessage.getDocument()));
- response.append("}");
- responseMessage = netconfClient.sendMessage(getNetconfMessageFromResource("/netconfOp/commit.xml"), NETCONF_SEND_ATTEMPTS, NETCONF_SEND_ATTEMPT_MS_DELAY);
-
- element = XmlElement.fromDomDocument(responseMessage.getDocument());
- Preconditions.checkState(element.getName().equals(XmlNetconfConstants.RPC_REPLY_KEY));
- element = element.getOnlyChildElement();
-
- Util.checkIsOk(element, responseMessage);
- response.append("commit response = {");
- response.append(XmlUtil.toString(responseMessage.getDocument()));
- response.append("}");
- logger.info("Last configuration loaded successfully");
- logger.trace("Detailed message {}", response);
+ NetconfMessage editResponseMessage;
+ try {
+ editResponseMessage = sendRequestGetResponseCheckIsOK(editConfigMessage, netconfClient);
+ } catch (IOException e) {
+ throw new IllegalStateException("Edit-config failed on " + configSnapshotHolder, e);
+ }
+
+ // commit
+ NetconfMessage commitResponseMessage;
+ try {
+ commitResponseMessage = sendRequestGetResponseCheckIsOK(getCommitMessage(), netconfClient);
+ } catch (IOException e) {
+ throw new IllegalStateException("Edit commit succeeded, but commit failed on " + configSnapshotHolder, e);
+ }
+
+ if (logger.isTraceEnabled()) {
+ StringBuilder response = new StringBuilder("editConfig response = {");
+ response.append(XmlUtil.toString(editResponseMessage.getDocument()));
+ response.append("}");
+ response.append("commit response = {");
+ response.append(XmlUtil.toString(commitResponseMessage.getDocument()));
+ response.append("}");
+ logger.trace("Last configuration loaded successfully");
+ logger.trace("Detailed message {}", response);
+ }
+ return new EditAndCommitResponse(editResponseMessage, commitResponseMessage);
+ }
+
+
+ private NetconfMessage sendRequestGetResponseCheckIsOK(NetconfMessage request, NetconfClient netconfClient)
+ throws ConflictingVersionException, IOException {
+ try {
+ NetconfMessage netconfMessage = netconfClient.sendMessage(request,
+ configuration.netconfSendMessageMaxAttempts, configuration.netconfSendMessageDelayMs);
+ NetconfUtil.checkIsMessageOk(netconfMessage);
+ return netconfMessage;
+ } catch(ConflictingVersionException e) {
+ logger.trace("conflicting version detected: {}", e.toString());
+ throw e;
+ } catch (RuntimeException | ExecutionException | InterruptedException | TimeoutException e) { // TODO: change NetconfClient#sendMessage to throw checked exceptions
+ logger.debug("Error while executing netconf transaction {} to {}", request, netconfClient, e);
+ throw new IOException("Failed to execute netconf transaction", e);
+ }