tablet-leader command to check current Raft leader
Change-Id: Id360db21988a50c3e2895c5194d59b0ba4cb49e4
diff --git a/core/store/dist/src/main/java/org/onlab/onos/store/service/impl/DatabaseManager.java b/core/store/dist/src/main/java/org/onlab/onos/store/service/impl/DatabaseManager.java
index 31f4bf0..192e084 100644
--- a/core/store/dist/src/main/java/org/onlab/onos/store/service/impl/DatabaseManager.java
+++ b/core/store/dist/src/main/java/org/onlab/onos/store/service/impl/DatabaseManager.java
@@ -10,6 +10,7 @@
import java.util.Collections;
import java.util.HashSet;
import java.util.Map;
+import java.util.Optional;
import java.util.Set;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutionException;
@@ -38,7 +39,6 @@
import org.onlab.onos.cluster.ClusterService;
import org.onlab.onos.cluster.ControllerNode;
import org.onlab.onos.cluster.DefaultControllerNode;
-import org.onlab.onos.cluster.NodeId;
import org.onlab.onos.store.cluster.messaging.ClusterCommunicationService;
import org.onlab.onos.store.cluster.messaging.ClusterMessage;
import org.onlab.onos.store.cluster.messaging.MessageSubject;
@@ -433,6 +433,18 @@
}
}
+ @Override
+ public Optional<ControllerNode> leader() {
+ if (copycat != null) {
+ if (copycat.isLeader()) {
+ return Optional.of(clusterService.getLocalNode());
+ }
+ Member leader = copycat.cluster().remoteMember(copycat.leader());
+ return Optional.ofNullable(getNodeIdFromMember(leader));
+ }
+ return Optional.ofNullable(getNodeIdFromMember(client.getCurrentLeader()));
+ }
+
private final class LeaderAdvertiser implements Runnable {
@Override
@@ -549,28 +561,28 @@
}
Set<ControllerNode> members = new HashSet<>();
for (Member member : copycat.cluster().members()) {
- if (member instanceof TcpMember) {
- final TcpMember tcpMember = (TcpMember) member;
- // TODO assuming tcpMember#host to be IP address,
- // but if not lookup DNS, etc. first
- IpAddress ip = IpAddress.valueOf(tcpMember.host());
- int tcpPort = tcpMember.port();
- NodeId id = getNodeIdFromIp(ip, tcpPort);
- if (id == null) {
- log.info("No NodeId found for {}:{}", ip, tcpPort);
- continue;
- }
- members.add(new DefaultControllerNode(id, ip, tcpPort));
+ ControllerNode node = getNodeIdFromMember(member);
+ if (node == null) {
+ log.info("No Node found for {}", member);
+ continue;
}
+ members.add(node);
}
return members;
}
- private NodeId getNodeIdFromIp(IpAddress ip, int tcpPort) {
- for (ControllerNode node : clusterService.getNodes()) {
- if (node.ip().equals(ip) &&
- node.tcpPort() == tcpPort) {
- return node.id();
+ private ControllerNode getNodeIdFromMember(Member member) {
+ if (member instanceof TcpMember) {
+ final TcpMember tcpMember = (TcpMember) member;
+ // TODO assuming tcpMember#host to be IP address,
+ // but if not lookup DNS, etc. first
+ IpAddress ip = IpAddress.valueOf(tcpMember.host());
+ int tcpPort = tcpMember.port();
+ for (ControllerNode node : clusterService.getNodes()) {
+ if (node.ip().equals(ip) &&
+ node.tcpPort() == tcpPort) {
+ return node;
+ }
}
}
return null;