Bug 4455 - Inconsistent COMMIT operation handling when no transactions are present 38/32938/1
authorJakub Morvay <jmorvay@cisco.com>
Thu, 14 Jan 2016 12:39:01 +0000 (13:39 +0100)
committerJakub Morvay <jmorvay@cisco.com>
Mon, 18 Jan 2016 13:57:35 +0000 (13:57 +0000)
Return positive response for commit operation in netconf mdsal
northbound even if no candidate transaction is open for session.

Change-Id: I2483a1e4da533566ce318bab0858af2a4fb3c6d3
Signed-off-by: Jakub Morvay <jmorvay@cisco.com>
(cherry picked from commit 5a7a791d64aa5de004dd526c2cb6331fc0d58522)

opendaylight/netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/netconf/mdsal/connector/TransactionProvider.java
opendaylight/netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/netconf/mdsal/connector/ops/Commit.java
opendaylight/netconf/mdsal-netconf-connector/src/test/java/org/opendaylight/netconf/mdsal/connector/ops/NetconfMDSalMappingTest.java

index 23da0f5617fc2822184190fd4adfd7c52a09c565..1eacbf364b739a7796a31204baa8ab1fd059f3ac 100644 (file)
@@ -73,8 +73,9 @@ public class TransactionProvider implements AutoCloseable{
 
     public synchronized boolean commitTransaction() throws DocumentedException {
         if (!getCandidateTransaction().isPresent()) {
-            throw new DocumentedException(NO_TRANSACTION_FOUND_FOR_SESSION + netconfSessionIdForReporting,
-                    ErrorType.application, ErrorTag.operation_failed, ErrorSeverity.error);
+            //making empty commit without prior opened transaction, just return true
+            LOG.debug("Making commit without open candidate transaction for session {}", netconfSessionIdForReporting);
+            return true;
         }
 
         CheckedFuture<Void, TransactionCommitFailedException> future = candidateTransaction.submit();
index 6f1037a4d5abe0ff461a442401d83b36101b88d5..43e12a34945df1feb2b93fd0fe73f180ff538ca2 100644 (file)
@@ -37,7 +37,7 @@ public class Commit extends AbstractSingletonNetconfOperation {
     protected Element handleWithNoSubsequentOperations(final Document document, final XmlElement operationElement) throws DocumentedException {
 
         boolean commitStatus = transactionProvider.commitTransaction();
-        LOG.trace("Transaction commited succesfuly {}", commitStatus);
+        LOG.trace("Commit completed successfully {}", commitStatus);
 
         return XmlUtil.createElement(document, XmlNetconfConstants.OK, Optional.<String>absent());
     }
index 3a0f3572831b590b3f36967477cc7511d9861caf..4bf2a2b2738decd223b18b53e43c5b043b0d6132 100644 (file)
@@ -213,6 +213,12 @@ public class NetconfMDSalMappingTest {
 
     }
 
+    @Test
+    public void testCommitWithoutOpenTransaction() throws Exception {
+        verifyResponse(commit(), RPC_REPLY_OK);
+        assertEmptyDatastore(getConfigCandidate());
+    }
+
     @Test
     public void testCandidateTransaction() throws Exception {