X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-distributed-datastore%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fcluster%2Fdatastore%2Fjmx%2Fmbeans%2Fshard%2FShardStats.java;h=765fe211d2ef59f6cdb02d64ad4a7a1af17b2a3d;hp=0f491570a31eba2f1f0c059f46bc994f5c3d0cbc;hb=a3cecfd01d0ef8922530924e3ee9684eb03ee5d6;hpb=204f45f8b3233dbea87e2c8065914f0d2a0ded07 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 0f491570a3..765fe211d2 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,15 +11,17 @@ 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.Joiner.MapJoiner; import com.google.common.base.Stopwatch; import com.google.common.cache.Cache; import com.google.common.cache.CacheBuilder; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; -import java.util.Map; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicLong; +import javax.annotation.Nullable; 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; @@ -34,13 +36,15 @@ import scala.concurrent.Await; * @author Basheeruddin syedbahm@cisco.com */ public class ShardStats extends AbstractMXBean implements ShardStatsMXBean { - public static String JMX_CATEGORY_SHARD = "Shards"; + public static final String JMX_CATEGORY_SHARD = "Shards"; 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 static final MapJoiner MAP_JOINER = Joiner.on(", ").withKeyValueSeparator(": "); + private long committedTransactionsCount; private long readOnlyTransactionCount; @@ -59,7 +63,7 @@ public class ShardStats extends AbstractMXBean implements ShardStatsMXBean { private boolean followerInitialSyncStatus = false; - private Shard shard; + private final Shard shard; private String statRetrievalError; @@ -69,22 +73,20 @@ public class ShardStats extends AbstractMXBean implements ShardStatsMXBean { private long lastLeadershipChangeTime; - public ShardStats(final String shardName, final String mxBeanType) { + public ShardStats(final String shardName, final String mxBeanType, @Nullable final Shard shard) { super(shardName, mxBeanType, JMX_CATEGORY_SHARD); - } - - 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(shard != null) { + if (shard != null) { Timeout timeout = new Timeout(10, TimeUnit.SECONDS); try { Stopwatch timer = Stopwatch.createStarted(); @@ -93,7 +95,7 @@ public class ShardStats extends AbstractMXBean implements ShardStatsMXBean { 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(); } @@ -195,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 MAP_JOINER.join(getOnDemandRaftState().getPeerVotingStates()); + } + @Override public boolean isSnapshotCaptureInitiated() { return getOnDemandRaftState().isSnapshotCaptureInitiated(); @@ -202,7 +214,9 @@ public class ShardStats extends AbstractMXBean implements ShardStatsMXBean { @Override public String getLastCommittedTransactionTime() { - return DATE_FORMAT.format(new Date(lastCommittedTransactionTime)); + synchronized (DATE_FORMAT) { + return DATE_FORMAT.format(new Date(lastCommittedTransactionTime)); + } } @Override @@ -244,8 +258,7 @@ public class ShardStats extends AbstractMXBean implements ShardStatsMXBean { return failedReadTransactionsCount.incrementAndGet(); } - public long incrementAbortTransactionsCount () - { + public long incrementAbortTransactionsCount() { return ++abortTransactionsCount; } @@ -254,7 +267,7 @@ public class ShardStats extends AbstractMXBean implements ShardStatsMXBean { } @Override - public long getInMemoryJournalDataSize(){ + public long getInMemoryJournalDataSize() { return getOnDemandRaftState().getInMemoryJournalDataSize(); } @@ -264,10 +277,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; @@ -302,17 +315,7 @@ 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 builder.toString(); + return MAP_JOINER.join(getOnDemandRaftState().getPeerAddresses()); } @Override @@ -339,23 +342,25 @@ public class ShardStats extends AbstractMXBean implements ShardStatsMXBean { @Override public String getLastLeadershipChangeTime() { - return DATE_FORMAT.format(new Date(lastLeadershipChangeTime)); + synchronized (DATE_FORMAT) { + return DATE_FORMAT.format(new Date(lastLeadershipChangeTime)); + } } @Override public int getPendingTxCommitQueueSize() { - return shard.getPendingTxCommitQueueSize(); + return shard != null ? shard.getPendingTxCommitQueueSize() : -1; } + @Override public int getTxCohortCacheSize() { - return shard.getCohortCacheSize(); + return shard != null ? shard.getCohortCacheSize() : -1; } @Override public void captureSnapshot() { - if(shard != null) { + if (shard != null) { shard.getSelf().tell(new InitiateCaptureSnapshot(), ActorRef.noSender()); } } - }