2 * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
9 package org.opendaylight.controller.cluster.datastore.jmx.mbeans.shard;
11 import java.text.SimpleDateFormat;
12 import java.util.Date;
13 import java.util.List;
14 import java.util.concurrent.atomic.AtomicLong;
15 import org.opendaylight.controller.md.sal.common.util.jmx.AbstractMXBean;
16 import org.opendaylight.controller.md.sal.common.util.jmx.QueuedNotificationManagerMXBeanImpl;
17 import org.opendaylight.controller.md.sal.common.util.jmx.ThreadExecutorStats;
18 import org.opendaylight.controller.md.sal.common.util.jmx.ThreadExecutorStatsMXBeanImpl;
19 import org.opendaylight.controller.md.sal.dom.store.impl.InMemoryDOMDataStore;
20 import org.opendaylight.yangtools.util.concurrent.ListenerNotificationQueueStats;
21 import org.opendaylight.yangtools.util.concurrent.QueuedNotificationManager;
24 * Maintains statistics for a shard.
26 * @author Basheeruddin syedbahm@cisco.com
28 public class ShardStats extends AbstractMXBean implements ShardStatsMXBean {
29 public static String JMX_CATEGORY_SHARD = "Shards";
31 private long committedTransactionsCount;
33 private long readOnlyTransactionCount;
35 private long writeOnlyTransactionCount;
37 private long readWriteTransactionCount;
39 private String leader;
41 private String raftState;
43 private long lastLogTerm = -1L;
45 private long lastLogIndex = -1L;
47 private long currentTerm = -1L;
49 private long commitIndex = -1L;
51 private long lastApplied = -1L;
53 private long lastCommittedTransactionTime;
55 private long failedTransactionsCount;
57 private final AtomicLong failedReadTransactionsCount = new AtomicLong();
59 private long abortTransactionsCount;
61 private ThreadExecutorStatsMXBeanImpl notificationExecutorStatsBean;
63 private QueuedNotificationManagerMXBeanImpl notificationManagerStatsBean;
65 private long dataSize = 0;
67 private final SimpleDateFormat sdf =
68 new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
70 private boolean followerInitialSyncStatus = false;
72 public ShardStats(final String shardName, final String mxBeanType) {
73 super(shardName, mxBeanType, JMX_CATEGORY_SHARD);
76 public void setNotificationManager(final QueuedNotificationManager<?, ?> manager) {
77 this.notificationManagerStatsBean = new QueuedNotificationManagerMXBeanImpl(manager,
78 "notification-manager", getMBeanType(), getMBeanCategory());
80 this.notificationExecutorStatsBean = ThreadExecutorStatsMXBeanImpl.create(manager.getExecutor());
84 public String getShardName() {
85 return getMBeanName();
89 public long getCommittedTransactionsCount() {
90 return committedTransactionsCount;
94 public String getLeader() {
99 public String getRaftState() {
104 public long getReadOnlyTransactionCount() {
105 return readOnlyTransactionCount;
109 public long getWriteOnlyTransactionCount() {
110 return writeOnlyTransactionCount;
114 public long getReadWriteTransactionCount() {
115 return readWriteTransactionCount;
119 public long getLastLogIndex() {
124 public long getLastLogTerm() {
129 public long getCurrentTerm() {
134 public long getCommitIndex() {
139 public long getLastApplied() {
144 public String getLastCommittedTransactionTime() {
146 return sdf.format(new Date(lastCommittedTransactionTime));
150 public long getFailedTransactionsCount() {
151 return failedTransactionsCount;
155 public long getFailedReadTransactionsCount() {
156 return failedReadTransactionsCount.get();
160 public long getAbortTransactionsCount() {
161 return abortTransactionsCount;
164 public long incrementCommittedTransactionCount() {
165 return ++committedTransactionsCount;
168 public long incrementReadOnlyTransactionCount() {
169 return ++readOnlyTransactionCount;
172 public long incrementWriteOnlyTransactionCount() {
173 return ++writeOnlyTransactionCount;
176 public long incrementReadWriteTransactionCount() {
177 return ++readWriteTransactionCount;
180 public long incrementFailedTransactionsCount() {
181 return ++failedTransactionsCount;
184 public long incrementFailedReadTransactionsCount() {
185 return failedReadTransactionsCount.incrementAndGet();
188 public long incrementAbortTransactionsCount ()
190 return ++abortTransactionsCount;
193 public void setLeader(final String leader) {
194 this.leader = leader;
197 public void setRaftState(final String raftState) {
198 this.raftState = raftState;
201 public void setLastLogTerm(final long lastLogTerm) {
202 this.lastLogTerm = lastLogTerm;
205 public void setLastLogIndex(final long lastLogIndex) {
206 this.lastLogIndex = lastLogIndex;
209 public void setCurrentTerm(final long currentTerm) {
210 this.currentTerm = currentTerm;
213 public void setCommitIndex(final long commitIndex) {
214 this.commitIndex = commitIndex;
217 public void setLastApplied(final long lastApplied) {
218 this.lastApplied = lastApplied;
221 public void setLastCommittedTransactionTime(final long lastCommittedTransactionTime) {
222 this.lastCommittedTransactionTime = lastCommittedTransactionTime;
225 public void setInMemoryJournalDataSize(long dataSize){
226 this.dataSize = dataSize;
230 public long getInMemoryJournalDataSize(){
235 public ThreadExecutorStats getDataStoreExecutorStats() {
236 // FIXME: this particular thing does not work, as it really is DS-specific
241 public ThreadExecutorStats getNotificationMgrExecutorStats() {
242 return notificationExecutorStatsBean.toThreadExecutorStats();
246 public List<ListenerNotificationQueueStats> getCurrentNotificationMgrListenerQueueStats() {
247 return notificationManagerStatsBean.getCurrentListenerQueueStats();
251 public int getMaxNotificationMgrListenerQueueSize() {
252 return notificationManagerStatsBean.getMaxListenerQueueSize();
256 * resets the counters related to transactions
259 public void resetTransactionCounters(){
260 committedTransactionsCount = 0;
262 readOnlyTransactionCount = 0;
264 writeOnlyTransactionCount = 0;
266 readWriteTransactionCount = 0;
268 lastCommittedTransactionTime = 0;
270 failedTransactionsCount = 0;
272 failedReadTransactionsCount.set(0);
274 abortTransactionsCount = 0;
278 public void setDataStore(final InMemoryDOMDataStore store) {
279 setNotificationManager(store.getDataChangeListenerNotificationManager());
282 public void setFollowerInitialSyncStatus(boolean followerInitialSyncStatus) {
283 this.followerInitialSyncStatus = followerInitialSyncStatus;
287 public boolean getFollowerInitialSyncStatus() {
288 return followerInitialSyncStatus;