From 6f350bd81373d96a8931da993fdd2a4cbe061477 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Thu, 16 Feb 2023 07:50:19 +0100 Subject: [PATCH] Turn TransactionInvokerImpl into a component TransactionInvokerImpl is a really simplistic component, make it work using its own lifecycle. JIRA: OVSDB-468 Change-Id: I781f388a3edc47f4f16548dfaf12dcb2a9427ce5 Signed-off-by: Robert Varga --- .../HwvtepSouthboundProvider.java | 10 ++-------- .../transactions/md/TransactionInvoker.java | 2 -- .../transactions/md/TransactionInvokerImpl.java | 15 ++++++++++++++- 3 files changed, 16 insertions(+), 11 deletions(-) diff --git a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/HwvtepSouthboundProvider.java b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/HwvtepSouthboundProvider.java index dca2e0c2f..2f877a0db 100644 --- a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/HwvtepSouthboundProvider.java +++ b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/HwvtepSouthboundProvider.java @@ -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; diff --git a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transactions/md/TransactionInvoker.java b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transactions/md/TransactionInvoker.java index bb9f14ca4..dfcbd1590 100644 --- a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transactions/md/TransactionInvoker.java +++ b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transactions/md/TransactionInvoker.java @@ -10,6 +10,4 @@ package org.opendaylight.ovsdb.hwvtepsouthbound.transactions.md; public interface TransactionInvoker { void invoke(TransactionCommand command); - - void close(); } diff --git a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transactions/md/TransactionInvokerImpl.java b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transactions/md/TransactionInvokerImpl.java index 3be894d0e..6e1a63b4a 100644 --- a/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transactions/md/TransactionInvokerImpl.java +++ b/hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transactions/md/TransactionInvokerImpl.java @@ -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 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(); -- 2.36.6