DistributedLeadershipManager tracks topic election candidates in addition to
leaders. Includes update to leaders CLI command to list candidates.

part of: Device Mastership store on top of LeadershipService
Reference: ONOS-76

Conflicts:
	core/store/dist/src/main/java/org/onosproject/store/consistent/impl/DistributedLeadershipManager.java

Change-Id: I587bb9e9ad16a9c8392969dde45001181053e5e6
diff --git a/core/api/src/main/java/org/onosproject/cluster/LeadershipEvent.java b/core/api/src/main/java/org/onosproject/cluster/LeadershipEvent.java
index ac0036e..c4f59be 100644
--- a/core/api/src/main/java/org/onosproject/cluster/LeadershipEvent.java
+++ b/core/api/src/main/java/org/onosproject/cluster/LeadershipEvent.java
@@ -49,11 +49,10 @@
         LEADER_BOOTED,
 
         /**
-         * Signifies that the list of candidates for leadership for a resource
-         * has changed. If the change in the backups list is accompanied by a
-         * change in the leader, the event is subsumed by the leadership change.
+         * Signifies that the list of candidates for leadership for a topic has
+         * changed.
          */
-        LEADER_CANDIDATES_CHANGED
+        CANDIDATES_CHANGED
     }
 
     /**
diff --git a/core/api/src/main/java/org/onosproject/cluster/LeadershipService.java b/core/api/src/main/java/org/onosproject/cluster/LeadershipService.java
index 65ec687..15a198c 100644
--- a/core/api/src/main/java/org/onosproject/cluster/LeadershipService.java
+++ b/core/api/src/main/java/org/onosproject/cluster/LeadershipService.java
@@ -17,6 +17,7 @@
 
 import java.util.Map;
 import java.util.Set;
+import java.util.List;
 
 /**
  * Service for leader election.
@@ -67,6 +68,19 @@
     Map<String, Leadership> getLeaderBoard();
 
     /**
+     * Returns the candidates for all known topics.
+     * @return A map of topics to lists of NodeIds.
+     */
+    Map<String, List<NodeId>> getCandidates();
+
+    /**
+     * Returns the candidates for a given topic.
+     * @param path topic
+     * @return A lists of NodeIds, which may be empty.
+     */
+    List<NodeId> getCandidates(String path);
+
+    /**
      * Registers a event listener to be notified of leadership events.
      * @param listener listener that will asynchronously notified of leadership events.
      */
diff --git a/core/api/src/test/java/org/onosproject/cluster/LeadershipServiceAdapter.java b/core/api/src/test/java/org/onosproject/cluster/LeadershipServiceAdapter.java
index 818edb9..02742d4 100644
--- a/core/api/src/test/java/org/onosproject/cluster/LeadershipServiceAdapter.java
+++ b/core/api/src/test/java/org/onosproject/cluster/LeadershipServiceAdapter.java
@@ -15,6 +15,7 @@
  */
 package org.onosproject.cluster;
 
+import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
@@ -62,4 +63,14 @@
     public void removeListener(LeadershipEventListener listener) {
 
     }
+
+    @Override
+    public Map<String, List<NodeId>> getCandidates() {
+        return null;
+    }
+
+    @Override
+    public List<NodeId> getCandidates(String path) {
+        return null;
+    }
 }