From: Robert Varga Date: Mon, 15 Jan 2024 19:35:30 +0000 (+0100) Subject: Teach AbstractDOMDataBroker about commit cohorts X-Git-Tag: v13.0.0~20 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=commitdiff_plain;h=refs%2Fchanges%2F87%2F109787%2F4;hp=90b0687e0640ee23369d2ad9978628e3ff957a26;p=mdsal.git Teach AbstractDOMDataBroker about commit cohorts This is something the Controller version of this class recognizes, but we do not. Close the gap. JIRA: MDSAL-851 Change-Id: I248d471813054ae2b82cdeef8ea1ff58750d4baf Signed-off-by: Robert Varga --- diff --git a/dom/mdsal-dom-broker/src/test/java/org/opendaylight/mdsal/dom/broker/DOMBrokerTest.java b/dom/mdsal-dom-broker/src/test/java/org/opendaylight/mdsal/dom/broker/DOMBrokerTest.java index 243b03d8c6..842b9bf81d 100644 --- a/dom/mdsal-dom-broker/src/test/java/org/opendaylight/mdsal/dom/broker/DOMBrokerTest.java +++ b/dom/mdsal-dom-broker/src/test/java/org/opendaylight/mdsal/dom/broker/DOMBrokerTest.java @@ -228,22 +228,6 @@ public class DOMBrokerTest extends AbstractDatastoreTest { } } - @SuppressWarnings({"checkstyle:IllegalThrows", "checkstyle:IllegalCatch"}) - @Test - public void closeTest() throws Exception { - final String testException = "TestException"; - - domBroker.setCloseable(() -> { - throw new Exception(testException); - }); - - try { - domBroker.close(); - } catch (final Exception e) { - assertTrue(e.getMessage().contains(testException)); - } - } - static class CommitExecutorService extends ForwardingExecutorService { ExecutorService delegate; diff --git a/dom/mdsal-dom-spi/src/main/java/org/opendaylight/mdsal/dom/spi/AbstractDOMDataBroker.java b/dom/mdsal-dom-spi/src/main/java/org/opendaylight/mdsal/dom/spi/AbstractDOMDataBroker.java index 00003aad6b..a06d63febe 100644 --- a/dom/mdsal-dom-spi/src/main/java/org/opendaylight/mdsal/dom/spi/AbstractDOMDataBroker.java +++ b/dom/mdsal-dom-spi/src/main/java/org/opendaylight/mdsal/dom/spi/AbstractDOMDataBroker.java @@ -7,6 +7,7 @@ */ package org.opendaylight.mdsal.dom.spi; +import com.google.common.collect.ImmutableList; import java.util.EnumMap; import java.util.List; import java.util.Map; @@ -14,6 +15,7 @@ import java.util.concurrent.atomic.AtomicLong; import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.mdsal.common.api.LogicalDatastoreType; import org.opendaylight.mdsal.dom.api.DOMDataTreeChangeService; +import org.opendaylight.mdsal.dom.api.DOMDataTreeCommitCohortRegistry; import org.opendaylight.mdsal.dom.api.DOMTransactionChain; import org.opendaylight.mdsal.dom.spi.store.DOMStore; import org.opendaylight.mdsal.dom.spi.store.DOMStoreTransactionChain; @@ -29,53 +31,30 @@ public abstract class AbstractDOMDataBroker extends AbstractDOMForwardedTransact private final AtomicLong chainNum = new AtomicLong(); private final @NonNull List supportedExtensions; - private volatile AutoCloseable closeable; - protected AbstractDOMDataBroker(final Map datastores) { super(datastores); - boolean treeChange = true; - for (var ds : datastores.values()) { - if (!(ds instanceof DOMStoreTreeChangePublisher)) { - treeChange = false; - break; - } - } - - if (treeChange) { - supportedExtensions = List.of((DOMDataTreeChangeService) (treeId, listener) -> { + final var builder = ImmutableList.builder(); + if (isSupported(datastores, DOMStoreTreeChangePublisher.class)) { + builder.add((DOMDataTreeChangeService) (treeId, listener) -> { final var dsType = treeId.datastore(); if (getTxFactories().get(dsType) instanceof DOMStoreTreeChangePublisher publisher) { return publisher.registerTreeChangeListener(treeId.path(), listener); } throw new IllegalStateException("Publisher for " + dsType + " data store is not available"); }); - } else { - supportedExtensions = List.of(); } - } - - public void setCloseable(final AutoCloseable closeable) { - this.closeable = closeable; - } - - @SuppressWarnings("checkstyle:IllegalCatch") - @Override - public void close() { - super.close(); - - if (closeable != null) { - try { - closeable.close(); - } catch (Exception e) { - LOG.debug("Error closing instance", e); - } + if (isSupported(datastores, DOMDataTreeCommitCohortRegistry.class)) { + builder.add((DOMDataTreeCommitCohortRegistry) (path, cohort) -> { + final var dsType = path.datastore(); + if (getTxFactories().get(dsType) instanceof DOMDataTreeCommitCohortRegistry registry) { + return registry.registerCommitCohort(path, cohort); + } + throw new IllegalStateException("Cohort registry for " + dsType + " data store is not available"); + }); } - } - @Override - protected Object newTransactionIdentifier() { - return "DOM-" + txNum.getAndIncrement(); + supportedExtensions = builder.build(); } @Override @@ -83,7 +62,6 @@ public abstract class AbstractDOMDataBroker extends AbstractDOMForwardedTransact return supportedExtensions; } - @Override public DOMTransactionChain createTransactionChain() { checkNotClosed(); @@ -97,4 +75,14 @@ public abstract class AbstractDOMDataBroker extends AbstractDOMForwardedTransact LOG.debug("Transactoin chain {} created, backing store chains {}", chainId, delegates); return new DOMDataBrokerTransactionChainImpl(chainId, delegates, this); } + + @Override + protected final Object newTransactionIdentifier() { + return "DOM-" + txNum.getAndIncrement(); + } + + private static boolean isSupported(final Map datastores, + final Class expDOMStoreInterface) { + return datastores.values().stream().allMatch(expDOMStoreInterface::isInstance); + } }