Committed by
Gerrit Code Review
ONOS-1798: More appropriate method name + better pre-condition checks
Change-Id: I5d277967c22b9db48097288ea072cbc4d1c5a2a8
Showing
3 changed files
with
19 additions
and
29 deletions
| ... | @@ -74,7 +74,8 @@ public interface LeadershipService { | ... | @@ -74,7 +74,8 @@ public interface LeadershipService { |
| 74 | * potentially become the leader again if and when it becomes the highest | 74 | * potentially become the leader again if and when it becomes the highest |
| 75 | * priority candidate | 75 | * priority candidate |
| 76 | * <p> | 76 | * <p> |
| 77 | - * If the local nodeId is not the leader, this method will be a noop. | 77 | + * If the local nodeId is not the leader, this method will make no changes and |
| 78 | + * simply return false. | ||
| 78 | * | 79 | * |
| 79 | * @param path topic for which this controller node should give up leadership | 80 | * @param path topic for which this controller node should give up leadership |
| 80 | * @return true if this node stepped down from leadership, false otherwise | 81 | * @return true if this node stepped down from leadership, false otherwise | ... | ... |
| ... | @@ -271,7 +271,7 @@ public class DistributedLeadershipManager implements LeadershipService { | ... | @@ -271,7 +271,7 @@ public class DistributedLeadershipManager implements LeadershipService { |
| 271 | 271 | ||
| 272 | @Override | 272 | @Override |
| 273 | public boolean stepdown(String path) { | 273 | public boolean stepdown(String path) { |
| 274 | - if (!activeTopics.contains(path)) { | 274 | + if (!activeTopics.contains(path) || !Objects.equals(localNodeId, getLeader(path))) { |
| 275 | return false; | 275 | return false; |
| 276 | } | 276 | } |
| 277 | 277 | ... | ... |
| ... | @@ -93,7 +93,7 @@ public class ConsistentDeviceMastershipStore | ... | @@ -93,7 +93,7 @@ public class ConsistentDeviceMastershipStore |
| 93 | new MessageSubject("mastership-store-device-role-query"); | 93 | new MessageSubject("mastership-store-device-role-query"); |
| 94 | private static final MessageSubject ROLE_RELINQUISH_SUBJECT = | 94 | private static final MessageSubject ROLE_RELINQUISH_SUBJECT = |
| 95 | new MessageSubject("mastership-store-device-role-relinquish"); | 95 | new MessageSubject("mastership-store-device-role-relinquish"); |
| 96 | - private static final MessageSubject MASTERSHIP_RELINQUISH_SUBJECT = | 96 | + private static final MessageSubject TRANSITION_FROM_MASTER_TO_STANDBY_SUBJECT = |
| 97 | new MessageSubject("mastership-store-device-mastership-relinquish"); | 97 | new MessageSubject("mastership-store-device-mastership-relinquish"); |
| 98 | 98 | ||
| 99 | private static final Pattern DEVICE_MASTERSHIP_TOPIC_PATTERN = | 99 | private static final Pattern DEVICE_MASTERSHIP_TOPIC_PATTERN = |
| ... | @@ -128,9 +128,9 @@ public class ConsistentDeviceMastershipStore | ... | @@ -128,9 +128,9 @@ public class ConsistentDeviceMastershipStore |
| 128 | clusterCommunicator.addSubscriber(ROLE_RELINQUISH_SUBJECT, | 128 | clusterCommunicator.addSubscriber(ROLE_RELINQUISH_SUBJECT, |
| 129 | new RoleRelinquishHandler(), | 129 | new RoleRelinquishHandler(), |
| 130 | messageHandlingExecutor); | 130 | messageHandlingExecutor); |
| 131 | - clusterCommunicator.addSubscriber(MASTERSHIP_RELINQUISH_SUBJECT, | 131 | + clusterCommunicator.addSubscriber(TRANSITION_FROM_MASTER_TO_STANDBY_SUBJECT, |
| 132 | SERIALIZER::decode, | 132 | SERIALIZER::decode, |
| 133 | - this::relinquishMastership, | 133 | + this::transitionFromMasterToStandby, |
| 134 | SERIALIZER::encode, | 134 | SERIALIZER::encode, |
| 135 | messageHandlingExecutor); | 135 | messageHandlingExecutor); |
| 136 | localNodeId = clusterService.getLocalNode().id(); | 136 | localNodeId = clusterService.getLocalNode().id(); |
| ... | @@ -143,7 +143,7 @@ public class ConsistentDeviceMastershipStore | ... | @@ -143,7 +143,7 @@ public class ConsistentDeviceMastershipStore |
| 143 | public void deactivate() { | 143 | public void deactivate() { |
| 144 | clusterCommunicator.removeSubscriber(ROLE_QUERY_SUBJECT); | 144 | clusterCommunicator.removeSubscriber(ROLE_QUERY_SUBJECT); |
| 145 | clusterCommunicator.removeSubscriber(ROLE_RELINQUISH_SUBJECT); | 145 | clusterCommunicator.removeSubscriber(ROLE_RELINQUISH_SUBJECT); |
| 146 | - clusterCommunicator.removeSubscriber(MASTERSHIP_RELINQUISH_SUBJECT); | 146 | + clusterCommunicator.removeSubscriber(TRANSITION_FROM_MASTER_TO_STANDBY_SUBJECT); |
| 147 | messageHandlingExecutor.shutdown(); | 147 | messageHandlingExecutor.shutdown(); |
| 148 | leadershipService.removeListener(leadershipEventListener); | 148 | leadershipService.removeListener(leadershipEventListener); |
| 149 | 149 | ||
| ... | @@ -256,7 +256,7 @@ public class ConsistentDeviceMastershipStore | ... | @@ -256,7 +256,7 @@ public class ConsistentDeviceMastershipStore |
| 256 | return null; | 256 | return null; |
| 257 | } | 257 | } |
| 258 | if (leadershipService.makeTopCandidate(leadershipTopic, nodeId)) { | 258 | if (leadershipService.makeTopCandidate(leadershipTopic, nodeId)) { |
| 259 | - return relinquishMastership(deviceId); | 259 | + return transitionFromMasterToStandby(deviceId); |
| 260 | } else { | 260 | } else { |
| 261 | log.warn("Failed to promote {} to mastership for {}", nodeId, deviceId); | 261 | log.warn("Failed to promote {} to mastership for {}", nodeId, deviceId); |
| 262 | } | 262 | } |
| ... | @@ -282,9 +282,9 @@ public class ConsistentDeviceMastershipStore | ... | @@ -282,9 +282,9 @@ public class ConsistentDeviceMastershipStore |
| 282 | if (!nodeId.equals(currentMaster)) { | 282 | if (!nodeId.equals(currentMaster)) { |
| 283 | return null; | 283 | return null; |
| 284 | } | 284 | } |
| 285 | - // FIXME: This can becomes the master again unless it | 285 | + // FIXME: This can become the master again unless it |
| 286 | - // is demoted to the end of candidates list. | 286 | + // is first demoted to the end of candidates list. |
| 287 | - return relinquishMastership(deviceId); | 287 | + return transitionFromMasterToStandby(deviceId); |
| 288 | } | 288 | } |
| 289 | 289 | ||
| 290 | @Override | 290 | @Override |
| ... | @@ -309,14 +309,11 @@ public class ConsistentDeviceMastershipStore | ... | @@ -309,14 +309,11 @@ public class ConsistentDeviceMastershipStore |
| 309 | } | 309 | } |
| 310 | 310 | ||
| 311 | String leadershipTopic = createDeviceMastershipTopic(deviceId); | 311 | String leadershipTopic = createDeviceMastershipTopic(deviceId); |
| 312 | - Leadership currentLeadership = leadershipService.getLeadership(leadershipTopic); | 312 | + NodeId currentLeader = leadershipService.getLeader(leadershipTopic); |
| 313 | 313 | ||
| 314 | - MastershipEvent.Type eventType = null; | 314 | + MastershipEvent.Type eventType = Objects.equal(currentLeader, localNodeId) |
| 315 | - if (currentLeadership != null && currentLeadership.leader().equals(localNodeId)) { | 315 | + ? MastershipEvent.Type.MASTER_CHANGED |
| 316 | - eventType = MastershipEvent.Type.MASTER_CHANGED; | 316 | + : MastershipEvent.Type.BACKUPS_CHANGED; |
| 317 | - } else { | ||
| 318 | - eventType = MastershipEvent.Type.BACKUPS_CHANGED; | ||
| 319 | - } | ||
| 320 | 317 | ||
| 321 | connectedDevices.remove(deviceId); | 318 | connectedDevices.remove(deviceId); |
| 322 | leadershipService.withdraw(leadershipTopic); | 319 | leadershipService.withdraw(leadershipTopic); |
| ... | @@ -324,7 +321,7 @@ public class ConsistentDeviceMastershipStore | ... | @@ -324,7 +321,7 @@ public class ConsistentDeviceMastershipStore |
| 324 | return new MastershipEvent(eventType, deviceId, getNodes(deviceId)); | 321 | return new MastershipEvent(eventType, deviceId, getNodes(deviceId)); |
| 325 | } | 322 | } |
| 326 | 323 | ||
| 327 | - private MastershipEvent relinquishMastership(DeviceId deviceId) { | 324 | + private MastershipEvent transitionFromMasterToStandby(DeviceId deviceId) { |
| 328 | checkArgument(deviceId != null, DEVICE_ID_NULL); | 325 | checkArgument(deviceId != null, DEVICE_ID_NULL); |
| 329 | 326 | ||
| 330 | NodeId currentMaster = getMaster(deviceId); | 327 | NodeId currentMaster = getMaster(deviceId); |
| ... | @@ -337,22 +334,14 @@ public class ConsistentDeviceMastershipStore | ... | @@ -337,22 +334,14 @@ public class ConsistentDeviceMastershipStore |
| 337 | + "mastership for device {} to {}", deviceId, currentMaster); | 334 | + "mastership for device {} to {}", deviceId, currentMaster); |
| 338 | return futureGetOrElse(clusterCommunicator.sendAndReceive( | 335 | return futureGetOrElse(clusterCommunicator.sendAndReceive( |
| 339 | deviceId, | 336 | deviceId, |
| 340 | - MASTERSHIP_RELINQUISH_SUBJECT, | 337 | + TRANSITION_FROM_MASTER_TO_STANDBY_SUBJECT, |
| 341 | SERIALIZER::encode, | 338 | SERIALIZER::encode, |
| 342 | SERIALIZER::decode, | 339 | SERIALIZER::decode, |
| 343 | currentMaster), null); | 340 | currentMaster), null); |
| 344 | } | 341 | } |
| 345 | 342 | ||
| 346 | - String leadershipTopic = createDeviceMastershipTopic(deviceId); | 343 | + return leadershipService.stepdown(createDeviceMastershipTopic(deviceId)) |
| 347 | - Leadership currentLeadership = leadershipService.getLeadership(leadershipTopic); | 344 | + ? new MastershipEvent(MastershipEvent.Type.MASTER_CHANGED, deviceId, getNodes(deviceId)) : null; |
| 348 | - | ||
| 349 | - MastershipEvent.Type eventType = null; | ||
| 350 | - if (currentLeadership != null && currentLeadership.leader().equals(localNodeId)) { | ||
| 351 | - eventType = MastershipEvent.Type.MASTER_CHANGED; | ||
| 352 | - } | ||
| 353 | - | ||
| 354 | - return leadershipService.stepdown(leadershipTopic) | ||
| 355 | - ? new MastershipEvent(eventType, deviceId, getNodes(deviceId)) : null; | ||
| 356 | } | 345 | } |
| 357 | 346 | ||
| 358 | private class RoleQueryHandler implements ClusterMessageHandler { | 347 | private class RoleQueryHandler implements ClusterMessageHandler { | ... | ... |
-
Please register or login to post a comment