Improve AbstractDOMTransactionFactory 43/103143/1
authorRobert Varga <robert.varga@pantheon.tech>
Tue, 8 Nov 2022 11:23:19 +0000 (12:23 +0100)
committerRobert Varga <robert.varga@pantheon.tech>
Tue, 8 Nov 2022 11:23:49 +0000 (12:23 +0100)
AutoCloseable.close() is recommended to be idempotent, follow that
guidance, producing a warning with a stack trace if that is not the
case.

Change-Id: I1b65466f9b84e05417d8cd24c1b7a5e89e8e836b
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/AbstractDOMTransactionFactory.java

index 91ca744f763173834a84003423a88fdde06e58f5..afbef9dd7117b43ca51b340a2beb3a9930486b01 100644 (file)
@@ -21,12 +21,17 @@ import org.opendaylight.mdsal.dom.api.DOMDataTreeReadWriteTransaction;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeWriteTransaction;
 import org.opendaylight.mdsal.dom.spi.store.DOMStoreThreePhaseCommitCohort;
 import org.opendaylight.mdsal.dom.spi.store.DOMStoreTransactionFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 public abstract class AbstractDOMTransactionFactory<T extends DOMStoreTransactionFactory> implements AutoCloseable {
+    private static final Logger LOG = LoggerFactory.getLogger(AbstractDOMTransactionFactory.class);
     @SuppressWarnings("rawtypes")
     private static final AtomicIntegerFieldUpdater<AbstractDOMTransactionFactory> UPDATER =
             AtomicIntegerFieldUpdater.newUpdater(AbstractDOMTransactionFactory.class, "closed");
+
     private final Map<LogicalDatastoreType, T> storeTxFactories;
+
     private volatile int closed = 0;
 
     protected AbstractDOMTransactionFactory(final Map<LogicalDatastoreType, T> txFactories) {
@@ -112,7 +117,8 @@ public abstract class AbstractDOMTransactionFactory<T extends DOMStoreTransactio
 
     @Override
     public void close() {
-        final boolean success = UPDATER.compareAndSet(this, 0, 1);
-        Preconditions.checkState(success, "Transaction factory was already closed");
+        if (!UPDATER.compareAndSet(this, 0, 1)) {
+            LOG.warn("Transaction factory was already closed", new Throwable());
+        }
     }
 }