Device Mastership
try to fix Masteship recognition mismatch when MastershipEvent suggest different view. Change-Id: If1aba3d330978c48e8c4053fb47f4d149d57966e
Showing
1 changed file
with
29 additions
and
0 deletions
| ... | @@ -452,6 +452,35 @@ public class DeviceManager | ... | @@ -452,6 +452,35 @@ public class DeviceManager |
| 452 | return; | 452 | return; |
| 453 | } | 453 | } |
| 454 | applyRole(did, MastershipRole.STANDBY); | 454 | applyRole(did, MastershipRole.STANDBY); |
| 455 | + } else { | ||
| 456 | + // Event suggests that this Node has no connection to this Device | ||
| 457 | + // confirm. | ||
| 458 | + final Device device = getDevice(did); | ||
| 459 | + if (!isReachable(device)) { | ||
| 460 | + // not connection to device, as expected | ||
| 461 | + return; | ||
| 462 | + } | ||
| 463 | + // connection seems to exist | ||
| 464 | + log.info("Detected mastership info mismatch, requesting Role"); | ||
| 465 | + mastershipService.requestRoleFor(did); | ||
| 466 | + final MastershipTerm term = termService.getMastershipTerm(did); | ||
| 467 | + if (myNodeId.equals(term.master())) { | ||
| 468 | + // became MASTER | ||
| 469 | + // TODO: consider slicing out method for applying MASTER role | ||
| 470 | + deviceClockProviderService.setMastershipTerm(did, term); | ||
| 471 | + | ||
| 472 | + //flag the device as online. Is there a better way to do this? | ||
| 473 | + DeviceEvent devEvent = | ||
| 474 | + store.createOrUpdateDevice(device.providerId(), did, | ||
| 475 | + new DefaultDeviceDescription( | ||
| 476 | + did.uri(), device.type(), device.manufacturer(), | ||
| 477 | + device.hwVersion(), device.swVersion(), | ||
| 478 | + device.serialNumber(), device.chassisId())); | ||
| 479 | + applyRole(did, MastershipRole.MASTER); | ||
| 480 | + post(devEvent); | ||
| 481 | + } else { | ||
| 482 | + applyRole(did, MastershipRole.STANDBY); | ||
| 483 | + } | ||
| 455 | } | 484 | } |
| 456 | } | 485 | } |
| 457 | 486 | ... | ... |
-
Please register or login to post a comment