LeadershipService and MastershipService/Store APIs return CompletableFutures so that callers can (optionally) chain together dependent operations

Change-Id: Ia00fcb7d98fbfce897527f67ea9690abf6fe846a
diff --git a/core/store/dist/src/main/java/org/onosproject/store/mastership/impl/ConsistentDeviceMastershipStore.java b/core/store/dist/src/main/java/org/onosproject/store/mastership/impl/ConsistentDeviceMastershipStore.java
index 9aa376a..5225549 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/mastership/impl/ConsistentDeviceMastershipStore.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/mastership/impl/ConsistentDeviceMastershipStore.java
@@ -163,19 +163,22 @@
     }
 
     @Override
-    public MastershipRole requestRole(DeviceId deviceId) {
+    public CompletableFuture<MastershipRole> requestRole(DeviceId deviceId) {
         checkArgument(deviceId != null, DEVICE_ID_NULL);
 
         String leadershipTopic = createDeviceMastershipTopic(deviceId);
         if (connectedDevices.add(deviceId)) {
-            leadershipService.runForLeadership(leadershipTopic);
-            return MastershipRole.STANDBY;
+            return leadershipService.runForLeadership(leadershipTopic)
+                                    .thenApply(leadership -> {
+                                        return Objects.equal(localNodeId, leadership.leader())
+                                                ? MastershipRole.MASTER : MastershipRole.STANDBY;
+                                    });
         } else {
             Leadership leadership = leadershipService.getLeadership(leadershipTopic);
             if (leadership != null && leadership.leader().equals(localNodeId)) {
-                return MastershipRole.MASTER;
+                return CompletableFuture.completedFuture(MastershipRole.MASTER);
             } else {
-                return MastershipRole.STANDBY;
+                return CompletableFuture.completedFuture(MastershipRole.STANDBY);
             }
         }
     }
diff --git a/core/store/dist/src/main/java/org/onosproject/store/mastership/impl/DistributedMastershipStore.java b/core/store/dist/src/main/java/org/onosproject/store/mastership/impl/DistributedMastershipStore.java
index d6a857c..b2c5ade 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/mastership/impl/DistributedMastershipStore.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/mastership/impl/DistributedMastershipStore.java
@@ -205,7 +205,7 @@
     }
 
     @Override
-    public MastershipRole requestRole(DeviceId deviceId) {
+    public CompletableFuture<MastershipRole> requestRole(DeviceId deviceId) {
 
         // if no master => become master
         // if there already exists a master:
@@ -225,7 +225,7 @@
 
                 updateTerm(deviceId);
                 roleMap.put(deviceId, rv);
-                return MASTER;
+                return CompletableFuture.completedFuture(MASTER);
             }
             final MastershipRole currentRole = rv.getRole(local);
             switch (currentRole) {
@@ -239,7 +239,7 @@
                         roleMap.put(deviceId, rv);
                         // trigger BACKUPS_CHANGED?
                     }
-                    return currentRole;
+                    return CompletableFuture.completedFuture(currentRole);
                 case STANDBY:
                     // RoleInfo integrity check
                     modified = rv.reassign(local, NONE, STANDBY);
@@ -250,16 +250,16 @@
                         roleMap.put(deviceId, rv);
                         // trigger BACKUPS_CHANGED?
                     }
-                    return currentRole;
+                    return CompletableFuture.completedFuture(currentRole);
                 case NONE:
                     rv.reassign(local, NONE, STANDBY);
                     roleMap.put(deviceId, rv);
                     // TODO: notifyDelegate BACKUPS_CHANGED
-                    return STANDBY;
+                    return CompletableFuture.completedFuture(STANDBY);
                 default:
                     log.warn("unknown Mastership Role {}", currentRole);
             }
-            return currentRole;
+            return CompletableFuture.completedFuture(currentRole);
         } finally {
             roleMap.unlock(deviceId);
         }