@Override public Observable<ReplicationHelloReply> hello(ReplicationHello hello) { operations.add(hello); return delegate.hello(hello); }
@Override public Observable<Void> call(final ReplicationChannel replicationChannel) { return replicationChannel.hello(new ReplicationHello(ownInstanceId, registry.size())) .take(1) .map(new Func1<ReplicationHelloReply, ReplicationChannel>() { @Override public ReplicationChannel call(ReplicationHelloReply replicationHelloReply) { if (replicationHelloReply.getSourceId().equals(ownInstanceId)) { logger.info("{}: Taking out replication connection to itself", ownInstanceId); replicationChannel.close(); // gracefully close return null; } else { logger.info("{} received hello back from {}", ownInstanceId, replicationHelloReply.getSourceId()); return replicationChannel; } } }) .filter(new Func1<ReplicationChannel, Boolean>() { @Override public Boolean call(ReplicationChannel channel) { return channel != null; } }) .concatMap(new ReplicateFunc(registry)); } });