From 83cff3d85f6ff7177893f260059e1df53195328a Mon Sep 17 00:00:00 2001 From: Moiz Raja Date: Thu, 7 Aug 2014 04:22:17 -0700 Subject: [PATCH 1/1] Expose the Raft State of a Shard and the name of it's Leader via JMX Change-Id: Id8b57706902e93e0021db44533622fde283d82b4 Signed-off-by: Moiz Raja --- .../controller/cluster/raft/RaftActor.java | 19 ++++++++++++++++++- .../controller/cluster/datastore/Shard.java | 6 ++++++ .../jmx/mbeans/shard/ShardStats.java | 16 ++++++++++++++++ .../jmx/mbeans/shard/ShardStatsMBean.java | 3 ++- 4 files changed, 42 insertions(+), 2 deletions(-) diff --git a/opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/RaftActor.java b/opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/RaftActor.java index caa0e507c1..0a979d24ee 100644 --- a/opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/RaftActor.java +++ b/opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/RaftActor.java @@ -148,6 +148,7 @@ public abstract class RaftActor extends UntypedPersistentActor { replicatedLog.lastIndex(), replicatedLog.snapshotIndex, replicatedLog.snapshotTerm, replicatedLog.size()); currentBehavior = switchBehavior(RaftState.Follower); + onStateChanged(); } } @@ -206,7 +207,11 @@ public abstract class RaftActor extends UntypedPersistentActor { RaftState state = currentBehavior.handleMessage(getSender(), message); + RaftActorBehavior oldBehavior = currentBehavior; currentBehavior = switchBehavior(state); + if(oldBehavior != currentBehavior){ + onStateChanged(); + } } } @@ -271,9 +276,21 @@ public abstract class RaftActor extends UntypedPersistentActor { String peerAddress = context.getPeerAddress(leaderId); LOG.debug("getLeader leaderId = " + leaderId + " peerAddress = " + peerAddress); + + if(peerAddress == null){ + return null; + } return context.actorSelection(peerAddress); } + /** + * + * @return the current leader's id + */ + protected String getLeaderId(){ + return currentBehavior.getLeaderId(); + } + protected RaftState getRaftState() { return currentBehavior.state(); } @@ -375,7 +392,7 @@ public abstract class RaftActor extends UntypedPersistentActor { behavior = new Leader(context); } - onStateChanged(); + return behavior; } diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/Shard.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/Shard.java index 94f80f70e9..10dbbc84d8 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/Shard.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/Shard.java @@ -325,6 +325,12 @@ public class Shard extends RaftActor { for(ActorSelection dataChangeListener : dataChangeListeners){ dataChangeListener.tell(new EnableNotification(isLeader()), getSelf()); } + + if(getLeaderId() != null){ + shardMBean.setLeader(getLeaderId()); + } + + shardMBean.setRaftState(getRaftState().name()); } @Override public String persistenceId() { 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 2da6aae85f..4eb6a8cef9 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 @@ -9,6 +9,8 @@ public class ShardStats extends AbstractBaseMBean implements ShardStatsMBean { private Long committedTransactionsCount; private Long journalMessagesCount; final private String shardName; + private String leader; + private String raftState; ShardStats(String shardName){ this.shardName = shardName; @@ -33,6 +35,13 @@ public class ShardStats extends AbstractBaseMBean implements ShardStatsMBean { return journalMessagesCount; } + @Override public String getLeader() { + return leader; + } + + @Override public String getRaftState() { + return raftState; + } public Long incrementCommittedTransactionCount() { return committedTransactionsCount++; @@ -49,6 +58,13 @@ public class ShardStats extends AbstractBaseMBean implements ShardStatsMBean { } + public void setLeader(String leader){ + this.leader = leader; + } + + public void setRaftState(String raftState){ + this.raftState = raftState; + } @Override diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/jmx/mbeans/shard/ShardStatsMBean.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/jmx/mbeans/shard/ShardStatsMBean.java index c107e49e85..9ebcc7fa5a 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/jmx/mbeans/shard/ShardStatsMBean.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/jmx/mbeans/shard/ShardStatsMBean.java @@ -7,5 +7,6 @@ public interface ShardStatsMBean { String getShardName(); Long getCommittedTransactionsCount(); Long getJournalMessagesCount(); - + String getLeader(); + String getRaftState(); } -- 2.36.6