X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-distributed-datastore%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fcluster%2Fdatastore%2FShardDataTreeNotificationPublisherActor.java;h=c22bc3bd98930c2e561a7b4f9b06083da1dfb8d0;hb=546cd1fd100dbaa36908b22c2f422320dbd8c4b2;hp=e4e7eb33e9d4b176a4bb87f3212d12eb1d9b11bc;hpb=a46305fbc6bb7ec6883c21298d356a5e4fbbb015;p=controller.git diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/ShardDataTreeNotificationPublisherActor.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/ShardDataTreeNotificationPublisherActor.java index e4e7eb33e9..c22bc3bd98 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/ShardDataTreeNotificationPublisherActor.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/ShardDataTreeNotificationPublisherActor.java @@ -7,7 +7,8 @@ */ package org.opendaylight.controller.cluster.datastore; -import akka.actor.Props; +import com.google.common.base.Stopwatch; +import java.util.concurrent.TimeUnit; import org.opendaylight.controller.cluster.common.actor.AbstractUntypedActor; import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeCandidate; @@ -17,33 +18,55 @@ import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeCandidate; * * @author Thomas Pantelis */ -public class ShardDataTreeNotificationPublisherActor extends AbstractUntypedActor { +public class ShardDataTreeNotificationPublisherActor + extends AbstractUntypedActor { + private final T publisher; + private final Stopwatch timer = Stopwatch.createUnstarted(); + private final String name; + private final String logContext; + + protected ShardDataTreeNotificationPublisherActor(final T publisher, final String name, final String logContext) { + this.publisher = publisher; + this.name = name; + this.logContext = logContext; + } + + protected T publisher() { + return publisher; + } + + protected String logContext() { + return logContext; + } @Override protected void handleReceive(Object message) { - if(message instanceof PublishNotifications) { - ((PublishNotifications)message).publish(); - } - } + if (message instanceof PublishNotifications) { + PublishNotifications toPublish = (PublishNotifications)message; + timer.start(); + + try { + publisher.publishChanges(toPublish.candidate); + } finally { + long elapsedTime = timer.elapsed(TimeUnit.MILLISECONDS); + + if (elapsedTime >= ShardDataTreeNotificationPublisher.PUBLISH_DELAY_THRESHOLD_IN_MS) { + LOG.warn("{}: Generation of change events for {} took longer than expected. Elapsed time: {}", + logContext, name, timer); + } else { + LOG.debug("{}: Elapsed time for generation of change events for {}: {}", logContext, name, timer); + } - static Props props() { - return Props.create(ShardDataTreeNotificationPublisherActor.class); + timer.reset(); + } + } } static class PublishNotifications { - private final ShardDataTreeNotificationPublisher publisher; private final DataTreeCandidate candidate; - private final String logContext; - PublishNotifications(ShardDataTreeNotificationPublisher publisher, DataTreeCandidate candidate, - String logContext) { - this.publisher = publisher; + PublishNotifications(DataTreeCandidate candidate) { this.candidate = candidate; - this.logContext = logContext; - } - - private void publish() { - publisher.publishChanges(candidate, logContext); } } }