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;
* @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<String, OnDemandRaftState> 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;
private boolean followerInitialSyncStatus = false;
- private Shard shard;
+ private final Shard shard;
private String statRetrievalError;
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;
}
@Override
public String getPeerVotingStates() {
- return toStringMap(getOnDemandRaftState().getPeerVotingStates());
+ return MAP_JOINER.join(getOnDemandRaftState().getPeerVotingStates());
}
@Override
@Override
public String getLastCommittedTransactionTime() {
- return DATE_FORMAT.format(new Date(lastCommittedTransactionTime));
+ synchronized (DATE_FORMAT) {
+ return DATE_FORMAT.format(new Date(lastCommittedTransactionTime));
+ }
}
@Override
@Override
public String getPeerAddresses() {
- return toStringMap(getOnDemandRaftState().getPeerAddresses());
- }
-
- private static String toStringMap(Map<?, ?> map) {
- return Joiner.on(", ").withKeyValueSeparator(": ").join(map);
+ return MAP_JOINER.join(getOnDemandRaftState().getPeerAddresses());
}
@Override
@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