Changed argument from Device -> DeviceId
- roleChanged(), isReachable()
Eventually consistent nature of Device store was
interfering with mastership control.
Change-Id: I9c0dd846a4e30863f922f6706c6cb62fd7c83f29
diff --git a/core/net/src/main/java/org/onlab/onos/net/device/impl/DeviceManager.java b/core/net/src/main/java/org/onlab/onos/net/device/impl/DeviceManager.java
index 258f57c..68665e4 100644
--- a/core/net/src/main/java/org/onlab/onos/net/device/impl/DeviceManager.java
+++ b/core/net/src/main/java/org/onlab/onos/net/device/impl/DeviceManager.java
@@ -159,13 +159,14 @@
}
// Check a device for control channel connectivity.
- private boolean isReachable(Device device) {
- // FIXME: Device might not be there yet. (eventual consistent)
- if (device == null) {
+ private boolean isReachable(DeviceId deviceId) {
+ DeviceProvider provider = getProvider(deviceId);
+ if (provider != null) {
+ return provider.isReachable(deviceId);
+ } else {
+ log.error("Provider not found for {}", deviceId);
return false;
}
- DeviceProvider provider = getProvider(device.providerId());
- return provider.isReachable(device);
}
@Override
@@ -226,15 +227,9 @@
log.warn("Provider for {} was not found. Cannot apply role {}", deviceId, newRole);
return false;
}
- // FIXME roleChanged should take DeviceId instead of Device
- Device device = store.getDevice(deviceId);
- if (device == null) {
- log.warn("{} was not there. Cannot apply role {}", deviceId, newRole);
- return false;
- }
- provider.roleChanged(device, newRole);
+ provider.roleChanged(deviceId, newRole);
+ // not triggering probe when triggered by provider service event
- // not triggering prove when triggered by provider service
return true;
}
@@ -442,6 +437,7 @@
Device device = store.getDevice(deviceId);
// FIXME: Device might not be there yet. (eventual consistent)
+ // FIXME relinquish role
if (device == null) {
log.warn("{} was not there. Cannot apply role {}", deviceId, newRole);
return false;
@@ -452,8 +448,7 @@
log.warn("Provider for {} was not found. Cannot apply role {}", deviceId, newRole);
return false;
}
- // FIXME roleChanged should take DeviceId instead of Device
- provider.roleChanged(device, newRole);
+ provider.roleChanged(deviceId, newRole);
if (newRole.equals(MastershipRole.MASTER)) {
// only trigger event when request was sent to provider
@@ -495,8 +490,7 @@
}
- final Device device = getDevice(did);
- final boolean isReachable = isReachable(device);
+ final boolean isReachable = isReachable(did);
if (!isReachable) {
// device is not connected to this node
if (myNextRole != NONE) {
@@ -505,6 +499,7 @@
+ "Relinquishing role. ",
myNextRole, did);
mastershipService.relinquishMastership(did);
+ // FIXME disconnect?
}
return;
}
@@ -523,6 +518,7 @@
switch (myNextRole) {
case MASTER:
+ final Device device = getDevice(did);
if ((device != null) && !isAvailable(did)) {
//flag the device as online. Is there a better way to do this?
DefaultDeviceDescription deviceDescription