Turn TransactionInvokerImpl into a component 16/104416/6
authorRobert Varga <robert.varga@pantheon.tech>
Thu, 16 Feb 2023 06:50:19 +0000 (07:50 +0100)
committerRobert Varga <robert.varga@pantheon.tech>
Wed, 24 Jan 2024 13:06:34 +0000 (14:06 +0100)
TransactionInvokerImpl is a really simplistic component, make it work
using its own lifecycle.

JIRA: OVSDB-468
Change-Id: I781f388a3edc47f4f16548dfaf12dcb2a9427ce5
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/HwvtepSouthboundProvider.java
hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transactions/md/TransactionInvoker.java
hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transactions/md/TransactionInvokerImpl.java

index dca2e0c2fce0079311885dfb35950096bf0c0c30..2f877a0dbe4cc009135e78712bf5008d49d68a0e 100644 (file)
@@ -33,7 +33,6 @@ import org.opendaylight.mdsal.eos.binding.api.EntityOwnershipService;
 import org.opendaylight.mdsal.eos.common.api.CandidateAlreadyRegisteredException;
 import org.opendaylight.ovsdb.hwvtepsouthbound.reconciliation.configuration.HwvtepReconciliationManager;
 import org.opendaylight.ovsdb.hwvtepsouthbound.transactions.md.TransactionInvoker;
-import org.opendaylight.ovsdb.hwvtepsouthbound.transactions.md.TransactionInvokerImpl;
 import org.opendaylight.ovsdb.lib.OvsdbConnection;
 import org.opendaylight.ovsdb.utils.mdsal.utils.Scheduler;
 import org.opendaylight.ovsdb.utils.mdsal.utils.TransactionHistory;
@@ -64,7 +63,6 @@ public final class HwvtepSouthboundProvider
     private final OvsdbConnection ovsdbConnection;
 
     private HwvtepConnectionManager cm;
-    private TransactionInvoker txInvoker;
     private EntityOwnershipCandidateRegistration registration;
     private HwvtepsbPluginInstanceEntityOwnershipListener providerOwnershipChangeListener;
     private HwvtepDataChangeListener hwvtepDTListener;
@@ -77,7 +75,8 @@ public final class HwvtepSouthboundProvider
     public HwvtepSouthboundProvider(@Reference final DataBroker dataBroker,
             @Reference final EntityOwnershipService entityOwnership,
             @Reference final OvsdbConnection ovsdbConnection, @Reference final DOMSchemaService schemaService,
-            @Reference final BindingNormalizedNodeSerializer serializer) {
+            @Reference final BindingNormalizedNodeSerializer serializer,
+            @Reference final TransactionInvoker txInvoker) {
         this.dataBroker = dataBroker;
         entityOwnershipService = entityOwnership;
         registration = null;
@@ -85,7 +84,6 @@ public final class HwvtepSouthboundProvider
         // FIXME: eliminate this static wiring
         HwvtepSouthboundUtil.setInstanceIdentifierCodec(new InstanceIdentifierCodec(schemaService, serializer));
         LOG.info("HwvtepSouthboundProvider ovsdbConnectionService: {}", ovsdbConnection);
-        txInvoker = new TransactionInvokerImpl(dataBroker);
         cm = new HwvtepConnectionManager(dataBroker, txInvoker, entityOwnershipService, ovsdbConnection);
         hwvtepDTListener = new HwvtepDataChangeListener(dataBroker, cm);
         hwvtepReconciliationManager = new HwvtepReconciliationManager(dataBroker, cm);
@@ -123,10 +121,6 @@ public final class HwvtepSouthboundProvider
     @Deactivate
     @Override
     public void close() {
-        if (txInvoker != null) {
-            txInvoker.close();
-            txInvoker = null;
-        }
         if (cm != null) {
             cm.close();
             cm = null;
index 3be894d0e56524b54c7e1535ab9b36e5aec8dc46..6e1a63b4a83221f51fab82b3f9596cc48f085b65 100644 (file)
@@ -22,12 +22,19 @@ import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 import java.util.concurrent.LinkedBlockingQueue;
 import java.util.concurrent.ThreadFactory;
+import javax.annotation.PreDestroy;
+import javax.inject.Inject;
+import javax.inject.Singleton;
 import org.checkerframework.checker.lock.qual.GuardedBy;
 import org.opendaylight.mdsal.binding.api.DataBroker;
 import org.opendaylight.mdsal.binding.api.ReadWriteTransaction;
 import org.opendaylight.mdsal.binding.api.Transaction;
 import org.opendaylight.mdsal.binding.api.TransactionChain;
 import org.opendaylight.mdsal.binding.api.TransactionChainListener;
+import org.osgi.service.component.annotations.Activate;
+import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.Deactivate;
+import org.osgi.service.component.annotations.Reference;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -35,6 +42,8 @@ import org.slf4j.LoggerFactory;
  * Copied over as-is from southbound plugin. Good candidate to be common
  * when refactoring code.
  */
+@Singleton
+@Component(service = TransactionInvoker.class)
 public final class TransactionInvokerImpl implements TransactionInvoker, TransactionChainListener, Runnable,
         AutoCloseable, UncaughtExceptionHandler {
     private static final Logger LOG = LoggerFactory.getLogger(TransactionInvokerImpl.class);
@@ -55,7 +64,9 @@ public final class TransactionInvokerImpl implements TransactionInvoker, Transac
     private volatile ReadWriteTransaction transactionInFlight = null;
     private Iterator<TransactionCommand> commandIterator = null;
 
-    public TransactionInvokerImpl(final DataBroker db) {
+    @Inject
+    @Activate
+    public TransactionInvokerImpl(@Reference final DataBroker db) {
         this.db = db;
         chain = db.createTransactionChain(this);
         ThreadFactory threadFact = new ThreadFactoryBuilder().setNameFormat("transaction-invoker-impl-%d")
@@ -206,6 +217,8 @@ public final class TransactionInvokerImpl implements TransactionInvoker, Transac
         return result;
     }
 
+    @PreDestroy
+    @Deactivate
     @Override
     public void close() {
         chain.close();