Committed by
Gerrit Code Review
When relinquishing mastership, wait for LeadershipService::withdraw to complete …
…before returning a MastershipEvent Change-Id: Ieb0816bf3d17fee28815ea59959ed6d4a4efb478
Showing
1 changed file
with
16 additions
and
16 deletions
... | @@ -127,7 +127,7 @@ public class ConsistentDeviceMastershipStore | ... | @@ -127,7 +127,7 @@ public class ConsistentDeviceMastershipStore |
127 | transferExecutor = | 127 | transferExecutor = |
128 | Executors.newSingleThreadScheduledExecutor( | 128 | Executors.newSingleThreadScheduledExecutor( |
129 | groupedThreads("onos/store/device/mastership", "mastership-transfer-executor")); | 129 | groupedThreads("onos/store/device/mastership", "mastership-transfer-executor")); |
130 | - clusterCommunicator.<DeviceId, MastershipEvent>addSubscriber(ROLE_RELINQUISH_SUBJECT, | 130 | + clusterCommunicator.addSubscriber(ROLE_RELINQUISH_SUBJECT, |
131 | SERIALIZER::decode, | 131 | SERIALIZER::decode, |
132 | this::relinquishLocalRole, | 132 | this::relinquishLocalRole, |
133 | SERIALIZER::encode, | 133 | SERIALIZER::encode, |
... | @@ -310,25 +310,26 @@ public class ConsistentDeviceMastershipStore | ... | @@ -310,25 +310,26 @@ public class ConsistentDeviceMastershipStore |
310 | checkArgument(nodeId != null, NODE_ID_NULL); | 310 | checkArgument(nodeId != null, NODE_ID_NULL); |
311 | checkArgument(deviceId != null, DEVICE_ID_NULL); | 311 | checkArgument(deviceId != null, DEVICE_ID_NULL); |
312 | 312 | ||
313 | - if (!nodeId.equals(localNodeId)) { | 313 | + if (nodeId.equals(localNodeId)) { |
314 | - log.debug("Forwarding request to relinquish " | 314 | + return relinquishLocalRole(deviceId); |
315 | - + "role for device {} to {}", deviceId, nodeId); | ||
316 | - return clusterCommunicator.sendAndReceive( | ||
317 | - deviceId, | ||
318 | - ROLE_RELINQUISH_SUBJECT, | ||
319 | - SERIALIZER::encode, | ||
320 | - SERIALIZER::decode, | ||
321 | - nodeId); | ||
322 | } | 315 | } |
323 | - return CompletableFuture.completedFuture(relinquishLocalRole(deviceId)); | 316 | + |
317 | + log.debug("Forwarding request to relinquish " | ||
318 | + + "role for device {} to {}", deviceId, nodeId); | ||
319 | + return clusterCommunicator.sendAndReceive( | ||
320 | + deviceId, | ||
321 | + ROLE_RELINQUISH_SUBJECT, | ||
322 | + SERIALIZER::encode, | ||
323 | + SERIALIZER::decode, | ||
324 | + nodeId); | ||
324 | } | 325 | } |
325 | 326 | ||
326 | - private MastershipEvent relinquishLocalRole(DeviceId deviceId) { | 327 | + private CompletableFuture<MastershipEvent> relinquishLocalRole(DeviceId deviceId) { |
327 | checkArgument(deviceId != null, DEVICE_ID_NULL); | 328 | checkArgument(deviceId != null, DEVICE_ID_NULL); |
328 | 329 | ||
329 | // Check if this node is can be managed by this node. | 330 | // Check if this node is can be managed by this node. |
330 | if (!connectedDevices.contains(deviceId)) { | 331 | if (!connectedDevices.contains(deviceId)) { |
331 | - return null; | 332 | + return CompletableFuture.completedFuture(null); |
332 | } | 333 | } |
333 | 334 | ||
334 | String leadershipTopic = createDeviceMastershipTopic(deviceId); | 335 | String leadershipTopic = createDeviceMastershipTopic(deviceId); |
... | @@ -339,9 +340,8 @@ public class ConsistentDeviceMastershipStore | ... | @@ -339,9 +340,8 @@ public class ConsistentDeviceMastershipStore |
339 | : MastershipEvent.Type.BACKUPS_CHANGED; | 340 | : MastershipEvent.Type.BACKUPS_CHANGED; |
340 | 341 | ||
341 | connectedDevices.remove(deviceId); | 342 | connectedDevices.remove(deviceId); |
342 | - leadershipService.withdraw(leadershipTopic); | 343 | + return leadershipService.withdraw(leadershipTopic) |
343 | - | 344 | + .thenApply(v -> new MastershipEvent(eventType, deviceId, getNodes(deviceId))); |
344 | - return new MastershipEvent(eventType, deviceId, getNodes(deviceId)); | ||
345 | } | 345 | } |
346 | 346 | ||
347 | private MastershipEvent transitionFromMasterToStandby(DeviceId deviceId) { | 347 | private MastershipEvent transitionFromMasterToStandby(DeviceId deviceId) { | ... | ... |
-
Please register or login to post a comment