Committed by
Gerrit Code Review
ONOS-1981: Move expensive work off of event loop thread
Change-Id: I200d9b727a7d501d5b055574ddb0907b8f4756a2
Showing
1 changed file
with
52 additions
and
42 deletions
... | @@ -613,56 +613,66 @@ public class DeviceManager | ... | @@ -613,56 +613,66 @@ public class DeviceManager |
613 | } | 613 | } |
614 | } | 614 | } |
615 | 615 | ||
616 | - // Intercepts mastership events | 616 | + private void handleMastershipEvent(MastershipEvent event) { |
617 | - private class InternalMastershipListener implements MastershipListener { | 617 | + if (event.type() != MastershipEvent.Type.MASTER_CHANGED) { |
618 | + // Don't care if backup list changed. | ||
619 | + return; | ||
620 | + } | ||
618 | 621 | ||
619 | - @Override | 622 | + final DeviceId did = event.subject(); |
620 | - public void event(MastershipEvent event) { | ||
621 | - if (event.type() != MastershipEvent.Type.MASTER_CHANGED) { | ||
622 | - // Don't care if backup list changed. | ||
623 | - return; | ||
624 | - } | ||
625 | 623 | ||
626 | - final DeviceId did = event.subject(); | 624 | + // myRole suggested by MastershipService |
627 | - | 625 | + MastershipRole myNextRole; |
628 | - // myRole suggested by MastershipService | 626 | + if (localNodeId.equals(event.roleInfo().master())) { |
629 | - MastershipRole myNextRole; | 627 | + // confirm latest info |
630 | - if (localNodeId.equals(event.roleInfo().master())) { | 628 | + MastershipTerm term = termService.getMastershipTerm(did); |
631 | - // confirm latest info | 629 | + final boolean iHaveControl = term != null && localNodeId.equals(term.master()); |
632 | - MastershipTerm term = termService.getMastershipTerm(did); | 630 | + if (iHaveControl) { |
633 | - final boolean iHaveControl = term != null && localNodeId.equals(term.master()); | 631 | + deviceClockProviderService.setMastershipTerm(did, term); |
634 | - if (iHaveControl) { | 632 | + myNextRole = MASTER; |
635 | - deviceClockProviderService.setMastershipTerm(did, term); | ||
636 | - myNextRole = MASTER; | ||
637 | - } else { | ||
638 | - myNextRole = STANDBY; | ||
639 | - } | ||
640 | - } else if (event.roleInfo().backups().contains(localNodeId)) { | ||
641 | - myNextRole = STANDBY; | ||
642 | } else { | 633 | } else { |
643 | - myNextRole = NONE; | 634 | + myNextRole = STANDBY; |
644 | } | 635 | } |
636 | + } else if (event.roleInfo().backups().contains(localNodeId)) { | ||
637 | + myNextRole = STANDBY; | ||
638 | + } else { | ||
639 | + myNextRole = NONE; | ||
640 | + } | ||
645 | 641 | ||
646 | 642 | ||
647 | - final boolean isReachable = isReachable(did); | 643 | + final boolean isReachable = isReachable(did); |
648 | - if (!isReachable) { | 644 | + if (!isReachable) { |
649 | - // device is not connected to this node | 645 | + // device is not connected to this node |
650 | - if (myNextRole != NONE) { | 646 | + if (myNextRole != NONE) { |
651 | - log.warn("Node was instructed to be {} role for {}, " | 647 | + log.warn("Node was instructed to be {} role for {}, " |
652 | - + "but this node cannot reach the device. " | 648 | + + "but this node cannot reach the device. " |
653 | - + "Relinquishing role. ", | 649 | + + "Relinquishing role. ", |
654 | - myNextRole, did); | 650 | + myNextRole, did); |
655 | - mastershipService.relinquishMastership(did); | 651 | + mastershipService.relinquishMastership(did); |
656 | - } | ||
657 | - return; | ||
658 | } | 652 | } |
653 | + return; | ||
654 | + } | ||
659 | 655 | ||
660 | - // device is connected to this node: | 656 | + // device is connected to this node: |
661 | - if (store.getDevice(did) != null) { | 657 | + if (store.getDevice(did) != null) { |
662 | - reassertRole(did, myNextRole); | 658 | + reassertRole(did, myNextRole); |
663 | - } else { | 659 | + } else { |
664 | - log.debug("Device is not yet/no longer in the store: {}", did); | 660 | + log.debug("Device is not yet/no longer in the store: {}", did); |
665 | - } | 661 | + } |
662 | + } | ||
663 | + | ||
664 | + // Intercepts mastership events | ||
665 | + private class InternalMastershipListener implements MastershipListener { | ||
666 | + | ||
667 | + @Override | ||
668 | + public void event(MastershipEvent event) { | ||
669 | + backgroundService.submit(() -> { | ||
670 | + try { | ||
671 | + handleMastershipEvent(event); | ||
672 | + } catch (Exception e) { | ||
673 | + log.warn("Failed to handle {}", event, e); | ||
674 | + } | ||
675 | + }); | ||
666 | } | 676 | } |
667 | } | 677 | } |
668 | 678 | ... | ... |
-
Please register or login to post a comment