Improve AbstractDOMForwardedTransactionFactory 21/103121/1
authorRobert Varga <robert.varga@pantheon.tech>
Mon, 7 Nov 2022 01:58:21 +0000 (02:58 +0100)
committerRobert Varga <robert.varga@pantheon.tech>
Mon, 7 Nov 2022 02:00:03 +0000 (03:00 +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: I0ba827bae521b07c94ecf58e8881f72b1ec8fdc6
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
dom/mdsal-dom-broker/src/main/java/org/opendaylight/mdsal/dom/broker/AbstractDOMForwardedTransactionFactory.java

index 4ac4bbf96a9a88e1a31b34b4170c10e4ab4b64f8..74794b4115cab753d60b86b425628947666c8506 100644 (file)
@@ -28,6 +28,8 @@ import org.opendaylight.mdsal.dom.spi.store.DOMStoreTransactionFactory;
 import org.opendaylight.mdsal.dom.spi.store.DOMStoreWriteTransaction;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * Abstract composite transaction factory.
@@ -43,10 +45,13 @@ import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
  * @param <T> Type of {@link DOMStoreTransactionFactory} factory.
  */
 abstract class AbstractDOMForwardedTransactionFactory<T extends DOMStoreTransactionFactory> implements AutoCloseable {
+    private static final Logger LOG = LoggerFactory.getLogger(AbstractDOMForwardedTransactionFactory.class);
     @SuppressWarnings("rawtypes")
     private static final AtomicIntegerFieldUpdater<AbstractDOMForwardedTransactionFactory> UPDATER =
             AtomicIntegerFieldUpdater.newUpdater(AbstractDOMForwardedTransactionFactory.class, "closed");
+
     private final Map<LogicalDatastoreType, T> storeTxFactories;
+
     private volatile int closed = 0;
 
     protected AbstractDOMForwardedTransactionFactory(final Map<LogicalDatastoreType, ? extends T> txFactories) {
@@ -180,6 +185,8 @@ abstract class AbstractDOMForwardedTransactionFactory<T extends DOMStoreTransact
 
     @Override
     public void close() {
-        checkState(UPDATER.compareAndSet(this, 0, 1), "Transaction factory was already closed");
+        if (!UPDATER.compareAndSet(this, 0, 1)) {
+            LOG.warn("Transaction factory was already closed", new Throwable());
+        }
     }
 }