AsyncLeaderElector APIs in support for mastership balancing

Change-Id: Ia235c6a18c54490dc49ca13e2caebf70b750dbc7
diff --git a/core/api/src/main/java/org/onosproject/store/primitives/DefaultLeaderElector.java b/core/api/src/main/java/org/onosproject/store/primitives/DefaultLeaderElector.java
index e7a7f82..1f1e1f6 100644
--- a/core/api/src/main/java/org/onosproject/store/primitives/DefaultLeaderElector.java
+++ b/core/api/src/main/java/org/onosproject/store/primitives/DefaultLeaderElector.java
@@ -60,6 +60,16 @@
     }
 
     @Override
+    public boolean promote(String topic, NodeId nodeId) {
+        return complete(asyncElector.promote(topic, nodeId));
+    }
+
+    @Override
+    public void evict(NodeId nodeId) {
+        complete(asyncElector.evict(nodeId));
+    }
+
+    @Override
     public Leadership getLeadership(String topic) {
         return complete(asyncElector.getLeadership(topic));
     }
diff --git a/core/api/src/main/java/org/onosproject/store/service/AsyncLeaderElector.java b/core/api/src/main/java/org/onosproject/store/service/AsyncLeaderElector.java
index 3aed8d2..2cac6fe 100644
--- a/core/api/src/main/java/org/onosproject/store/service/AsyncLeaderElector.java
+++ b/core/api/src/main/java/org/onosproject/store/service/AsyncLeaderElector.java
@@ -76,6 +76,28 @@
     CompletableFuture<Boolean> anoint(String topic, NodeId nodeId);
 
     /**
+     * Attempts to evict a node from all leadership elections it is registered for.
+     * <p>
+     * If the node is the current leader for a topic, this call will promote the next top candidate
+     * (if one exists) to leadership.
+     *
+     * @param nodeId node instance identifier
+     * @return CompletableFuture that is completed when the operation is done.
+     */
+    CompletableFuture<Void> evict(NodeId nodeId);
+
+    /**
+     * Attempts to promote a node to top of candidate list without displacing the current leader.
+     *
+     * @param topic leadership topic
+     * @param nodeId instance identifier of the new top candidate
+     * @return CompletableFuture that is completed with a boolean when the operation is done. Boolean is true if
+     * node is now the top candidate. This operation can fail (i.e. return false) if the node
+     * is not registered to run for election for the topic.
+     */
+    CompletableFuture<Boolean> promote(String topic, NodeId nodeId);
+
+    /**
      * Returns the {@link Leadership} for the specified topic.
      * @param topic leadership topic
      * @return CompletableFuture that is completed with the current Leadership state of the topic
diff --git a/core/api/src/main/java/org/onosproject/store/service/LeaderElector.java b/core/api/src/main/java/org/onosproject/store/service/LeaderElector.java
index b37d1c4..f4257be 100644
--- a/core/api/src/main/java/org/onosproject/store/service/LeaderElector.java
+++ b/core/api/src/main/java/org/onosproject/store/service/LeaderElector.java
@@ -58,6 +58,25 @@
     boolean anoint(String topic, NodeId nodeId);
 
     /**
+     * Attempts to promote a node to top of candidate list.
+     *
+     * @param topic leadership topic
+     * @param nodeId instance identifier of the new top candidate
+     * @return {@code true} if node is now the top candidate. This operation can fail (i.e. return
+     * {@code false}) if the node is not registered to run for election for the topic.
+     */
+    boolean promote(String topic, NodeId nodeId);
+
+    /**
+     * Attempts to evict a node from all leadership elections it is registered for.
+     * <p>
+     * If the node the current leader for a topic, this call will force the next candidate (if one exists)
+     * to be promoted to leadership.
+     * @param nodeId node instance identifier
+     */
+    void evict(NodeId nodeId);
+
+    /**
      * Returns the {@link Leadership} for the specified topic.
      * @param topic leadership topic
      * @return current Leadership state of the topic