Code Review
/
controller.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
review
|
tree
raw
|
inline
| side by side
Bug 2187: EOS shard recovery after AddShardReplica
[controller.git]
/
opendaylight
/
md-sal
/
sal-distributed-datastore
/
src
/
main
/
java
/
org
/
opendaylight
/
controller
/
cluster
/
datastore
/
entityownership
/
EntityOwnershipShard.java
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 1f31d122cd271ac4824bb1d490c579233d1d51cd..30fafbbb10f4e78b1a09f0a5c6ec2559a4d88bf3 100644
(file)
--- 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();
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);
}
@Override
protected void onLeaderChanged(String oldLeader, String newLeader) {
super.onLeaderChanged(oldLeader, newLeader);
+ boolean isLeader = isLeader();
LOG.debug("{}: onLeaderChanged: oldLeader: {}, newLeader: {}, isLeader: {}", persistenceId(), oldLeader,
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.
// 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);
}
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());
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) {
}
private void selectNewOwnerForEntitiesOwnedBy(String owner) {