X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-clustering-commons%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fcluster%2Fcommon%2Factor%2FMeteredBoundedMailbox.java;h=d234532751e94d871162a82b00d7d051e101ab6c;hp=c56863f1ee6bb4028e750f9b5dd6d02aea59d213;hb=HEAD;hpb=ffd3c3d542dcdab0c2523759a9e5ea02d709e75c diff --git a/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/common/actor/MeteredBoundedMailbox.java b/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/common/actor/MeteredBoundedMailbox.java index c56863f1ee..d234532751 100644 --- a/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/common/actor/MeteredBoundedMailbox.java +++ b/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/common/actor/MeteredBoundedMailbox.java @@ -14,6 +14,7 @@ import akka.dispatch.BoundedDequeBasedMailbox; import akka.dispatch.MailboxType; import akka.dispatch.ProducesMessageQueue; import com.codahale.metrics.Gauge; +import com.codahale.metrics.Metric; import com.codahale.metrics.MetricRegistry; import com.typesafe.config.Config; import org.opendaylight.controller.cluster.reporting.MetricsReporter; @@ -28,60 +29,61 @@ public class MeteredBoundedMailbox implements MailboxType, private final Integer capacity; private final FiniteDuration pushTimeOut; - private final MetricRegistry registry; - public MeteredBoundedMailbox(ActorSystem.Settings settings, Config config) { + public MeteredBoundedMailbox(final ActorSystem.Settings settings, final Config config) { CommonConfig commonConfig = new CommonConfig(settings.config()); this.capacity = commonConfig.getMailBoxCapacity(); this.pushTimeOut = commonConfig.getMailBoxPushTimeout(); - - MetricsReporter reporter = MetricsReporter.getInstance(MeteringBehavior.DOMAIN); - registry = reporter.getMetricsRegistry(); } @Override - public MeteredMessageQueue create(final scala.Option owner, scala.Option system) { + public MeteredMessageQueue create(final scala.Option owner, final scala.Option system) { final MeteredMessageQueue queue = new MeteredMessageQueue(this.capacity, this.pushTimeOut); monitorQueueSize(owner, queue); return queue; } - private void monitorQueueSize(scala.Option owner, final MeteredMessageQueue monitoredQueue) { + private static void monitorQueueSize(final scala.Option owner, final MeteredMessageQueue monitoredQueue) { + registerMetric(owner, QUEUE_SIZE, getQueueSizeGuage(monitoredQueue)); + } + + private static Gauge getQueueSizeGuage(final MeteredMessageQueue monitoredQueue) { + return monitoredQueue::size; + } + + static void registerMetric(final scala.Option owner, final String metricName, + final T metric) { if (owner.isEmpty()) { - return; //there's no actor to monitor + // there's no actor to monitor + return; } + String actorName = owner.get().path().toStringWithoutAddress(); - String metricName = MetricRegistry.name(actorName, QUEUE_SIZE); + String fullName = MetricRegistry.name(actorName, metricName); + + MetricRegistry registry = MetricsReporter.getInstance(MeteringBehavior.DOMAIN).getMetricsRegistry(); - if (registry.getMetrics().containsKey(metricName)) { - return; //already registered + if (registry.getMetrics().containsKey(fullName)) { + // already registered + return; } - Gauge queueSize = getQueueSizeGuage(monitoredQueue); - registerQueueSizeMetric(metricName, queueSize); + try { + registry.register(fullName, metric); + } catch (IllegalArgumentException e) { + // already registered - shouldn't happen here since we check above... + LOG.debug("Unable to register '{}' in metrics registry", fullName); + } } - public static class MeteredMessageQueue extends BoundedDequeBasedMailbox.MessageQueue { private static final long serialVersionUID = 1L; - public MeteredMessageQueue(int capacity, FiniteDuration pushTimeOut) { + public MeteredMessageQueue(final int capacity, final FiniteDuration pushTimeOut) { super(capacity, pushTimeOut); } } - - private static Gauge getQueueSizeGuage(final MeteredMessageQueue monitoredQueue) { - return () -> monitoredQueue.size(); - } - - private void registerQueueSizeMetric(String metricName, Gauge metric) { - try { - registry.register(metricName,metric); - } catch (IllegalArgumentException e) { - LOG.warn("Unable to register queue size in metrics registry. Failed with exception {}. ", e); - } - } }