@Override public Observable<InstanceInfo> resolve() { if (connected.compareAndSet(false, true)) { return connect(); } return replaySubject; }
@PostConstruct public void addToLocalRegistry() { resolve().subscribe(new Action1<InstanceInfo>() { @Override public void call(InstanceInfo instanceInfo) { logger.info("Self registration with instance info {}", instanceInfo); eurekaRegistry.register(instanceInfo); } }); }
@Override public Observable<ReplicationHelloReply> hello(final ReplicationHello hello) { logger.debug("Replication hello message: {}", hello); if (!state.compareAndSet(STATES.Idle, STATES.Opened)) { return Observable.error(state.get() == STATES.Closed ? CHANNEL_CLOSED_EXCEPTION : HANDSHAKE_FINISHED_EXCEPTION); } metrics.stateTransition(STATES.Idle, STATES.Opened); replicationSource = Source.replicationSource(hello.getSourceId()); return selfRegistrationService.resolve().flatMap(new Func1<InstanceInfo, Observable<ReplicationHelloReply>>() { @Override public Observable<ReplicationHelloReply> call(InstanceInfo instanceInfo) { replicationLoop = instanceInfo.getId().equals(hello.getSourceId()); ReplicationHelloReply reply = new ReplicationHelloReply(instanceInfo.getId(), false); sendOnTransport(reply); return Observable.just(reply); } }); }