Fix the side effects introduced by https://gerrit.onosproject.org/#/c/10978/
Change-Id: I88f84f28d9c5243c6ce42c81914b0f87e41bbd3e
Showing
1 changed file
with
28 additions
and
2 deletions
| ... | @@ -253,12 +253,38 @@ public class FlowObjectiveManager implements FlowObjectiveService { | ... | @@ -253,12 +253,38 @@ public class FlowObjectiveManager implements FlowObjectiveService { |
| 253 | return queued; | 253 | return queued; |
| 254 | } | 254 | } |
| 255 | 255 | ||
| 256 | - // Retrieves the device pipeline behaviour from the cache. | 256 | + /** |
| 257 | + * Retrieves (if it exists) the device pipeline behaviour from the cache. | ||
| 258 | + * Otherwise it warms the caches and triggers the init method of the Pipeline. | ||
| 259 | + * | ||
| 260 | + * @param deviceId the id of the device associated to the pipeline | ||
| 261 | + * @return the implementation of the Pipeliner behaviour | ||
| 262 | + */ | ||
| 257 | private Pipeliner getDevicePipeliner(DeviceId deviceId) { | 263 | private Pipeliner getDevicePipeliner(DeviceId deviceId) { |
| 258 | return pipeliners.computeIfAbsent(deviceId, this::initPipelineHandler); | 264 | return pipeliners.computeIfAbsent(deviceId, this::initPipelineHandler); |
| 259 | } | 265 | } |
| 260 | 266 | ||
| 261 | /** | 267 | /** |
| 268 | + * Retrieves (if it exists) the device pipeline behaviour from the cache and | ||
| 269 | + * and triggers the init method of the pipeline. Otherwise (DEVICE_ADDED) it warms | ||
| 270 | + * the caches and triggers the init method of the Pipeline. The rationale of this | ||
| 271 | + * method is for managing the scenario of a switch that goes down for a failure | ||
| 272 | + * and goes up after a while. | ||
| 273 | + * | ||
| 274 | + * @param deviceId the id of the device associated to the pipeline | ||
| 275 | + * @return the implementation of the Pipeliner behaviour | ||
| 276 | + */ | ||
| 277 | + private Pipeliner getAndInitDevicePipeliner(DeviceId deviceId) { | ||
| 278 | + return pipeliners.compute(deviceId, (deviceIdValue, pipelinerValue) -> { | ||
| 279 | + if (pipelinerValue != null) { | ||
| 280 | + pipelinerValue.init(deviceId, context); | ||
| 281 | + return pipelinerValue; | ||
| 282 | + } | ||
| 283 | + return this.initPipelineHandler(deviceId); | ||
| 284 | + }); | ||
| 285 | + } | ||
| 286 | + | ||
| 287 | + /** | ||
| 262 | * Creates and initialize {@link Pipeliner}. | 288 | * Creates and initialize {@link Pipeliner}. |
| 263 | * <p> | 289 | * <p> |
| 264 | * Note: Expected to be called under per-Device lock. | 290 | * Note: Expected to be called under per-Device lock. |
| ... | @@ -315,7 +341,7 @@ public class FlowObjectiveManager implements FlowObjectiveService { | ... | @@ -315,7 +341,7 @@ public class FlowObjectiveManager implements FlowObjectiveService { |
| 315 | event.subject().id()); | 341 | event.subject().id()); |
| 316 | if (deviceService.isAvailable(event.subject().id())) { | 342 | if (deviceService.isAvailable(event.subject().id())) { |
| 317 | log.debug("Device is now available {}", event.subject().id()); | 343 | log.debug("Device is now available {}", event.subject().id()); |
| 318 | - getDevicePipeliner(event.subject().id()); | 344 | + getAndInitDevicePipeliner(event.subject().id()); |
| 319 | } else { | 345 | } else { |
| 320 | log.debug("Device is no longer available {}", event.subject().id()); | 346 | log.debug("Device is no longer available {}", event.subject().id()); |
| 321 | } | 347 | } | ... | ... |
-
Please register or login to post a comment