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);
80 public void setNotificationManager(QueuedNotificationManager<?, ?> manager) {
81 this.notificationManagerStatsBean = new QueuedNotificationManagerMXBeanImpl(manager,
82 "notification-manager", getMBeanType(), getMBeanCategory());
84 this.notificationExecutorStatsBean = ThreadExecutorStatsMXBeanImpl.create(manager.getExecutor());
88 public String getShardName() {
89 return getMBeanName();
93 public long getCommittedTransactionsCount() {
94 return committedTransactionsCount.get();
98 public String getLeader() {
103 public String getRaftState() {
108 public long getReadOnlyTransactionCount() {
109 return readOnlyTransactionCount.get();
113 public long getWriteOnlyTransactionCount() {
114 return writeOnlyTransactionCount.get();
118 public long getReadWriteTransactionCount() {
119 return readWriteTransactionCount.get();
123 public long getLastLogIndex() {
128 public long getLastLogTerm() {
133 public long getCurrentTerm() {
138 public long getCommitIndex() {
143 public long getLastApplied() {
148 public String getLastCommittedTransactionTime() {
150 return sdf.format(new Date(lastCommittedTransactionTime));
154 public long getFailedTransactionsCount() {
155 return failedTransactionsCount.get();
159 public long getFailedReadTransactionsCount() {
160 return failedReadTransactionsCount.get();
164 public long getAbortTransactionsCount() {
165 return abortTransactionsCount.get();
168 public long incrementCommittedTransactionCount() {
169 return committedTransactionsCount.incrementAndGet();
172 public long incrementReadOnlyTransactionCount() {
173 return readOnlyTransactionCount.incrementAndGet();
176 public long incrementWriteOnlyTransactionCount() {
177 return writeOnlyTransactionCount.incrementAndGet();
180 public long incrementReadWriteTransactionCount() {
181 return readWriteTransactionCount.incrementAndGet();
184 public long incrementFailedTransactionsCount() {
185 return failedTransactionsCount.incrementAndGet();
188 public long incrementFailedReadTransactionsCount() {
189 return failedReadTransactionsCount.incrementAndGet();
192 public long incrementAbortTransactionsCount ()
194 return abortTransactionsCount.incrementAndGet();
197 public void setLeader(String leader) {
198 this.leader = leader;
201 public void setRaftState(String raftState) {
202 this.raftState = raftState;
205 public void setLastLogTerm(long lastLogTerm) {
206 this.lastLogTerm = lastLogTerm;
209 public void setLastLogIndex(long lastLogIndex) {
210 this.lastLogIndex = lastLogIndex;
213 public void setCurrentTerm(long currentTerm) {
214 this.currentTerm = currentTerm;
217 public void setCommitIndex(long commitIndex) {
218 this.commitIndex = commitIndex;
221 public void setLastApplied(long lastApplied) {
222 this.lastApplied = lastApplied;
225 public void setLastCommittedTransactionTime(long lastCommittedTransactionTime) {
226 this.lastCommittedTransactionTime = lastCommittedTransactionTime;
230 public ThreadExecutorStats getDataStoreExecutorStats() {
231 return dataStoreExecutorStatsBean == null ? null :
232 dataStoreExecutorStatsBean.toThreadExecutorStats();
236 public ThreadExecutorStats getNotificationMgrExecutorStats() {
237 return notificationExecutorStatsBean.toThreadExecutorStats();
241 public List<ListenerNotificationQueueStats> getCurrentNotificationMgrListenerQueueStats() {
242 return notificationManagerStatsBean.getCurrentListenerQueueStats();
246 public int getMaxNotificationMgrListenerQueueSize() {
247 return notificationManagerStatsBean.getMaxListenerQueueSize();
251 * resets the counters related to transactions
254 public void resetTransactionCounters(){
255 committedTransactionsCount.set(0);
257 readOnlyTransactionCount.set(0);
259 writeOnlyTransactionCount.set(0);
261 readWriteTransactionCount.set(0);
263 lastCommittedTransactionTime = 0;
265 failedTransactionsCount.set(0);
267 failedReadTransactionsCount.set(0);
269 abortTransactionsCount.set(0);