Committed by
Gerrit Code Review
MastershipService.relinquishRole returns CompletableFuture + Block deviceDiconne…
…cted until role relinquish is complete Change-Id: I081df48fc05fdca2e452a937a093d5caa16091ed
Showing
7 changed files
with
34 additions
and
21 deletions
| ... | @@ -55,8 +55,9 @@ public interface MastershipService { | ... | @@ -55,8 +55,9 @@ public interface MastershipService { |
| 55 | * for this device, no master selection will occur. | 55 | * for this device, no master selection will occur. |
| 56 | * | 56 | * |
| 57 | * @param deviceId the identifier of the device | 57 | * @param deviceId the identifier of the device |
| 58 | + * @return future that is completed when relinquish is complete | ||
| 58 | */ | 59 | */ |
| 59 | - void relinquishMastership(DeviceId deviceId); | 60 | + CompletableFuture<Void> relinquishMastership(DeviceId deviceId); |
| 60 | 61 | ||
| 61 | /** | 62 | /** |
| 62 | * Returns the current master for a given device. | 63 | * Returns the current master for a given device. | ... | ... |
| ... | @@ -38,7 +38,8 @@ public class MastershipServiceAdapter implements MastershipService { | ... | @@ -38,7 +38,8 @@ public class MastershipServiceAdapter implements MastershipService { |
| 38 | } | 38 | } |
| 39 | 39 | ||
| 40 | @Override | 40 | @Override |
| 41 | - public void relinquishMastership(DeviceId deviceId) { | 41 | + public CompletableFuture<Void> relinquishMastership(DeviceId deviceId) { |
| 42 | + return null; | ||
| 42 | } | 43 | } |
| 43 | 44 | ||
| 44 | @Override | 45 | @Override | ... | ... |
| ... | @@ -95,12 +95,13 @@ public class MastershipManager | ... | @@ -95,12 +95,13 @@ public class MastershipManager |
| 95 | @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) | 95 | @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) |
| 96 | protected MetricsService metricsService; | 96 | protected MetricsService metricsService; |
| 97 | 97 | ||
| 98 | + private NodeId localNodeId; | ||
| 98 | private Timer requestRoleTimer; | 99 | private Timer requestRoleTimer; |
| 99 | 100 | ||
| 100 | @Activate | 101 | @Activate |
| 101 | public void activate() { | 102 | public void activate() { |
| 102 | requestRoleTimer = createTimer("Mastership", "requestRole", "responseTime"); | 103 | requestRoleTimer = createTimer("Mastership", "requestRole", "responseTime"); |
| 103 | - | 104 | + localNodeId = clusterService.getLocalNode().id(); |
| 104 | eventDispatcher.addSink(MastershipEvent.class, listenerRegistry); | 105 | eventDispatcher.addSink(MastershipEvent.class, listenerRegistry); |
| 105 | store.setDelegate(delegate); | 106 | store.setDelegate(delegate); |
| 106 | log.info("Started"); | 107 | log.info("Started"); |
| ... | @@ -136,11 +137,8 @@ public class MastershipManager | ... | @@ -136,11 +137,8 @@ public class MastershipManager |
| 136 | return CompletableFuture.completedFuture(null); | 137 | return CompletableFuture.completedFuture(null); |
| 137 | } | 138 | } |
| 138 | 139 | ||
| 139 | - return eventFuture.whenComplete((event, error) -> { | 140 | + return eventFuture.thenAccept(this::post) |
| 140 | - if (event != null) { | 141 | + .thenApply(v -> null); |
| 141 | - post(event); | ||
| 142 | - } | ||
| 143 | - }).thenApply(v -> null); | ||
| 144 | } | 142 | } |
| 145 | 143 | ||
| 146 | @Override | 144 | @Override |
| ... | @@ -152,15 +150,11 @@ public class MastershipManager | ... | @@ -152,15 +150,11 @@ public class MastershipManager |
| 152 | } | 150 | } |
| 153 | 151 | ||
| 154 | @Override | 152 | @Override |
| 155 | - public void relinquishMastership(DeviceId deviceId) { | 153 | + public CompletableFuture<Void> relinquishMastership(DeviceId deviceId) { |
| 156 | checkPermission(Permission.CLUSTER_WRITE); | 154 | checkPermission(Permission.CLUSTER_WRITE); |
| 157 | - | 155 | + return store.relinquishRole(localNodeId, deviceId) |
| 158 | - store.relinquishRole(clusterService.getLocalNode().id(), deviceId) | 156 | + .thenAccept(this::post) |
| 159 | - .whenComplete((event, error) -> { | 157 | + .thenApply(v -> null); |
| 160 | - if (event != null) { | ||
| 161 | - post(event); | ||
| 162 | - } | ||
| 163 | - }); | ||
| 164 | } | 158 | } |
| 165 | 159 | ||
| 166 | @Override | 160 | @Override | ... | ... |
| ... | @@ -16,7 +16,6 @@ | ... | @@ -16,7 +16,6 @@ |
| 16 | package org.onosproject.net.device.impl; | 16 | package org.onosproject.net.device.impl; |
| 17 | 17 | ||
| 18 | import com.google.common.collect.Lists; | 18 | import com.google.common.collect.Lists; |
| 19 | - | ||
| 20 | import org.apache.felix.scr.annotations.Activate; | 19 | import org.apache.felix.scr.annotations.Activate; |
| 21 | import org.apache.felix.scr.annotations.Component; | 20 | import org.apache.felix.scr.annotations.Component; |
| 22 | import org.apache.felix.scr.annotations.Deactivate; | 21 | import org.apache.felix.scr.annotations.Deactivate; |
| ... | @@ -411,8 +410,15 @@ public class DeviceManager | ... | @@ -411,8 +410,15 @@ public class DeviceManager |
| 411 | } | 410 | } |
| 412 | }); | 411 | }); |
| 413 | } finally { | 412 | } finally { |
| 414 | - //relinquish master role and ability to be backup. | 413 | + try { |
| 415 | - mastershipService.relinquishMastership(deviceId); | 414 | + //relinquish master role and ability to be backup. |
| 415 | + mastershipService.relinquishMastership(deviceId).get(); | ||
| 416 | + } catch (InterruptedException e) { | ||
| 417 | + log.warn("Interrupted while reliquishing role for {}", deviceId); | ||
| 418 | + Thread.currentThread().interrupt(); | ||
| 419 | + } catch (ExecutionException e) { | ||
| 420 | + log.error("Exception thrown while relinquishing role for {}", deviceId, e); | ||
| 421 | + } | ||
| 416 | } | 422 | } |
| 417 | } | 423 | } |
| 418 | 424 | ... | ... |
| ... | @@ -311,6 +311,11 @@ public class DeviceManagerTest { | ... | @@ -311,6 +311,11 @@ public class DeviceManagerTest { |
| 311 | } | 311 | } |
| 312 | 312 | ||
| 313 | @Override | 313 | @Override |
| 314 | + public CompletableFuture<Void> relinquishMastership(DeviceId deviceId) { | ||
| 315 | + return CompletableFuture.completedFuture(null); | ||
| 316 | + } | ||
| 317 | + | ||
| 318 | + @Override | ||
| 314 | public MastershipTerm getMastershipTerm(DeviceId deviceId) { | 319 | public MastershipTerm getMastershipTerm(DeviceId deviceId) { |
| 315 | // FIXME: just returning something not null | 320 | // FIXME: just returning something not null |
| 316 | return MastershipTerm.of(NID_LOCAL, 1); | 321 | return MastershipTerm.of(NID_LOCAL, 1); | ... | ... |
| ... | @@ -37,6 +37,7 @@ import org.onosproject.net.Annotations; | ... | @@ -37,6 +37,7 @@ import org.onosproject.net.Annotations; |
| 37 | import org.onosproject.net.DefaultAnnotations; | 37 | import org.onosproject.net.DefaultAnnotations; |
| 38 | import org.onosproject.net.Device; | 38 | import org.onosproject.net.Device; |
| 39 | import org.onosproject.net.DeviceId; | 39 | import org.onosproject.net.DeviceId; |
| 40 | +import org.onosproject.net.MastershipRole; | ||
| 40 | import org.onosproject.net.Port; | 41 | import org.onosproject.net.Port; |
| 41 | import org.onosproject.net.PortNumber; | 42 | import org.onosproject.net.PortNumber; |
| 42 | import org.onosproject.net.SparseAnnotations; | 43 | import org.onosproject.net.SparseAnnotations; |
| ... | @@ -62,6 +63,7 @@ import java.util.HashMap; | ... | @@ -62,6 +63,7 @@ import java.util.HashMap; |
| 62 | import java.util.List; | 63 | import java.util.List; |
| 63 | import java.util.Map; | 64 | import java.util.Map; |
| 64 | import java.util.Set; | 65 | import java.util.Set; |
| 66 | +import java.util.concurrent.CompletableFuture; | ||
| 65 | import java.util.concurrent.CountDownLatch; | 67 | import java.util.concurrent.CountDownLatch; |
| 66 | import java.util.concurrent.ExecutorService; | 68 | import java.util.concurrent.ExecutorService; |
| 67 | import java.util.concurrent.TimeUnit; | 69 | import java.util.concurrent.TimeUnit; |
| ... | @@ -854,6 +856,10 @@ public class GossipDeviceStoreTest { | ... | @@ -854,6 +856,10 @@ public class GossipDeviceStoreTest { |
| 854 | public NodeId getMasterFor(DeviceId deviceId) { | 856 | public NodeId getMasterFor(DeviceId deviceId) { |
| 855 | return NID1; | 857 | return NID1; |
| 856 | } | 858 | } |
| 859 | + @Override | ||
| 860 | + public CompletableFuture<MastershipRole> requestRoleFor(DeviceId deviceId) { | ||
| 861 | + return CompletableFuture.completedFuture(null); | ||
| 862 | + } | ||
| 857 | } | 863 | } |
| 858 | 864 | ||
| 859 | private static final class TestGossipDeviceStore extends GossipDeviceStore { | 865 | private static final class TestGossipDeviceStore extends GossipDeviceStore { | ... | ... |
| ... | @@ -502,8 +502,8 @@ public class LLDPLinkProviderTest { | ... | @@ -502,8 +502,8 @@ public class LLDPLinkProviderTest { |
| 502 | } | 502 | } |
| 503 | 503 | ||
| 504 | @Override | 504 | @Override |
| 505 | - public void relinquishMastership(DeviceId deviceId) { | 505 | + public CompletableFuture<Void> relinquishMastership(DeviceId deviceId) { |
| 506 | - | 506 | + return null; |
| 507 | } | 507 | } |
| 508 | 508 | ||
| 509 | @Override | 509 | @Override | ... | ... |
-
Please register or login to post a comment