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=7517efeb9028f5df15349a62e74eadb4bf91f15e;hb=HEAD;hpb=c181b0ab3202b1d5d87d6048d85c787fde090b8a 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 7517efeb90..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,71 +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 final Integer capacity; + private final FiniteDuration pushTimeOut; - private MeteredMessageQueue queue; - private Integer capacity; - private FiniteDuration pushTimeOut; - private 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(); - 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 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); - - if (registry.getMetrics().containsKey(metricName)) - return; //already registered - Gauge queueSize = getQueueSizeGuage(monitoredQueue); - registerQueueSizeMetric(metricName, queueSize); - } + String actorName = owner.get().path().toStringWithoutAddress(); + String fullName = MetricRegistry.name(actorName, metricName); + MetricRegistry registry = MetricsReporter.getInstance(MeteringBehavior.DOMAIN).getMetricsRegistry(); - public static class MeteredMessageQueue extends BoundedDequeBasedMailbox.MessageQueue { + if (registry.getMetrics().containsKey(fullName)) { + // already registered + return; + } - public MeteredMessageQueue(int capacity, FiniteDuration pushTimeOut) { - super(capacity, pushTimeOut); + 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); } } - private Gauge getQueueSizeGuage(final MeteredMessageQueue monitoredQueue ){ - return new Gauge() { - @Override - public Integer getValue() { - return monitoredQueue.size(); - } - }; - } + public static class MeteredMessageQueue extends BoundedDequeBasedMailbox.MessageQueue { + private static final long serialVersionUID = 1L; - 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); + public MeteredMessageQueue(final int capacity, final FiniteDuration pushTimeOut) { + super(capacity, pushTimeOut); } } }