X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-distributed-datastore%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fcluster%2Fdatastore%2Fjmx%2Fmbeans%2Fshard%2FShardStats.java;h=6e8ff146d4790f376fba19c33a8e0a474a4f3e86;hb=925cb4a228d0fda99c7bfeb432eb25285a223887;hp=2e8d0931397592d646ae8280fb369d34851ed976;hpb=e1fc2efacc0b2da9075b6cd4e5ae149a141c486d;p=controller.git 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..6e8ff146d4 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 @@ -11,6 +11,7 @@ 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.Joiner; import com.google.common.base.Stopwatch; import com.google.common.cache.Cache; import com.google.common.cache.CacheBuilder; @@ -20,16 +21,12 @@ 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.base.messages.InitiateCaptureSnapshot; 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,11 +37,9 @@ 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 = + private static final Cache ONDEMAND_RAFT_STATE_CACHE = CacheBuilder.newBuilder().expireAfterWrite(2, TimeUnit.SECONDS).build(); private long committedTransactionsCount; @@ -63,13 +58,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,34 +74,28 @@ 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; } + @SuppressWarnings("checkstyle:IllegalCatch") private OnDemandRaftState getOnDemandRaftState() { String name = getShardName(); - OnDemandRaftState state = onDemandRaftStateCache.getIfPresent(name); - if(state == null) { + OnDemandRaftState state = ONDEMAND_RAFT_STATE_CACHE.getIfPresent(name); + if (state == null) { 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(); - onDemandRaftStateCache.put(name, state); + ONDEMAND_RAFT_STATE_CACHE.put(name, state); } catch (Exception e) { statRetrievalError = e.toString(); } @@ -212,6 +197,16 @@ public class ShardStats extends AbstractMXBean implements ShardStatsMXBean { return getOnDemandRaftState().getVotedFor(); } + @Override + public boolean isVoting() { + return getOnDemandRaftState().isVoting(); + } + + @Override + public String getPeerVotingStates() { + return toStringMap(getOnDemandRaftState().getPeerVotingStates()); + } + @Override public boolean isSnapshotCaptureInitiated() { return getOnDemandRaftState().isSnapshotCaptureInitiated(); @@ -261,8 +256,7 @@ public class ShardStats extends AbstractMXBean implements ShardStatsMXBean { return failedReadTransactionsCount.incrementAndGet(); } - public long incrementAbortTransactionsCount () - { + public long incrementAbortTransactionsCount() { return ++abortTransactionsCount; } @@ -271,7 +265,7 @@ public class ShardStats extends AbstractMXBean implements ShardStatsMXBean { } @Override - public long getInMemoryJournalDataSize(){ + public long getInMemoryJournalDataSize() { return getOnDemandRaftState().getInMemoryJournalDataSize(); } @@ -281,10 +275,10 @@ public class ShardStats extends AbstractMXBean implements ShardStatsMXBean { } /** - * resets the counters related to transactions + * Resets the counters related to transactions. */ @Override - public void resetTransactionCounters(){ + public void resetTransactionCounters() { committedTransactionsCount = 0; readOnlyTransactionCount = 0; @@ -303,10 +297,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; } @@ -323,17 +313,11 @@ public class ShardStats extends AbstractMXBean implements ShardStatsMXBean { @Override public String getPeerAddresses() { - StringBuilder builder = new StringBuilder(); - int i = 0; - for(Map.Entry e: getOnDemandRaftState().getPeerAddresses().entrySet()) { - if(i++ > 0) { - builder.append(", "); - } - - builder.append(e.getKey()).append(": ").append(e.getValue()); - } + return toStringMap(getOnDemandRaftState().getPeerAddresses()); + } - return builder.toString(); + private static String toStringMap(Map map) { + return Joiner.on(", ").withKeyValueSeparator(": ").join(map); } @Override @@ -362,4 +346,21 @@ public class ShardStats extends AbstractMXBean implements ShardStatsMXBean { public String getLastLeadershipChangeTime() { return DATE_FORMAT.format(new Date(lastLeadershipChangeTime)); } + + @Override + public int getPendingTxCommitQueueSize() { + return shard.getPendingTxCommitQueueSize(); + } + + @Override + public int getTxCohortCacheSize() { + return shard.getCohortCacheSize(); + } + + @Override + public void captureSnapshot() { + if (shard != null) { + shard.getSelf().tell(new InitiateCaptureSnapshot(), ActorRef.noSender()); + } + } }