ConsistentDeviceMastership on top of LeadershipService, and leaders CLI command
modified to filter on topic. This does not support changing candidate ordering
(yet).
Refernce: ONOS-76
Change-Id: I028a6df0acbe3c4e4ff7c228f687f640e48e13be
diff --git a/core/store/dist/src/main/java/org/onosproject/store/consistent/impl/DistributedLeadershipManager.java b/core/store/dist/src/main/java/org/onosproject/store/consistent/impl/DistributedLeadershipManager.java
index 303129d..ed610ad 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/consistent/impl/DistributedLeadershipManager.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/consistent/impl/DistributedLeadershipManager.java
@@ -362,8 +362,8 @@
Leadership newInfo = new Leadership(path, candidates, epoch, electedTime);
final MutableBoolean updated = new MutableBoolean(false);
candidateBoard.compute(path, (k, current) -> {
- if (current != null && current.epoch() == newInfo.epoch()) {
- log.info("updating candidateboard with {}", newInfo);
+ if (current != null && current.epoch() <= newInfo.epoch()) {
+ log.info("updating candidateboard with removal of {}", newInfo);
updated.setTrue();
if (candidates.isEmpty()) {
return null;
@@ -452,7 +452,7 @@
});
} else if (eventType.equals(LeadershipEvent.Type.LEADER_BOOTED)) {
leaderBoard.compute(topic, (k, currentLeadership) -> {
- if (currentLeadership == null || currentLeadership.epoch() < leadershipUpdate.epoch()) {
+ if (currentLeadership == null || currentLeadership.epoch() == leadershipUpdate.epoch()) {
updateAccepted.setTrue();
return null;
}
@@ -462,6 +462,9 @@
candidateBoard.compute(topic, (k, currentInfo) -> {
if (currentInfo == null || currentInfo.epoch() <= leadershipUpdate.epoch()) {
updateAccepted.setTrue();
+ if (leadershipUpdate.candidates().isEmpty()) {
+ return null;
+ }
return leadershipUpdate;
}
return currentInfo;