Uploaded image for project: 'JBoss Cache'
  1. JBoss Cache
  2. JBCACHE-1549

Buddy pool tracking when 2nd to last member leaves group

    Details

      Description

      If you have a 2 node cluster with buddy replication, and you restart one node, that node does not receive a state transfer. See forum thread for details of the exact symptoms.

      Problem is this in BuddyManager$AsyncViewHandlerThread.handleEnqueuedViewChange():

      // there is a strange case where JGroups issues view changes and just includes self in new views, and then
      // quickly corrects it. Happens intermittently on some unit tests. If this is such a case, please ignore.
      if (members.newMembers.size() == 1 && members.newMembers.get(0).equals(cache.getLocalAddress()))

      { log.info("Ignoring membership change event since it only contains self."); return; }

      Problem is the if condition is always true when the 2nd to last member leaves the group, but returning leaves the last member in a state where it thinks the next to last member is still a buddy. When that node restarts and rejoins the group, the reassign buddies logic sees that the new member is already a buddy and returns without pushing state.

        Gliffy Diagrams

          Attachments

            Issue Links

              Activity

                People

                • Assignee:
                  brian.stansberry Brian Stansberry
                  Reporter:
                  brian.stansberry Brian Stansberry
                • Votes:
                  0 Vote for this issue
                  Watchers:
                  0 Start watching this issue

                  Dates

                  • Created:
                    Updated:
                    Resolved: