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=258672114a9ac2ccce436b8623e4fd3f209796bb;hp=458f379f845904786a77d992c87b1e1f3bbe5c2c;hb=6d03458bb71b7c0308746577d7e3035d33971c9b;hpb=dd281c0e33267296ad3babbffd03e1122cdb127e 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 458f379f84..258672114a 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; @@ -21,72 +22,67 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import scala.concurrent.duration.FiniteDuration; -public class MeteredBoundedMailbox implements MailboxType, ProducesMessageQueue { +public class MeteredBoundedMailbox implements MailboxType, + ProducesMessageQueue { + private static final Logger LOG = LoggerFactory.getLogger(MeteredBoundedMailbox.class); + private static final String QUEUE_SIZE = "q-size"; - private final Logger LOG = LoggerFactory.getLogger(MeteredBoundedMailbox.class); - - private MeteredMessageQueue queue; - private Integer capacity; - private FiniteDuration pushTimeOut; - private MetricRegistry registry; - - private final String QUEUE_SIZE = "q-size"; + private final Integer capacity; + private final FiniteDuration pushTimeOut; public MeteredBoundedMailbox(ActorSystem.Settings settings, Config config) { CommonConfig commonConfig = new CommonConfig(settings.config()); this.capacity = commonConfig.getMailBoxCapacity(); this.pushTimeOut = commonConfig.getMailBoxPushTimeout(); - - MetricsReporter reporter = MetricsReporter.getInstance(); - registry = reporter.getMetricsRegistry(); } @Override public MeteredMessageQueue create(final scala.Option owner, scala.Option system) { - this.queue = new MeteredMessageQueue(this.capacity, this.pushTimeOut); - monitorQueueSize(owner, this.queue); - return this.queue; + final MeteredMessageQueue queue = new MeteredMessageQueue(this.capacity, this.pushTimeOut); + monitorQueueSize(owner, queue); + return queue; } private void monitorQueueSize(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(scala.Option owner, String metricName, 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 = registry.name(actorName, QUEUE_SIZE); + String fullName = MetricRegistry.name(actorName, metricName); - if (registry.getMetrics().containsKey(metricName)) - return; //already registered + MetricRegistry registry = MetricsReporter.getInstance(MeteringBehavior.DOMAIN).getMetricsRegistry(); - Gauge queueSize = getQueueSizeGuage(monitoredQueue); - registerQueueSizeMetric(metricName, queueSize); - } + if (registry.getMetrics().containsKey(fullName)) { + // already registered + return; + } + 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: {}", e); + } + } public static class MeteredMessageQueue extends BoundedDequeBasedMailbox.MessageQueue { + private static final long serialVersionUID = 1L; public MeteredMessageQueue(int capacity, FiniteDuration pushTimeOut) { super(capacity, pushTimeOut); } } - - private Gauge getQueueSizeGuage(final MeteredMessageQueue monitoredQueue ){ - return new Gauge() { - @Override - public Integer getValue() { - 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); - } - } }