X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-distributed-datastore%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fcluster%2Fdatastore%2FDefaultShardDataTreeChangeListenerPublisher.java;fp=opendaylight%2Fmd-sal%2Fsal-distributed-datastore%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fcluster%2Fdatastore%2FShardDataTreeChangePublisher.java;h=217ffd358c5358fa3f7a883d04d4d014f6c0eeee;hp=c1555b32575fab1829e2c9f58b4bc7d6f6ca5809;hb=refs%2Fchanges%2F96%2F34096%2F5;hpb=6880b6dfa565e54557351019c1d1e6e76afdda9f diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/ShardDataTreeChangePublisher.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DefaultShardDataTreeChangeListenerPublisher.java similarity index 54% rename from opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/ShardDataTreeChangePublisher.java rename to opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DefaultShardDataTreeChangeListenerPublisher.java index c1555b3257..217ffd358c 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/ShardDataTreeChangePublisher.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DefaultShardDataTreeChangeListenerPublisher.java @@ -7,24 +7,56 @@ */ package org.opendaylight.controller.cluster.datastore; +import com.google.common.base.Stopwatch; import java.util.Collection; import java.util.Collections; +import java.util.concurrent.TimeUnit; import javax.annotation.concurrent.NotThreadSafe; import org.opendaylight.controller.md.sal.dom.spi.AbstractDOMDataTreeChangeListenerRegistration; import org.opendaylight.controller.sal.core.spi.data.AbstractDOMStoreTreeChangePublisher; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeCandidate; -import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeCandidates; import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeCandidateNode; +import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeCandidates; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +/** + * Default implementation of ShardDataTreeChangeListenerPublisher that directly generates and publishes + * notifications for DataTreeChangeListeners. + * + * @author Thomas Pantelis + */ @NotThreadSafe -final class ShardDataTreeChangePublisher extends AbstractDOMStoreTreeChangePublisher { - private static final Logger LOG = LoggerFactory.getLogger(ShardDataTreeChangePublisher.class); +final class DefaultShardDataTreeChangeListenerPublisher extends AbstractDOMStoreTreeChangePublisher + implements ShardDataTreeChangeListenerPublisher { + private static final Logger LOG = LoggerFactory.getLogger(DefaultShardDataTreeChangeListenerPublisher.class); + + private final Stopwatch timer = Stopwatch.createUnstarted(); + + @Override + public void publishChanges(final DataTreeCandidate candidate, String logContext) { + timer.start(); + + try { + processCandidateTree(candidate); + } finally { + timer.stop(); + long elapsedTime = timer.elapsed(TimeUnit.MILLISECONDS); + if(elapsedTime >= PUBLISH_DELAY_THRESHOLD_IN_MS) { + LOG.warn("{}: Generation of DataTreeCandidateNode events took longer than expected. Elapsed time: {}", + logContext, timer); + } else { + LOG.debug("{}: Elapsed time for generation of DataTreeCandidateNode events: {}", logContext, timer); + } + + timer.reset(); + } + } - void publishChanges(final DataTreeCandidate candidate) { - processCandidateTree(candidate); + @Override + public ShardDataTreeChangeListenerPublisher newInstance() { + return new DefaultShardDataTreeChangeListenerPublisher(); } @Override