Search in sources :

Example 1 with ALIVE

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();
}
Also used : ThreadFactoryBuilder(com.google.common.util.concurrent.ThreadFactoryBuilder) FailureDetector(io.scalecube.cluster.fdetector.FailureDetector) ScheduledFuture(java.util.concurrent.ScheduledFuture) Address(io.scalecube.transport.Address) LoggerFactory(org.slf4j.LoggerFactory) HashMap(java.util.HashMap) CompletableFuture(java.util.concurrent.CompletableFuture) AtomicReference(java.util.concurrent.atomic.AtomicReference) Observable(rx.Observable) ArrayList(java.util.ArrayList) HashSet(java.util.HashSet) ImmutableList(com.google.common.collect.ImmutableList) Map(java.util.Map) ThreadLocalRandom(java.util.concurrent.ThreadLocalRandom) Schedulers(rx.schedulers.Schedulers) ScheduledExecutorService(java.util.concurrent.ScheduledExecutorService) Transport(io.scalecube.transport.Transport) Message(io.scalecube.transport.Message) Subscribers(rx.observers.Subscribers) ClusterMath(io.scalecube.cluster.ClusterMath) GossipProtocol(io.scalecube.cluster.gossip.GossipProtocol) Logger(org.slf4j.Logger) Subscriber(rx.Subscriber) Collection(java.util.Collection) Set(java.util.Set) FailureDetectorEvent(io.scalecube.cluster.fdetector.FailureDetectorEvent) Scheduler(rx.Scheduler) DEAD(io.scalecube.cluster.membership.MemberStatus.DEAD) Subject(rx.subjects.Subject) Executors(java.util.concurrent.Executors) TimeUnit(java.util.concurrent.TimeUnit) List(java.util.List) ALIVE(io.scalecube.cluster.membership.MemberStatus.ALIVE) Member(io.scalecube.cluster.Member) Preconditions(com.google.common.base.Preconditions) PublishSubject(rx.subjects.PublishSubject) Collections(java.util.Collections) Member(io.scalecube.cluster.Member)

Aggregations

Preconditions (com.google.common.base.Preconditions)1 ImmutableList (com.google.common.collect.ImmutableList)1 ThreadFactoryBuilder (com.google.common.util.concurrent.ThreadFactoryBuilder)1 ClusterMath (io.scalecube.cluster.ClusterMath)1 Member (io.scalecube.cluster.Member)1 FailureDetector (io.scalecube.cluster.fdetector.FailureDetector)1 FailureDetectorEvent (io.scalecube.cluster.fdetector.FailureDetectorEvent)1 GossipProtocol (io.scalecube.cluster.gossip.GossipProtocol)1 ALIVE (io.scalecube.cluster.membership.MemberStatus.ALIVE)1 DEAD (io.scalecube.cluster.membership.MemberStatus.DEAD)1 Address (io.scalecube.transport.Address)1 Message (io.scalecube.transport.Message)1 Transport (io.scalecube.transport.Transport)1 ArrayList (java.util.ArrayList)1 Collection (java.util.Collection)1 Collections (java.util.Collections)1 HashMap (java.util.HashMap)1 HashSet (java.util.HashSet)1 List (java.util.List)1 Map (java.util.Map)1