From 98a12fd8256bf8feee9bb364ade1ee5f21079d61 Mon Sep 17 00:00:00 2001 From: Tom Pantelis Date: Wed, 1 Jul 2015 16:58:28 -0400 Subject: [PATCH] CDS: Add pending tx queue size to ShardStats To aid debugging, I added the pending commit queue size of the ShardCommitCoordinator to the ShardStats bean. Change-Id: I2af3493eb5dd54f9f9406b0a005d66be004c12ff Signed-off-by: Tom Pantelis (cherry picked from commit 5fc8785d919cd3cad92036b1add1a7fdd25bf715) --- .../controller/cluster/datastore/Shard.java | 6 ++- .../datastore/ShardCommitCoordinator.java | 4 ++ .../jmx/mbeans/shard/ShardMBeanFactory.java | 30 ++------------ .../jmx/mbeans/shard/ShardStats.java | 40 +++++-------------- .../jmx/mbeans/shard/ShardStatsMXBean.java | 2 + 5 files changed, 26 insertions(+), 56 deletions(-) diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/Shard.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/Shard.java index 7ca9ca9928..65be23dfd0 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/Shard.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/Shard.java @@ -133,7 +133,7 @@ public class Shard extends RaftActor { shardMBean = ShardMBeanFactory.getShardStatsMBean(name.toString(), datastoreContext.getDataStoreMXBeanType()); - shardMBean.setShardActor(getSelf()); + shardMBean.setShard(this); if (isMetricsCaptureEnabled()) { getContext().become(new MeteringBehavior(this)); @@ -274,6 +274,10 @@ public class Shard extends RaftActor { } } + public int getPendingTxCommitQueueSize() { + return commitCoordinator.getQueueSize(); + } + @Override protected Optional getRoleChangeNotifier() { return roleChangeNotifier; diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/ShardCommitCoordinator.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/ShardCommitCoordinator.java index 53f27061ae..3431755b51 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/ShardCommitCoordinator.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/ShardCommitCoordinator.java @@ -77,6 +77,10 @@ class ShardCommitCoordinator { this.cacheExpiryTimeoutInMillis = cacheExpiryTimeoutInMillis; } + int getQueueSize() { + return queuedCohortEntries.size(); + } + void setQueueCapacity(int queueCapacity) { this.queueCapacity = queueCapacity; } diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/jmx/mbeans/shard/ShardMBeanFactory.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/jmx/mbeans/shard/ShardMBeanFactory.java index 4a7752aec1..5d3fe8b2d0 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/jmx/mbeans/shard/ShardMBeanFactory.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/jmx/mbeans/shard/ShardMBeanFactory.java @@ -7,12 +7,6 @@ */ package org.opendaylight.controller.cluster.datastore.jmx.mbeans.shard; -import com.google.common.cache.Cache; -import com.google.common.cache.CacheBuilder; -import java.util.concurrent.Callable; -import java.util.concurrent.ExecutionException; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** * @author Basheeruddin syedbahm@cisco.com @@ -20,26 +14,10 @@ import org.slf4j.LoggerFactory; */ public class ShardMBeanFactory { - private static final Logger LOG = LoggerFactory.getLogger(ShardMBeanFactory.class); - - private static final Cache shardMBeansCache = - CacheBuilder.newBuilder().weakValues().build(); - public static ShardStats getShardStatsMBean(final String shardName, final String mxBeanType) { - final String finalMXBeanType = mxBeanType != null ? mxBeanType : "DistDataStore"; - try { - return shardMBeansCache.get(shardName, new Callable() { - @Override - public ShardStats call() throws Exception { - ShardStats shardStatsMBeanImpl = new ShardStats(shardName, finalMXBeanType); - shardStatsMBeanImpl.registerMBean(); - return shardStatsMBeanImpl; - } - }); - } catch(ExecutionException e) { - LOG.error(String.format("Could not create MXBean for shard: %s", shardName), e); - // Just return an instance that isn't registered. - return new ShardStats(shardName, finalMXBeanType); - } + String finalMXBeanType = mxBeanType != null ? mxBeanType : "DistDataStore"; + ShardStats shardStatsMBeanImpl = new ShardStats(shardName, finalMXBeanType); + shardStatsMBeanImpl.registerMBean(); + return shardStatsMBeanImpl; } } diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/jmx/mbeans/shard/ShardStats.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/jmx/mbeans/shard/ShardStats.java index 2e8d093139..1f51c6f3a1 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/jmx/mbeans/shard/ShardStats.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/jmx/mbeans/shard/ShardStats.java @@ -8,7 +8,6 @@ package org.opendaylight.controller.cluster.datastore.jmx.mbeans.shard; -import akka.actor.ActorRef; import akka.pattern.Patterns; import akka.util.Timeout; import com.google.common.base.Stopwatch; @@ -20,16 +19,11 @@ import java.util.List; import java.util.Map; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicLong; +import org.opendaylight.controller.cluster.datastore.Shard; import org.opendaylight.controller.cluster.raft.client.messages.FollowerInfo; import org.opendaylight.controller.cluster.raft.client.messages.GetOnDemandRaftState; import org.opendaylight.controller.cluster.raft.client.messages.OnDemandRaftState; import org.opendaylight.controller.md.sal.common.util.jmx.AbstractMXBean; -import org.opendaylight.controller.md.sal.common.util.jmx.QueuedNotificationManagerMXBeanImpl; -import org.opendaylight.controller.md.sal.common.util.jmx.ThreadExecutorStatsMXBeanImpl; -import org.opendaylight.controller.md.sal.dom.store.impl.InMemoryDOMDataStore; -import org.opendaylight.yangtools.util.concurrent.QueuedNotificationManager; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import scala.concurrent.Await; /** @@ -40,8 +34,6 @@ import scala.concurrent.Await; public class ShardStats extends AbstractMXBean implements ShardStatsMXBean { public static String JMX_CATEGORY_SHARD = "Shards"; - private static final Logger LOG = LoggerFactory.getLogger(ShardStats.class); - private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); private static final Cache onDemandRaftStateCache = @@ -63,13 +55,9 @@ public class ShardStats extends AbstractMXBean implements ShardStatsMXBean { private long abortTransactionsCount; - private ThreadExecutorStatsMXBeanImpl notificationExecutorStatsBean; - - private QueuedNotificationManagerMXBeanImpl notificationManagerStatsBean; - private boolean followerInitialSyncStatus = false; - private ActorRef shardActor; + private Shard shard; private String statRetrievalError; @@ -83,15 +71,8 @@ public class ShardStats extends AbstractMXBean implements ShardStatsMXBean { super(shardName, mxBeanType, JMX_CATEGORY_SHARD); } - public void setNotificationManager(final QueuedNotificationManager manager) { - this.notificationManagerStatsBean = new QueuedNotificationManagerMXBeanImpl(manager, - "notification-manager", getMBeanType(), getMBeanCategory()); - - this.notificationExecutorStatsBean = ThreadExecutorStatsMXBeanImpl.create(manager.getExecutor()); - } - - public void setShardActor(ActorRef shardActor) { - this.shardActor = shardActor; + public void setShard(Shard shard) { + this.shard = shard; } private OnDemandRaftState getOnDemandRaftState() { @@ -101,12 +82,12 @@ public class ShardStats extends AbstractMXBean implements ShardStatsMXBean { statRetrievalError = null; statRetrievalTime = null; - if(shardActor != null) { + if(shard != null) { Timeout timeout = new Timeout(10, TimeUnit.SECONDS); try { Stopwatch timer = Stopwatch.createStarted(); - state = (OnDemandRaftState) Await.result(Patterns.ask(shardActor, + state = (OnDemandRaftState) Await.result(Patterns.ask(shard.getSelf(), GetOnDemandRaftState.INSTANCE, timeout), timeout.duration()); statRetrievalTime = timer.stop().toString(); @@ -303,10 +284,6 @@ public class ShardStats extends AbstractMXBean implements ShardStatsMXBean { } - public void setDataStore(final InMemoryDOMDataStore store) { - setNotificationManager(store.getDataChangeListenerNotificationManager()); - } - public void setFollowerInitialSyncStatus(boolean followerInitialSyncStatus) { this.followerInitialSyncStatus = followerInitialSyncStatus; } @@ -362,4 +339,9 @@ public class ShardStats extends AbstractMXBean implements ShardStatsMXBean { public String getLastLeadershipChangeTime() { return DATE_FORMAT.format(new Date(lastLeadershipChangeTime)); } + + @Override + public int getPendingTxCommitQueueSize() { + return shard.getPendingTxCommitQueueSize(); + } } diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/jmx/mbeans/shard/ShardStatsMXBean.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/jmx/mbeans/shard/ShardStatsMXBean.java index 8115f79f3d..8d6876bc3b 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/jmx/mbeans/shard/ShardStatsMXBean.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/jmx/mbeans/shard/ShardStatsMXBean.java @@ -73,4 +73,6 @@ public interface ShardStatsMXBean { long getLeadershipChangeCount(); String getLastLeadershipChangeTime(); + + int getPendingTxCommitQueueSize(); } -- 2.36.6