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=577a03c3a35ae018d4f33ecdc7bedb30022c474e;hp=c6c1579ce336dc78e64ecc6b79042c30eee28148;hb=06e889c9c78457590b6a0b62d89a6b9f44242a9f;hpb=6faa900c307b5d97fc7726d31b6dad0e67077db8 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 c6c1579ce3..577a03c3a3 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 @@ -1,178 +1,290 @@ -package org.opendaylight.controller.cluster.datastore.jmx.mbeans.shard; +/* + * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ -import org.opendaylight.controller.cluster.datastore.jmx.mbeans.AbstractBaseMBean; +package org.opendaylight.controller.cluster.datastore.jmx.mbeans.shard; import java.text.SimpleDateFormat; import java.util.Date; +import java.util.List; +import java.util.concurrent.atomic.AtomicLong; +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.ThreadExecutorStats; +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.ListenerNotificationQueueStats; +import org.opendaylight.yangtools.util.concurrent.QueuedNotificationManager; /** - * @author: syedbahm + * Maintains statistics for a shard. + * + * @author Basheeruddin syedbahm@cisco.com */ -public class ShardStats extends AbstractBaseMBean implements ShardStatsMBean { - - private final String shardName; +public class ShardStats extends AbstractMXBean implements ShardStatsMXBean { + public static String JMX_CATEGORY_SHARD = "Shards"; - private Long committedTransactionsCount = 0L; + private long committedTransactionsCount; - private Long readOnlyTransactionCount = 0L; + private long readOnlyTransactionCount; - private Long writeOnlyTransactionCount = 0L; + private long writeOnlyTransactionCount; - private Long readWriteTransactionCount = 0L; + private long readWriteTransactionCount; private String leader; private String raftState; - private Long lastLogTerm = -1L; + private long lastLogTerm = -1L; + + private long lastLogIndex = -1L; + + private long currentTerm = -1L; + + private long commitIndex = -1L; + + private long lastApplied = -1L; - private Long lastLogIndex = -1L; + private long lastCommittedTransactionTime; - private Long currentTerm = -1L; + private long failedTransactionsCount; - private Long commitIndex = -1L; + private final AtomicLong failedReadTransactionsCount = new AtomicLong(); - private Long lastApplied = -1L; + private long abortTransactionsCount; - private Date lastCommittedTransactionTime = new Date(0L); + private ThreadExecutorStatsMXBeanImpl notificationExecutorStatsBean; - private Long failedTransactionsCount = 0L; + private QueuedNotificationManagerMXBeanImpl notificationManagerStatsBean; - private SimpleDateFormat sdf = + private long dataSize = 0; + + private final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); - ShardStats(String shardName) { - this.shardName = shardName; + private boolean followerInitialSyncStatus = false; + + public ShardStats(final String shardName, final String mxBeanType) { + 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()); + } @Override public String getShardName() { - return shardName; + return getMBeanName(); } @Override - public Long getCommittedTransactionsCount() { + public long getCommittedTransactionsCount() { return committedTransactionsCount; } - @Override public String getLeader() { + @Override + public String getLeader() { return leader; } - @Override public String getRaftState() { + @Override + public String getRaftState() { return raftState; } - @Override public Long getReadOnlyTransactionCount() { + @Override + public long getReadOnlyTransactionCount() { return readOnlyTransactionCount; } - @Override public Long getWriteOnlyTransactionCount() { + @Override + public long getWriteOnlyTransactionCount() { return writeOnlyTransactionCount; } - @Override public Long getReadWriteTransactionCount() { + @Override + public long getReadWriteTransactionCount() { return readWriteTransactionCount; } - @Override public Long getLastLogIndex() { + @Override + public long getLastLogIndex() { return lastLogIndex; } - @Override public Long getLastLogTerm() { + @Override + public long getLastLogTerm() { return lastLogTerm; } - @Override public Long getCurrentTerm() { + @Override + public long getCurrentTerm() { return currentTerm; } - @Override public Long getCommitIndex() { + @Override + public long getCommitIndex() { return commitIndex; } - @Override public Long getLastApplied() { + @Override + public long getLastApplied() { return lastApplied; } @Override public String getLastCommittedTransactionTime() { - return sdf.format(lastCommittedTransactionTime); + return sdf.format(new Date(lastCommittedTransactionTime)); } - @Override public Long getFailedTransactionsCount() { + @Override + public long getFailedTransactionsCount() { return failedTransactionsCount; } - public Long incrementCommittedTransactionCount() { - return committedTransactionsCount++; + @Override + public long getFailedReadTransactionsCount() { + return failedReadTransactionsCount.get(); + } + + @Override + public long getAbortTransactionsCount() { + return abortTransactionsCount; } - public Long incrementReadOnlyTransactionCount() { - return readOnlyTransactionCount++; + public long incrementCommittedTransactionCount() { + return ++committedTransactionsCount; } - public Long incrementWriteOnlyTransactionCount() { - return writeOnlyTransactionCount++; + public long incrementReadOnlyTransactionCount() { + return ++readOnlyTransactionCount; } - public Long incrementReadWriteTransactionCount() { - return readWriteTransactionCount++; + public long incrementWriteOnlyTransactionCount() { + return ++writeOnlyTransactionCount; } - public void setLeader(String leader) { + public long incrementReadWriteTransactionCount() { + return ++readWriteTransactionCount; + } + + public long incrementFailedTransactionsCount() { + return ++failedTransactionsCount; + } + + public long incrementFailedReadTransactionsCount() { + return failedReadTransactionsCount.incrementAndGet(); + } + + public long incrementAbortTransactionsCount () + { + return ++abortTransactionsCount; + } + + public void setLeader(final String leader) { this.leader = leader; } - public void setRaftState(String raftState) { + public void setRaftState(final String raftState) { this.raftState = raftState; } - public void setLastLogTerm(Long lastLogTerm) { + public void setLastLogTerm(final long lastLogTerm) { this.lastLogTerm = lastLogTerm; } - public void setLastLogIndex(Long lastLogIndex) { + public void setLastLogIndex(final long lastLogIndex) { this.lastLogIndex = lastLogIndex; } - public void setCurrentTerm(Long currentTerm) { + public void setCurrentTerm(final long currentTerm) { this.currentTerm = currentTerm; } - public void setCommitIndex(Long commitIndex) { + public void setCommitIndex(final long commitIndex) { this.commitIndex = commitIndex; } - public void setLastApplied(Long lastApplied) { + public void setLastApplied(final long lastApplied) { this.lastApplied = lastApplied; } - - public void setLastCommittedTransactionTime( - Date lastCommittedTransactionTime) { + public void setLastCommittedTransactionTime(final long lastCommittedTransactionTime) { this.lastCommittedTransactionTime = lastCommittedTransactionTime; } + public void setInMemoryJournalDataSize(long dataSize){ + this.dataSize = dataSize; + } + @Override - protected String getMBeanName() { - return shardName; + public long getInMemoryJournalDataSize(){ + return dataSize; } @Override - protected String getMBeanType() { - return JMX_TYPE_DISTRIBUTED_DATASTORE; + public ThreadExecutorStats getDataStoreExecutorStats() { + // FIXME: this particular thing does not work, as it really is DS-specific + return null; } @Override - protected String getMBeanCategory() { - return JMX_CATEGORY_SHARD; + public ThreadExecutorStats getNotificationMgrExecutorStats() { + return notificationExecutorStatsBean.toThreadExecutorStats(); } + @Override + public List getCurrentNotificationMgrListenerQueueStats() { + return notificationManagerStatsBean.getCurrentListenerQueueStats(); + } + + @Override + public int getMaxNotificationMgrListenerQueueSize() { + return notificationManagerStatsBean.getMaxListenerQueueSize(); + } + + /** + * resets the counters related to transactions + */ + @Override + public void resetTransactionCounters(){ + committedTransactionsCount = 0; - public void incrementFailedTransactionsCount() { - this.failedTransactionsCount++; + readOnlyTransactionCount = 0; + + writeOnlyTransactionCount = 0; + + readWriteTransactionCount = 0; + + lastCommittedTransactionTime = 0; + + failedTransactionsCount = 0; + + failedReadTransactionsCount.set(0); + + abortTransactionsCount = 0; + + } + + public void setDataStore(final InMemoryDOMDataStore store) { + setNotificationManager(store.getDataChangeListenerNotificationManager()); + } + + public void setFollowerInitialSyncStatus(boolean followerInitialSyncStatus) { + this.followerInitialSyncStatus = followerInitialSyncStatus; + } + + @Override + public boolean getFollowerInitialSyncStatus() { + return followerInitialSyncStatus; } }