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 final AtomicLong committedTransactionsCount = new AtomicLong();
33 private final AtomicLong readOnlyTransactionCount = new AtomicLong();
35 private final AtomicLong writeOnlyTransactionCount = new AtomicLong();
37 private final AtomicLong readWriteTransactionCount = new AtomicLong();
39 private String leader;
41 private String raftState;
43 private volatile long lastLogTerm = -1L;
45 private volatile long lastLogIndex = -1L;
47 private volatile long currentTerm = -1L;
49 private volatile long commitIndex = -1L;
51 private volatile long lastApplied = -1L;
53 private volatile long lastCommittedTransactionTime;
55 private final AtomicLong failedTransactionsCount = new AtomicLong();
57 private final AtomicLong failedReadTransactionsCount = new AtomicLong();
59 private final AtomicLong abortTransactionsCount = new AtomicLong();
61 private ThreadExecutorStatsMXBeanImpl notificationExecutorStatsBean;
63 private QueuedNotificationManagerMXBeanImpl notificationManagerStatsBean;
65 private final SimpleDateFormat sdf =
66 new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
68 public ShardStats(final String shardName, final String mxBeanType) {
69 super(shardName, mxBeanType, JMX_CATEGORY_SHARD);
72 public void setNotificationManager(final QueuedNotificationManager<?, ?> manager) {
73 this.notificationManagerStatsBean = new QueuedNotificationManagerMXBeanImpl(manager,
74 "notification-manager", getMBeanType(), getMBeanCategory());
76 this.notificationExecutorStatsBean = ThreadExecutorStatsMXBeanImpl.create(manager.getExecutor());
80 public String getShardName() {
81 return getMBeanName();
85 public long getCommittedTransactionsCount() {
86 return committedTransactionsCount.get();
90 public String getLeader() {
95 public String getRaftState() {
100 public long getReadOnlyTransactionCount() {
101 return readOnlyTransactionCount.get();
105 public long getWriteOnlyTransactionCount() {
106 return writeOnlyTransactionCount.get();
110 public long getReadWriteTransactionCount() {
111 return readWriteTransactionCount.get();
115 public long getLastLogIndex() {
120 public long getLastLogTerm() {
125 public long getCurrentTerm() {
130 public long getCommitIndex() {
135 public long getLastApplied() {
140 public String getLastCommittedTransactionTime() {
142 return sdf.format(new Date(lastCommittedTransactionTime));
146 public long getFailedTransactionsCount() {
147 return failedTransactionsCount.get();
151 public long getFailedReadTransactionsCount() {
152 return failedReadTransactionsCount.get();
156 public long getAbortTransactionsCount() {
157 return abortTransactionsCount.get();
160 public long incrementCommittedTransactionCount() {
161 return committedTransactionsCount.incrementAndGet();
164 public long incrementReadOnlyTransactionCount() {
165 return readOnlyTransactionCount.incrementAndGet();
168 public long incrementWriteOnlyTransactionCount() {
169 return writeOnlyTransactionCount.incrementAndGet();
172 public long incrementReadWriteTransactionCount() {
173 return readWriteTransactionCount.incrementAndGet();
176 public long incrementFailedTransactionsCount() {
177 return failedTransactionsCount.incrementAndGet();
180 public long incrementFailedReadTransactionsCount() {
181 return failedReadTransactionsCount.incrementAndGet();
184 public long incrementAbortTransactionsCount ()
186 return abortTransactionsCount.incrementAndGet();
189 public void setLeader(final String leader) {
190 this.leader = leader;
193 public void setRaftState(final String raftState) {
194 this.raftState = raftState;
197 public void setLastLogTerm(final long lastLogTerm) {
198 this.lastLogTerm = lastLogTerm;
201 public void setLastLogIndex(final long lastLogIndex) {
202 this.lastLogIndex = lastLogIndex;
205 public void setCurrentTerm(final long currentTerm) {
206 this.currentTerm = currentTerm;
209 public void setCommitIndex(final long commitIndex) {
210 this.commitIndex = commitIndex;
213 public void setLastApplied(final long lastApplied) {
214 this.lastApplied = lastApplied;
217 public void setLastCommittedTransactionTime(final long lastCommittedTransactionTime) {
218 this.lastCommittedTransactionTime = lastCommittedTransactionTime;
222 public ThreadExecutorStats getDataStoreExecutorStats() {
223 // FIXME: this particular thing does not work, as it really is DS-specific
228 public ThreadExecutorStats getNotificationMgrExecutorStats() {
229 return notificationExecutorStatsBean.toThreadExecutorStats();
233 public List<ListenerNotificationQueueStats> getCurrentNotificationMgrListenerQueueStats() {
234 return notificationManagerStatsBean.getCurrentListenerQueueStats();
238 public int getMaxNotificationMgrListenerQueueSize() {
239 return notificationManagerStatsBean.getMaxListenerQueueSize();
243 * resets the counters related to transactions
246 public void resetTransactionCounters(){
247 committedTransactionsCount.set(0);
249 readOnlyTransactionCount.set(0);
251 writeOnlyTransactionCount.set(0);
253 readWriteTransactionCount.set(0);
255 lastCommittedTransactionTime = 0;
257 failedTransactionsCount.set(0);
259 failedReadTransactionsCount.set(0);
261 abortTransactionsCount.set(0);
265 public void setDataStore(final InMemoryDOMDataStore store) {
266 setNotificationManager(store.getDataChangeListenerNotificationManager());