Committed by
Gerrit Code Review
Fixed race-conditions in null providers.
Change-Id: Ie1acd9d74e1277776a5981d21043671010b37343
Showing
3 changed files
with
19 additions
and
7 deletions
| ... | @@ -382,7 +382,9 @@ public class DeviceManager | ... | @@ -382,7 +382,9 @@ public class DeviceManager |
| 382 | port.portSpeed()))); | 382 | port.portSpeed()))); |
| 383 | store.updatePorts(this.provider().id(), deviceId, descs); | 383 | store.updatePorts(this.provider().id(), deviceId, descs); |
| 384 | try { | 384 | try { |
| 385 | - post(store.markOffline(deviceId)); | 385 | + if (mastershipService.getLocalRole(deviceId) == MASTER) { |
| 386 | + post(store.markOffline(deviceId)); | ||
| 387 | + } | ||
| 386 | } catch (IllegalStateException e) { | 388 | } catch (IllegalStateException e) { |
| 387 | log.warn("Failed to mark {} offline", deviceId); | 389 | log.warn("Failed to mark {} offline", deviceId); |
| 388 | // only the MASTER should be marking off-line in normal cases, | 390 | // only the MASTER should be marking off-line in normal cases, | ... | ... |
| ... | @@ -339,7 +339,6 @@ public class NullProviders { | ... | @@ -339,7 +339,6 @@ public class NullProviders { |
| 339 | packetProvider.stop(); | 339 | packetProvider.stop(); |
| 340 | flowRuleProvider.stop(); | 340 | flowRuleProvider.stop(); |
| 341 | delay(500); | 341 | delay(500); |
| 342 | - rejectMastership(); | ||
| 343 | simulator.tearDownTopology(); | 342 | simulator.tearDownTopology(); |
| 344 | simulator = null; | 343 | simulator = null; |
| 345 | } | 344 | } |
| ... | @@ -396,7 +395,8 @@ public class NullProviders { | ... | @@ -396,7 +395,8 @@ public class NullProviders { |
| 396 | 395 | ||
| 397 | @Override | 396 | @Override |
| 398 | public boolean isReachable(DeviceId deviceId) { | 397 | public boolean isReachable(DeviceId deviceId) { |
| 399 | - return topoShape.equals("configured") || deviceService.isAvailable(deviceId); | 398 | + return topoShape.equals("configured") || |
| 399 | + (simulator != null && simulator.contains(deviceId)); | ||
| 400 | } | 400 | } |
| 401 | 401 | ||
| 402 | @Override | 402 | @Override | ... | ... |
| ... | @@ -182,9 +182,9 @@ public abstract class TopologySimulator { | ... | @@ -182,9 +182,9 @@ public abstract class TopologySimulator { |
| 182 | new DefaultDeviceDescription(id.uri(), Device.Type.SWITCH, | 182 | new DefaultDeviceDescription(id.uri(), Device.Type.SWITCH, |
| 183 | "ON.Lab", "0.1", "0.1", "1234", | 183 | "ON.Lab", "0.1", "0.1", "1234", |
| 184 | new ChassisId(i)); | 184 | new ChassisId(i)); |
| 185 | + deviceIds.add(id); | ||
| 185 | deviceProviderService.deviceConnected(id, desc); | 186 | deviceProviderService.deviceConnected(id, desc); |
| 186 | deviceProviderService.updatePorts(id, buildPorts(hostCount + infrastructurePorts)); | 187 | deviceProviderService.updatePorts(id, buildPorts(hostCount + infrastructurePorts)); |
| 187 | - deviceIds.add(id); | ||
| 188 | } | 188 | } |
| 189 | 189 | ||
| 190 | // /** | 190 | // /** |
| ... | @@ -287,10 +287,10 @@ public abstract class TopologySimulator { | ... | @@ -287,10 +287,10 @@ public abstract class TopologySimulator { |
| 287 | * Removes any devices previously advertised by this provider. | 287 | * Removes any devices previously advertised by this provider. |
| 288 | */ | 288 | */ |
| 289 | protected void removeDevices() { | 289 | protected void removeDevices() { |
| 290 | - prepareForDeviceEvents(deviceService.getDeviceCount()); | 290 | + prepareForDeviceEvents(deviceIds.size()); |
| 291 | - deviceService.getDevices() | 291 | + deviceIds.forEach(deviceProviderService::deviceDisconnected); |
| 292 | - .forEach(device -> deviceService.removeDevice(device.id())); | ||
| 293 | waitForDeviceEvents(); | 292 | waitForDeviceEvents(); |
| 293 | + deviceIds.clear(); | ||
| 294 | } | 294 | } |
| 295 | 295 | ||
| 296 | 296 | ||
| ... | @@ -358,6 +358,16 @@ public abstract class TopologySimulator { | ... | @@ -358,6 +358,16 @@ public abstract class TopologySimulator { |
| 358 | return ports; | 358 | return ports; |
| 359 | } | 359 | } |
| 360 | 360 | ||
| 361 | + /** | ||
| 362 | + * Indicates whether or not the simulation knows of this device. | ||
| 363 | + * | ||
| 364 | + * @param deviceId device identifier | ||
| 365 | + * @return true if device is known | ||
| 366 | + */ | ||
| 367 | + public boolean contains(DeviceId deviceId) { | ||
| 368 | + return deviceIds.contains(deviceId); | ||
| 369 | + } | ||
| 370 | + | ||
| 361 | // Counts down number of device added/available/removed events. | 371 | // Counts down number of device added/available/removed events. |
| 362 | private class DeviceEventCounter implements DeviceListener { | 372 | private class DeviceEventCounter implements DeviceListener { |
| 363 | @Override | 373 | @Override | ... | ... |
-
Please register or login to post a comment