Skip to content

Commit

Permalink
Only gossip with passive cluster members regardless of the local memb…
Browse files Browse the repository at this point in the history
…er type.
  • Loading branch information
kuujo committed Jan 23, 2015
1 parent d2082fe commit fe86c04
Showing 1 changed file with 6 additions and 11 deletions.
17 changes: 6 additions & 11 deletions core/src/main/java/net/kuujo/copycat/internal/PassiveState.java
Expand Up @@ -67,29 +67,24 @@ private void sync() {
context.checkThread(); context.checkThread();
if (isClosed()) return; if (isClosed()) return;


// Create a list of currently active members. // Create a list of passive members.
List<ReplicaInfo> activeMembers = new ArrayList<>(context.getMembers().size()); List<ReplicaInfo> passiveMembers = new ArrayList<>(context.getMembers().size());
for (String uri : context.getMembers()) { for (String uri : context.getMembers()) {
if (!uri.equals(context.getLocalMember())) { if (!uri.equals(context.getLocalMember()) && !context.getActiveMembers().contains(uri)) {
ReplicaInfo member = context.getMemberInfo(uri); ReplicaInfo member = context.getMemberInfo(uri);
if (member == null) { if (member == null) {
member = new ReplicaInfo(uri); member = new ReplicaInfo(uri);
context.addMemberInfo(member); context.addMemberInfo(member);
} }
// If the local node is an active member of the cluster, only gossip with passive members. If the local node passiveMembers.add(member);
// is a passive member of the cluster, gossip with both active and passive members.
if ((context.getActiveMembers().contains(context.getLocalMember()) && !context.getActiveMembers().contains(member.getUri()))
|| !context.getActiveMembers().contains(context.getLocalMember())) {
activeMembers.add(member);
}
} }
} }


// Create a random list of three active members. // Create a random list of three active members.
Random random = new Random(); Random random = new Random();
List<ReplicaInfo> randomMembers = new ArrayList<>(3); List<ReplicaInfo> randomMembers = new ArrayList<>(3);
for (int i = 0; i < Math.min(activeMembers.size(), 3); i++) { for (int i = 0; i < Math.min(passiveMembers.size(), 3); i++) {
randomMembers.add(activeMembers.get(random.nextInt(Math.min(activeMembers.size(), 3)))); randomMembers.add(passiveMembers.get(random.nextInt(Math.min(passiveMembers.size(), 3))));
} }


// Increment the local member version in the vector clock. // Increment the local member version in the vector clock.
Expand Down

0 comments on commit fe86c04

Please sign in to comment.