Changed argument from Device -> DeviceId
- roleChanged(), isReachable() Eventually consistent nature of Device store was interfering with mastership control. Change-Id: I9c0dd846a4e30863f922f6706c6cb62fd7c83f29
Showing
7 changed files
with
35 additions
and
38 deletions
... | @@ -368,12 +368,12 @@ public class OpticalConfigProvider extends AbstractProvider implements DevicePro | ... | @@ -368,12 +368,12 @@ public class OpticalConfigProvider extends AbstractProvider implements DevicePro |
368 | } | 368 | } |
369 | 369 | ||
370 | @Override | 370 | @Override |
371 | - public void roleChanged(Device device, MastershipRole newRole) { | 371 | + public void roleChanged(DeviceId device, MastershipRole newRole) { |
372 | // TODO Auto-generated method stub. | 372 | // TODO Auto-generated method stub. |
373 | } | 373 | } |
374 | 374 | ||
375 | @Override | 375 | @Override |
376 | - public boolean isReachable(Device device) { | 376 | + public boolean isReachable(DeviceId device) { |
377 | return false; | 377 | return false; |
378 | } | 378 | } |
379 | } | 379 | } | ... | ... |
... | @@ -16,6 +16,7 @@ | ... | @@ -16,6 +16,7 @@ |
16 | package org.onlab.onos.net.device; | 16 | package org.onlab.onos.net.device; |
17 | 17 | ||
18 | import org.onlab.onos.net.Device; | 18 | import org.onlab.onos.net.Device; |
19 | +import org.onlab.onos.net.DeviceId; | ||
19 | import org.onlab.onos.net.MastershipRole; | 20 | import org.onlab.onos.net.MastershipRole; |
20 | import org.onlab.onos.net.provider.Provider; | 21 | import org.onlab.onos.net.provider.Provider; |
21 | 22 | ||
... | @@ -42,16 +43,16 @@ public interface DeviceProvider extends Provider { | ... | @@ -42,16 +43,16 @@ public interface DeviceProvider extends Provider { |
42 | * Notifies the provider of a mastership role change for the specified | 43 | * Notifies the provider of a mastership role change for the specified |
43 | * device as decided by the core. | 44 | * device as decided by the core. |
44 | * | 45 | * |
45 | - * @param device affected device | 46 | + * @param deviceId device identifier |
46 | * @param newRole newly determined mastership role | 47 | * @param newRole newly determined mastership role |
47 | */ | 48 | */ |
48 | - void roleChanged(Device device, MastershipRole newRole); | 49 | + void roleChanged(DeviceId deviceId, MastershipRole newRole); |
49 | 50 | ||
50 | /** | 51 | /** |
51 | * Checks the reachability (connectivity) of a device from this provider. | 52 | * Checks the reachability (connectivity) of a device from this provider. |
52 | * | 53 | * |
53 | - * @param device device to check | 54 | + * @param deviceId device identifier |
54 | * @return true if reachable, false otherwise | 55 | * @return true if reachable, false otherwise |
55 | */ | 56 | */ |
56 | - boolean isReachable(Device device); | 57 | + boolean isReachable(DeviceId deviceId); |
57 | } | 58 | } | ... | ... |
... | @@ -159,13 +159,14 @@ public class DeviceManager | ... | @@ -159,13 +159,14 @@ public class DeviceManager |
159 | } | 159 | } |
160 | 160 | ||
161 | // Check a device for control channel connectivity. | 161 | // Check a device for control channel connectivity. |
162 | - private boolean isReachable(Device device) { | 162 | + private boolean isReachable(DeviceId deviceId) { |
163 | - // FIXME: Device might not be there yet. (eventual consistent) | 163 | + DeviceProvider provider = getProvider(deviceId); |
164 | - if (device == null) { | 164 | + if (provider != null) { |
165 | + return provider.isReachable(deviceId); | ||
166 | + } else { | ||
167 | + log.error("Provider not found for {}", deviceId); | ||
165 | return false; | 168 | return false; |
166 | } | 169 | } |
167 | - DeviceProvider provider = getProvider(device.providerId()); | ||
168 | - return provider.isReachable(device); | ||
169 | } | 170 | } |
170 | 171 | ||
171 | @Override | 172 | @Override |
... | @@ -226,15 +227,9 @@ public class DeviceManager | ... | @@ -226,15 +227,9 @@ public class DeviceManager |
226 | log.warn("Provider for {} was not found. Cannot apply role {}", deviceId, newRole); | 227 | log.warn("Provider for {} was not found. Cannot apply role {}", deviceId, newRole); |
227 | return false; | 228 | return false; |
228 | } | 229 | } |
229 | - // FIXME roleChanged should take DeviceId instead of Device | 230 | + provider.roleChanged(deviceId, newRole); |
230 | - Device device = store.getDevice(deviceId); | 231 | + // not triggering probe when triggered by provider service event |
231 | - if (device == null) { | ||
232 | - log.warn("{} was not there. Cannot apply role {}", deviceId, newRole); | ||
233 | - return false; | ||
234 | - } | ||
235 | - provider.roleChanged(device, newRole); | ||
236 | 232 | ||
237 | - // not triggering prove when triggered by provider service | ||
238 | return true; | 233 | return true; |
239 | } | 234 | } |
240 | 235 | ||
... | @@ -442,6 +437,7 @@ public class DeviceManager | ... | @@ -442,6 +437,7 @@ public class DeviceManager |
442 | 437 | ||
443 | Device device = store.getDevice(deviceId); | 438 | Device device = store.getDevice(deviceId); |
444 | // FIXME: Device might not be there yet. (eventual consistent) | 439 | // FIXME: Device might not be there yet. (eventual consistent) |
440 | + // FIXME relinquish role | ||
445 | if (device == null) { | 441 | if (device == null) { |
446 | log.warn("{} was not there. Cannot apply role {}", deviceId, newRole); | 442 | log.warn("{} was not there. Cannot apply role {}", deviceId, newRole); |
447 | return false; | 443 | return false; |
... | @@ -452,8 +448,7 @@ public class DeviceManager | ... | @@ -452,8 +448,7 @@ public class DeviceManager |
452 | log.warn("Provider for {} was not found. Cannot apply role {}", deviceId, newRole); | 448 | log.warn("Provider for {} was not found. Cannot apply role {}", deviceId, newRole); |
453 | return false; | 449 | return false; |
454 | } | 450 | } |
455 | - // FIXME roleChanged should take DeviceId instead of Device | 451 | + provider.roleChanged(deviceId, newRole); |
456 | - provider.roleChanged(device, newRole); | ||
457 | 452 | ||
458 | if (newRole.equals(MastershipRole.MASTER)) { | 453 | if (newRole.equals(MastershipRole.MASTER)) { |
459 | // only trigger event when request was sent to provider | 454 | // only trigger event when request was sent to provider |
... | @@ -495,8 +490,7 @@ public class DeviceManager | ... | @@ -495,8 +490,7 @@ public class DeviceManager |
495 | } | 490 | } |
496 | 491 | ||
497 | 492 | ||
498 | - final Device device = getDevice(did); | 493 | + final boolean isReachable = isReachable(did); |
499 | - final boolean isReachable = isReachable(device); | ||
500 | if (!isReachable) { | 494 | if (!isReachable) { |
501 | // device is not connected to this node | 495 | // device is not connected to this node |
502 | if (myNextRole != NONE) { | 496 | if (myNextRole != NONE) { |
... | @@ -505,6 +499,7 @@ public class DeviceManager | ... | @@ -505,6 +499,7 @@ public class DeviceManager |
505 | + "Relinquishing role. ", | 499 | + "Relinquishing role. ", |
506 | myNextRole, did); | 500 | myNextRole, did); |
507 | mastershipService.relinquishMastership(did); | 501 | mastershipService.relinquishMastership(did); |
502 | + // FIXME disconnect? | ||
508 | } | 503 | } |
509 | return; | 504 | return; |
510 | } | 505 | } |
... | @@ -523,6 +518,7 @@ public class DeviceManager | ... | @@ -523,6 +518,7 @@ public class DeviceManager |
523 | 518 | ||
524 | switch (myNextRole) { | 519 | switch (myNextRole) { |
525 | case MASTER: | 520 | case MASTER: |
521 | + final Device device = getDevice(did); | ||
526 | if ((device != null) && !isAvailable(did)) { | 522 | if ((device != null) && !isAvailable(did)) { |
527 | //flag the device as online. Is there a better way to do this? | 523 | //flag the device as online. Is there a better way to do this? |
528 | DefaultDeviceDescription deviceDescription | 524 | DefaultDeviceDescription deviceDescription | ... | ... |
... | @@ -251,7 +251,7 @@ public class DeviceManagerTest { | ... | @@ -251,7 +251,7 @@ public class DeviceManagerTest { |
251 | 251 | ||
252 | 252 | ||
253 | private class TestProvider extends AbstractProvider implements DeviceProvider { | 253 | private class TestProvider extends AbstractProvider implements DeviceProvider { |
254 | - private Device deviceReceived; | 254 | + private DeviceId deviceReceived; |
255 | private MastershipRole roleReceived; | 255 | private MastershipRole roleReceived; |
256 | 256 | ||
257 | public TestProvider() { | 257 | public TestProvider() { |
... | @@ -263,13 +263,13 @@ public class DeviceManagerTest { | ... | @@ -263,13 +263,13 @@ public class DeviceManagerTest { |
263 | } | 263 | } |
264 | 264 | ||
265 | @Override | 265 | @Override |
266 | - public void roleChanged(Device device, MastershipRole newRole) { | 266 | + public void roleChanged(DeviceId device, MastershipRole newRole) { |
267 | deviceReceived = device; | 267 | deviceReceived = device; |
268 | roleReceived = newRole; | 268 | roleReceived = newRole; |
269 | } | 269 | } |
270 | 270 | ||
271 | @Override | 271 | @Override |
272 | - public boolean isReachable(Device device) { | 272 | + public boolean isReachable(DeviceId device) { |
273 | return false; | 273 | return false; |
274 | } | 274 | } |
275 | } | 275 | } | ... | ... |
... | @@ -111,8 +111,8 @@ public class OpenFlowDeviceProvider extends AbstractProvider implements DevicePr | ... | @@ -111,8 +111,8 @@ public class OpenFlowDeviceProvider extends AbstractProvider implements DevicePr |
111 | 111 | ||
112 | 112 | ||
113 | @Override | 113 | @Override |
114 | - public boolean isReachable(Device device) { | 114 | + public boolean isReachable(DeviceId deviceId) { |
115 | - OpenFlowSwitch sw = controller.getSwitch(dpid(device.id().uri())); | 115 | + OpenFlowSwitch sw = controller.getSwitch(dpid(deviceId.uri())); |
116 | if (sw == null || !sw.isConnected()) { | 116 | if (sw == null || !sw.isConnected()) { |
117 | return false; | 117 | return false; |
118 | } | 118 | } |
... | @@ -170,22 +170,22 @@ public class OpenFlowDeviceProvider extends AbstractProvider implements DevicePr | ... | @@ -170,22 +170,22 @@ public class OpenFlowDeviceProvider extends AbstractProvider implements DevicePr |
170 | // } | 170 | // } |
171 | 171 | ||
172 | @Override | 172 | @Override |
173 | - public void roleChanged(Device device, MastershipRole newRole) { | 173 | + public void roleChanged(DeviceId deviceId, MastershipRole newRole) { |
174 | switch (newRole) { | 174 | switch (newRole) { |
175 | case MASTER: | 175 | case MASTER: |
176 | - controller.setRole(dpid(device.id().uri()), RoleState.MASTER); | 176 | + controller.setRole(dpid(deviceId.uri()), RoleState.MASTER); |
177 | break; | 177 | break; |
178 | case STANDBY: | 178 | case STANDBY: |
179 | - controller.setRole(dpid(device.id().uri()), RoleState.EQUAL); | 179 | + controller.setRole(dpid(deviceId.uri()), RoleState.EQUAL); |
180 | break; | 180 | break; |
181 | case NONE: | 181 | case NONE: |
182 | - controller.setRole(dpid(device.id().uri()), RoleState.SLAVE); | 182 | + controller.setRole(dpid(deviceId.uri()), RoleState.SLAVE); |
183 | break; | 183 | break; |
184 | default: | 184 | default: |
185 | LOG.error("Unknown Mastership state : {}", newRole); | 185 | LOG.error("Unknown Mastership state : {}", newRole); |
186 | 186 | ||
187 | } | 187 | } |
188 | - LOG.info("Accepting mastership role change for device {}", device.id()); | 188 | + LOG.info("Accepting mastership role change for device {}", deviceId); |
189 | } | 189 | } |
190 | 190 | ||
191 | private class InternalDeviceProvider implements OpenFlowSwitchListener { | 191 | private class InternalDeviceProvider implements OpenFlowSwitchListener { | ... | ... |
... | @@ -105,11 +105,11 @@ public class OpenFlowDeviceProviderTest { | ... | @@ -105,11 +105,11 @@ public class OpenFlowDeviceProviderTest { |
105 | 105 | ||
106 | @Test | 106 | @Test |
107 | public void roleChanged() { | 107 | public void roleChanged() { |
108 | - provider.roleChanged(DEV1, MASTER); | 108 | + provider.roleChanged(DID1, MASTER); |
109 | assertEquals("Should be MASTER", RoleState.MASTER, controller.roleMap.get(DPID1)); | 109 | assertEquals("Should be MASTER", RoleState.MASTER, controller.roleMap.get(DPID1)); |
110 | - provider.roleChanged(DEV1, STANDBY); | 110 | + provider.roleChanged(DID1, STANDBY); |
111 | assertEquals("Should be EQUAL", RoleState.EQUAL, controller.roleMap.get(DPID1)); | 111 | assertEquals("Should be EQUAL", RoleState.EQUAL, controller.roleMap.get(DPID1)); |
112 | - provider.roleChanged(DEV1, NONE); | 112 | + provider.roleChanged(DID1, NONE); |
113 | assertEquals("Should be SLAVE", RoleState.SLAVE, controller.roleMap.get(DPID1)); | 113 | assertEquals("Should be SLAVE", RoleState.SLAVE, controller.roleMap.get(DPID1)); |
114 | } | 114 | } |
115 | 115 | ... | ... |
... | @@ -244,7 +244,7 @@ class ConfigProvider implements DeviceProvider, LinkProvider, HostProvider { | ... | @@ -244,7 +244,7 @@ class ConfigProvider implements DeviceProvider, LinkProvider, HostProvider { |
244 | } | 244 | } |
245 | 245 | ||
246 | @Override | 246 | @Override |
247 | - public void roleChanged(Device device, MastershipRole newRole) { | 247 | + public void roleChanged(DeviceId device, MastershipRole newRole) { |
248 | } | 248 | } |
249 | 249 | ||
250 | @Override | 250 | @Override |
... | @@ -257,7 +257,7 @@ class ConfigProvider implements DeviceProvider, LinkProvider, HostProvider { | ... | @@ -257,7 +257,7 @@ class ConfigProvider implements DeviceProvider, LinkProvider, HostProvider { |
257 | } | 257 | } |
258 | 258 | ||
259 | @Override | 259 | @Override |
260 | - public boolean isReachable(Device device) { | 260 | + public boolean isReachable(DeviceId device) { |
261 | return false; | 261 | return false; |
262 | } | 262 | } |
263 | } | 263 | } | ... | ... |
-
Please register or login to post a comment