*/
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
*/
public class ShardMBeanFactory {
- private static final Logger LOG = LoggerFactory.getLogger(ShardMBeanFactory.class);
-
- private static final Cache<String,ShardStats> 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<ShardStats>() {
- @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;
}
}
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;
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;
/**
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<String, OnDemandRaftState> onDemandRaftStateCache =
private long abortTransactionsCount;
- private ThreadExecutorStatsMXBeanImpl notificationExecutorStatsBean;
-
- private QueuedNotificationManagerMXBeanImpl notificationManagerStatsBean;
-
private boolean followerInitialSyncStatus = false;
- private ActorRef shardActor;
+ private Shard shard;
private String statRetrievalError;
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() {
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();
}
- public void setDataStore(final InMemoryDOMDataStore store) {
- setNotificationManager(store.getDataChangeListenerNotificationManager());
- }
-
public void setFollowerInitialSyncStatus(boolean followerInitialSyncStatus) {
this.followerInitialSyncStatus = followerInitialSyncStatus;
}
public String getLastLeadershipChangeTime() {
return DATE_FORMAT.format(new Date(lastLeadershipChangeTime));
}
+
+ @Override
+ public int getPendingTxCommitQueueSize() {
+ return shard.getPendingTxCommitQueueSize();
+ }
}