X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-distributed-datastore%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fcluster%2Fdatastore%2Fentityownership%2FEntityOwnershipShard.java;h=30fafbbb10f4e78b1a09f0a5c6ec2559a4d88bf3;hp=1f31d122cd271ac4824bb1d490c579233d1d51cd;hb=e04c7f93b0b614580c45318585f7709192465757;hpb=a05824023cb4f527ed38eacb78dda2ee1424a3ef diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/entityownership/EntityOwnershipShard.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/entityownership/EntityOwnershipShard.java index 1f31d122cd..30fafbbb10 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/entityownership/EntityOwnershipShard.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/entityownership/EntityOwnershipShard.java @@ -244,17 +244,23 @@ class EntityOwnershipShard extends Shard { protected void onStateChanged() { super.onStateChanged(); - commitCoordinator.onStateChanged(this, isLeader()); + boolean isLeader = isLeader(); + if(LOG.isDebugEnabled()) { + LOG.debug("{}: onStateChanged: isLeader: {}, hasLeader: {}", persistenceId(), isLeader, hasLeader()); + } + + commitCoordinator.onStateChanged(this, isLeader); } @Override protected void onLeaderChanged(String oldLeader, String newLeader) { super.onLeaderChanged(oldLeader, newLeader); + boolean isLeader = isLeader(); LOG.debug("{}: onLeaderChanged: oldLeader: {}, newLeader: {}, isLeader: {}", persistenceId(), oldLeader, - newLeader, isLeader()); + newLeader, isLeader); - if(isLeader()) { + if(isLeader) { // We were just elected leader. If the old leader is down, select new owners for the entities // owned by the down leader. @@ -265,6 +271,11 @@ class EntityOwnershipShard extends Shard { if(downPeerMemberNames.contains(oldLeaderMemberName)) { selectNewOwnerForEntitiesOwnedBy(oldLeaderMemberName); } + } else { + // The leader changed - notify the coordinator to check if pending modifications need to be sent. + // While onStateChanged also does this, this method handles the case where the shard hears from a + // leader and stays in the follower state. In that case no behavior state change occurs. + commitCoordinator.onStateChanged(this, isLeader); } } @@ -341,6 +352,11 @@ class EntityOwnershipShard extends Shard { peerIdToMemberNames.put(peerUp.getPeerId(), peerUp.getMemberName()); downPeerMemberNames.remove(peerUp.getMemberName()); + + // Notify the coordinator to check if pending modifications need to be sent. We do this here + // to handle the case where the leader's peer address isn't now yet when a prior state or + // leader change occurred. + commitCoordinator.onStateChanged(this, isLeader()); } private void selectNewOwnerForEntitiesOwnedBy(String owner) {