use of io.scalecube.cluster.membership.MemberStatus.ALIVE in project scalecube by scalecube.
the class MembershipProtocolImpl method start.
/**
* Starts running cluster membership protocol. After started it begins to receive and send cluster membership messages
*/
public CompletableFuture<Void> start() {
// Init membership table with local member record
Member member = memberRef.get();
MembershipRecord localMemberRecord = new MembershipRecord(member, ALIVE, 0);
membershipTable.put(member.id(), localMemberRecord);
// Listen to incoming SYNC requests from other members
onSyncRequestSubscriber = Subscribers.create(this::onSync, this::onError);
transport.listen().observeOn(scheduler).filter(msg -> SYNC.equals(msg.qualifier())).filter(this::checkSyncGroup).subscribe(onSyncRequestSubscriber);
// Listen to incoming SYNC ACK responses from other members
onSyncAckResponseSubscriber = Subscribers.create(this::onSyncAck, this::onError);
transport.listen().observeOn(scheduler).filter(msg -> SYNC_ACK.equals(msg.qualifier())).filter(// filter out initial sync
msg -> msg.correlationId() == null).filter(this::checkSyncGroup).subscribe(onSyncAckResponseSubscriber);
// Listen to events from failure detector
onFdEventSubscriber = Subscribers.create(this::onFailureDetectorEvent, this::onError);
failureDetector.listen().observeOn(scheduler).subscribe(onFdEventSubscriber);
// Listen to membership gossips
onGossipRequestSubscriber = Subscribers.create(this::onMembershipGossip, this::onError);
gossipProtocol.listen().observeOn(scheduler).filter(msg -> MEMBERSHIP_GOSSIP.equals(msg.qualifier())).subscribe(onGossipRequestSubscriber);
// Make initial sync with all seed members
return doInitialSync();
}
Aggregations