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.util.List;
12 import java.util.concurrent.ExecutorService;
13 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.yangtools.util.concurrent.ListenerNotificationQueueStats;
20 import org.opendaylight.yangtools.util.concurrent.QueuedNotificationManager;
22 import java.text.SimpleDateFormat;
23 import java.util.Date;
26 * Maintains statistics for a shard.
28 * @author Basheeruddin syedbahm@cisco.com
30 public class ShardStats extends AbstractMXBean implements ShardStatsMXBean {
31 public static String JMX_CATEGORY_SHARD = "Shards";
33 private final AtomicLong committedTransactionsCount = new AtomicLong();
35 private final AtomicLong readOnlyTransactionCount = new AtomicLong();
37 private final AtomicLong writeOnlyTransactionCount = new AtomicLong();
39 private final AtomicLong readWriteTransactionCount = new AtomicLong();
41 private String leader;
43 private String raftState;
45 private volatile long lastLogTerm = -1L;
47 private volatile long lastLogIndex = -1L;
49 private volatile long currentTerm = -1L;
51 private volatile long commitIndex = -1L;
53 private volatile long lastApplied = -1L;
55 private volatile long lastCommittedTransactionTime;
57 private final AtomicLong failedTransactionsCount = new AtomicLong();
59 private final AtomicLong failedReadTransactionsCount = new AtomicLong();
61 private final AtomicLong abortTransactionsCount = new AtomicLong();
63 private ThreadExecutorStatsMXBeanImpl notificationExecutorStatsBean;
65 private ThreadExecutorStatsMXBeanImpl dataStoreExecutorStatsBean;
67 private QueuedNotificationManagerMXBeanImpl notificationManagerStatsBean;
69 private final SimpleDateFormat sdf =
70 new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
72 public ShardStats(String shardName, String mxBeanType) {
73 super(shardName, mxBeanType, JMX_CATEGORY_SHARD);
76 public void setDataStoreExecutor(ExecutorService dsExecutor) {
77 this.dataStoreExecutorStatsBean = ThreadExecutorStatsMXBeanImpl.create(dsExecutor,
78 "notification-executor", getMBeanType(), getMBeanCategory());
81 public void setNotificationManager(QueuedNotificationManager<?, ?> manager) {
82 this.notificationManagerStatsBean = new QueuedNotificationManagerMXBeanImpl(manager,
83 "notification-manager", getMBeanType(), getMBeanCategory());
85 this.notificationExecutorStatsBean = ThreadExecutorStatsMXBeanImpl.create(manager.getExecutor(),
86 "data-store-executor", getMBeanType(), getMBeanCategory());
90 public String getShardName() {
91 return getMBeanName();
95 public long getCommittedTransactionsCount() {
96 return committedTransactionsCount.get();
100 public String getLeader() {
105 public String getRaftState() {
110 public long getReadOnlyTransactionCount() {
111 return readOnlyTransactionCount.get();
115 public long getWriteOnlyTransactionCount() {
116 return writeOnlyTransactionCount.get();
120 public long getReadWriteTransactionCount() {
121 return readWriteTransactionCount.get();
125 public long getLastLogIndex() {
130 public long getLastLogTerm() {
135 public long getCurrentTerm() {
140 public long getCommitIndex() {
145 public long getLastApplied() {
150 public String getLastCommittedTransactionTime() {
152 return sdf.format(new Date(lastCommittedTransactionTime));
156 public long getFailedTransactionsCount() {
157 return failedTransactionsCount.get();
161 public long getFailedReadTransactionsCount() {
162 return failedReadTransactionsCount.get();
166 public long getAbortTransactionsCount() {
167 return abortTransactionsCount.get();
170 public long incrementCommittedTransactionCount() {
171 return committedTransactionsCount.incrementAndGet();
174 public long incrementReadOnlyTransactionCount() {
175 return readOnlyTransactionCount.incrementAndGet();
178 public long incrementWriteOnlyTransactionCount() {
179 return writeOnlyTransactionCount.incrementAndGet();
182 public long incrementReadWriteTransactionCount() {
183 return readWriteTransactionCount.incrementAndGet();
186 public long incrementFailedTransactionsCount() {
187 return failedTransactionsCount.incrementAndGet();
190 public long incrementFailedReadTransactionsCount() {
191 return failedReadTransactionsCount.incrementAndGet();
194 public long incrementAbortTransactionsCount ()
196 return abortTransactionsCount.incrementAndGet();
199 public void setLeader(String leader) {
200 this.leader = leader;
203 public void setRaftState(String raftState) {
204 this.raftState = raftState;
207 public void setLastLogTerm(long lastLogTerm) {
208 this.lastLogTerm = lastLogTerm;
211 public void setLastLogIndex(long lastLogIndex) {
212 this.lastLogIndex = lastLogIndex;
215 public void setCurrentTerm(long currentTerm) {
216 this.currentTerm = currentTerm;
219 public void setCommitIndex(long commitIndex) {
220 this.commitIndex = commitIndex;
223 public void setLastApplied(long lastApplied) {
224 this.lastApplied = lastApplied;
227 public void setLastCommittedTransactionTime(long lastCommittedTransactionTime) {
228 this.lastCommittedTransactionTime = lastCommittedTransactionTime;
232 public ThreadExecutorStats getDataStoreExecutorStats() {
233 return dataStoreExecutorStatsBean.toThreadExecutorStats();
237 public ThreadExecutorStats getNotificationMgrExecutorStats() {
238 return notificationExecutorStatsBean.toThreadExecutorStats();
242 public List<ListenerNotificationQueueStats> getCurrentNotificationMgrListenerQueueStats() {
243 return notificationManagerStatsBean.getCurrentListenerQueueStats();
247 public int getMaxNotificationMgrListenerQueueSize() {
248 return notificationManagerStatsBean.getMaxListenerQueueSize();
252 * resets the counters related to transactions
255 public void resetTransactionCounters(){
256 committedTransactionsCount.set(0);
258 readOnlyTransactionCount.set(0);
260 writeOnlyTransactionCount.set(0);
262 readWriteTransactionCount.set(0);
264 lastCommittedTransactionTime = 0;
266 failedTransactionsCount.set(0);
268 failedReadTransactionsCount.set(0);
270 abortTransactionsCount.set(0);