Committed by
Gerrit Code Review
Add a set of synchronous version of methods for MastershipService
Change-Id: I61da650eb545c14b5fa824ac92d1ebe62126dec3
Showing
2 changed files
with
49 additions
and
4 deletions
| ... | @@ -16,7 +16,9 @@ | ... | @@ -16,7 +16,9 @@ |
| 16 | package org.onosproject.mastership; | 16 | package org.onosproject.mastership; |
| 17 | 17 | ||
| 18 | import java.util.concurrent.CompletableFuture; | 18 | import java.util.concurrent.CompletableFuture; |
| 19 | +import java.util.concurrent.TimeUnit; | ||
| 19 | 20 | ||
| 21 | +import org.onlab.util.Tools; | ||
| 20 | import org.onosproject.cluster.NodeId; | 22 | import org.onosproject.cluster.NodeId; |
| 21 | import org.onosproject.net.DeviceId; | 23 | import org.onosproject.net.DeviceId; |
| 22 | import org.onosproject.net.MastershipRole; | 24 | import org.onosproject.net.MastershipRole; |
| ... | @@ -26,6 +28,8 @@ import org.onosproject.net.MastershipRole; | ... | @@ -26,6 +28,8 @@ import org.onosproject.net.MastershipRole; |
| 26 | */ | 28 | */ |
| 27 | public interface MastershipAdminService { | 29 | public interface MastershipAdminService { |
| 28 | 30 | ||
| 31 | + long TIMEOUT_MILLIS = 3000; | ||
| 32 | + | ||
| 29 | /** | 33 | /** |
| 30 | * Applies the current mastership role for the specified device. | 34 | * Applies the current mastership role for the specified device. |
| 31 | * | 35 | * |
| ... | @@ -37,6 +41,18 @@ public interface MastershipAdminService { | ... | @@ -37,6 +41,18 @@ public interface MastershipAdminService { |
| 37 | CompletableFuture<Void> setRole(NodeId instance, DeviceId deviceId, MastershipRole role); | 41 | CompletableFuture<Void> setRole(NodeId instance, DeviceId deviceId, MastershipRole role); |
| 38 | 42 | ||
| 39 | /** | 43 | /** |
| 44 | + * Synchronous version of setRole. | ||
| 45 | + * Applies the current mastership role for the specified device. | ||
| 46 | + * | ||
| 47 | + * @param instance controller instance identifier | ||
| 48 | + * @param deviceId device identifier | ||
| 49 | + * @param role requested role | ||
| 50 | + */ | ||
| 51 | + default void setRoleSync(NodeId instance, DeviceId deviceId, MastershipRole role) { | ||
| 52 | + Tools.futureGetOrElse(setRole(instance, deviceId, role), TIMEOUT_MILLIS, TimeUnit.MILLISECONDS, null); | ||
| 53 | + } | ||
| 54 | + | ||
| 55 | + /** | ||
| 40 | * Balances the mastership to be shared as evenly as possibly by all | 56 | * Balances the mastership to be shared as evenly as possibly by all |
| 41 | * online instances. | 57 | * online instances. |
| 42 | */ | 58 | */ | ... | ... |
| ... | @@ -16,10 +16,13 @@ | ... | @@ -16,10 +16,13 @@ |
| 16 | package org.onosproject.mastership; | 16 | package org.onosproject.mastership; |
| 17 | 17 | ||
| 18 | import static org.onosproject.net.MastershipRole.MASTER; | 18 | import static org.onosproject.net.MastershipRole.MASTER; |
| 19 | +import static org.onosproject.net.MastershipRole.NONE; | ||
| 19 | 20 | ||
| 20 | import java.util.Set; | 21 | import java.util.Set; |
| 21 | import java.util.concurrent.CompletableFuture; | 22 | import java.util.concurrent.CompletableFuture; |
| 23 | +import java.util.concurrent.TimeUnit; | ||
| 22 | 24 | ||
| 25 | +import org.onlab.util.Tools; | ||
| 23 | import org.onosproject.cluster.NodeId; | 26 | import org.onosproject.cluster.NodeId; |
| 24 | import org.onosproject.cluster.RoleInfo; | 27 | import org.onosproject.cluster.RoleInfo; |
| 25 | import org.onosproject.event.ListenerService; | 28 | import org.onosproject.event.ListenerService; |
| ... | @@ -35,11 +38,13 @@ import org.onosproject.net.MastershipRole; | ... | @@ -35,11 +38,13 @@ import org.onosproject.net.MastershipRole; |
| 35 | public interface MastershipService | 38 | public interface MastershipService |
| 36 | extends ListenerService<MastershipEvent, MastershipListener> { | 39 | extends ListenerService<MastershipEvent, MastershipListener> { |
| 37 | 40 | ||
| 41 | + long TIMEOUT_MILLIS = 3000; | ||
| 42 | + | ||
| 38 | /** | 43 | /** |
| 39 | * Returns the role of the local node for the specified device, without | 44 | * Returns the role of the local node for the specified device, without |
| 40 | * triggering master selection. | 45 | * triggering master selection. |
| 41 | * | 46 | * |
| 42 | - * @param deviceId the the identifier of the device | 47 | + * @param deviceId the identifier of the device |
| 43 | * @return role of the current node | 48 | * @return role of the current node |
| 44 | */ | 49 | */ |
| 45 | MastershipRole getLocalRole(DeviceId deviceId); | 50 | MastershipRole getLocalRole(DeviceId deviceId); |
| ... | @@ -47,7 +52,7 @@ public interface MastershipService | ... | @@ -47,7 +52,7 @@ public interface MastershipService |
| 47 | /** | 52 | /** |
| 48 | * Returns true if the local controller is the Master for the specified deviceId. | 53 | * Returns true if the local controller is the Master for the specified deviceId. |
| 49 | * | 54 | * |
| 50 | - * @param deviceId the the identifier of the device | 55 | + * @param deviceId the identifier of the device |
| 51 | * @return true if local node is master; false otherwise | 56 | * @return true if local node is master; false otherwise |
| 52 | */ | 57 | */ |
| 53 | default boolean isLocalMaster(DeviceId deviceId) { | 58 | default boolean isLocalMaster(DeviceId deviceId) { |
| ... | @@ -58,12 +63,24 @@ public interface MastershipService | ... | @@ -58,12 +63,24 @@ public interface MastershipService |
| 58 | * Returns the mastership status of the local controller for a given | 63 | * Returns the mastership status of the local controller for a given |
| 59 | * device forcing master selection if necessary. | 64 | * device forcing master selection if necessary. |
| 60 | * | 65 | * |
| 61 | - * @param deviceId the the identifier of the device | 66 | + * @param deviceId the identifier of the device |
| 62 | - * @return the role of this controller instance | 67 | + * @return future object of this controller instance role |
| 63 | */ | 68 | */ |
| 64 | CompletableFuture<MastershipRole> requestRoleFor(DeviceId deviceId); | 69 | CompletableFuture<MastershipRole> requestRoleFor(DeviceId deviceId); |
| 65 | 70 | ||
| 66 | /** | 71 | /** |
| 72 | + * Synchronous version of requestRoleFor. Returns the mastership status of | ||
| 73 | + * the local controller for a given device forcing master selection if necessary. | ||
| 74 | + * | ||
| 75 | + * @param deviceId the identifier of the device | ||
| 76 | + * @return the role of this controller instance | ||
| 77 | + */ | ||
| 78 | + default MastershipRole requestRoleForSync(DeviceId deviceId) { | ||
| 79 | + return Tools.futureGetOrElse(requestRoleFor(deviceId), | ||
| 80 | + TIMEOUT_MILLIS, TimeUnit.MILLISECONDS, NONE); | ||
| 81 | + } | ||
| 82 | + | ||
| 83 | + /** | ||
| 67 | * Abandons mastership of the specified device on the local node thus | 84 | * Abandons mastership of the specified device on the local node thus |
| 68 | * forcing selection of a new master. If the local node is not a master | 85 | * forcing selection of a new master. If the local node is not a master |
| 69 | * for this device, no master selection will occur. | 86 | * for this device, no master selection will occur. |
| ... | @@ -74,6 +91,18 @@ public interface MastershipService | ... | @@ -74,6 +91,18 @@ public interface MastershipService |
| 74 | CompletableFuture<Void> relinquishMastership(DeviceId deviceId); | 91 | CompletableFuture<Void> relinquishMastership(DeviceId deviceId); |
| 75 | 92 | ||
| 76 | /** | 93 | /** |
| 94 | + * Synchronous version of relinquishMastership. Abandons mastership of the | ||
| 95 | + * specified device on the local node thus forcing selection of a new master. | ||
| 96 | + * If the local node is not a master for this device, no master selection will occur. | ||
| 97 | + * | ||
| 98 | + * @param deviceId the identifier of the device | ||
| 99 | + */ | ||
| 100 | + default void relinquishMastershipSync(DeviceId deviceId) { | ||
| 101 | + Tools.futureGetOrElse(relinquishMastership(deviceId), | ||
| 102 | + TIMEOUT_MILLIS, TimeUnit.MILLISECONDS, null); | ||
| 103 | + } | ||
| 104 | + | ||
| 105 | + /** | ||
| 77 | * Returns the current master for a given device. | 106 | * Returns the current master for a given device. |
| 78 | * | 107 | * |
| 79 | * @param deviceId the identifier of the device | 108 | * @param deviceId the identifier of the device | ... | ... |
-
Please register or login to post a comment