Class MembershipProtocol

java.lang.Object
com.loomcache.server.cluster.MembershipProtocol

public class MembershipProtocol extends Object
Protocol-level membership change tracking for cluster membership management.

Responsibilities:

  • Maintains cluster membership view with versioning
  • Processes membership events (join, leave, suspect, recover, leader change)
  • Implements gossip-based view dissemination (anti-entropy protocol)
  • Conflict resolution: higher version wins, ties broken by nodeId
  • Membership statistics tracking

Thread safety: Uses ReentrantReadWriteLock for membership view, CopyOnWriteArrayList for listeners.

Since:
1.0
  • Constructor Details

    • MembershipProtocol

      public MembershipProtocol(String nodeId, int instanceNumber)
  • Method Details

    • processEvent

      public void processEvent(MembershipProtocol.MembershipEvent event)
      Process a membership event and update the view accordingly.
      Parameters:
      event - the membership event to process
    • mergeView

      public boolean mergeView(MembershipProtocol.MembershipView remoteView)
      Merge a remote membership view via gossip protocol. Higher version wins. If versions are equal, compare by nodeId.
      Parameters:
      remoteView - the remote membership view
      Returns:
      true if the view was updated, false otherwise
    • getMembershipView

      public MembershipProtocol.MembershipView getMembershipView()
      Get the current membership view (snapshot).
      Returns:
      immutable copy of the current view
    • getActiveMemberCount

      public int getActiveMemberCount()
      Get count of active (UP) members.
      Returns:
      number of members in UP state
    • isMember

      public boolean isMember(String nodeId)
      Check if a node is a member of the cluster.
      Parameters:
      nodeId - the node ID to check
      Returns:
      true if the node is in the membership view
    • getLeader

      public @Nullable String getLeader()
      Get the current leader.
      Returns:
      the leader node ID, or null if no leader is currently known
    • registerListener

      public void registerListener(MembershipProtocol.MembershipListener listener)
      Register a membership event listener.
      Parameters:
      listener - the listener to register
    • unregisterListener

      public void unregisterListener(MembershipProtocol.MembershipListener listener)
      Unregister a membership event listener.
      Parameters:
      listener - the listener to unregister
    • recordGossipInteraction

      public void recordGossipInteraction(String peerId, long viewVersion)
      Record gossip interaction with a peer.
      Parameters:
      peerId - the peer node ID
      viewVersion - the peer's view version
    • getPeerViewVersion

      public long getPeerViewVersion(String peerId)
      Get gossip state for a peer.
      Parameters:
      peerId - the peer node ID
      Returns:
      the last known view version from this peer
    • getStats

      Get current membership statistics.
      Returns:
      membership statistics record
    • getMembersInState

      public Set<String> getMembersInState(MembershipProtocol.MembershipView.MemberState state)
      Get all members in a specific state.
      Parameters:
      state - the member state to filter by
      Returns:
      set of member IDs in the given state
    • resetStats

      protected void resetStats()
      Reset all statistics (for testing).