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=2a6aac4d79d95ec603591fa84865d0517c35d84d;hb=HEAD;hpb=59e84273be97b1115fb3fb0f06364b7491a40385 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 2a6aac4d79..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; @@ -21,75 +22,68 @@ 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 final Integer capacity; private final FiniteDuration pushTimeOut; - private final MetricRegistry registry; - - private final String QUEUE_SIZE = "q-size"; - 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) { - this.queue = new MeteredMessageQueue(this.capacity, this.pushTimeOut); - monitorQueueSize(owner, this.queue); - return this.queue; + 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 static void monitorQueueSize(final scala.Option owner, final MeteredMessageQueue monitoredQueue) { + registerMetric(owner, QUEUE_SIZE, getQueueSizeGuage(monitoredQueue)); } - private void monitorQueueSize(scala.Option owner, final MeteredMessageQueue 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); - if (registry.getMetrics().containsKey(metricName)) - { - return; //already registered + MetricRegistry registry = MetricsReporter.getInstance(MeteringBehavior.DOMAIN).getMetricsRegistry(); + + 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 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); - } - } }