@Override protected Observable<Void> repopulate(StateWithChannel newStateWithChannel) { final RegistryTracker previousState = getStateWithChannel().getState(); final RegistryTracker newState = newStateWithChannel.getState(); final ClientInterestChannel newChannel = newStateWithChannel.getChannel(); return Observable.create(new OnSubscribe<Void>() { @Override public void call(final Subscriber<? super Void> subscriber) { // Resubscribe Interest<InstanceInfo> activeInterests = new MultipleInterests<InstanceInfo>(previousState.interests.keySet()); newChannel.appendInterest(activeInterests).subscribe(); // Wait until registry fills up to the expected level. newState.registry.forInterest(activeInterests).lift( new RegistrySwapOperator(previousState.registry, newState.registry, swapStrategyFactory) ).subscribe(Subscribers.from(subscriber)); } }); }
@Override protected void release(StateWithChannel oldState) { oldState.getState().registry.shutdown(CHANNEL_FAILURE); }
@Override public Observable<Void> register(final InstanceInfo newInfo) { this.instanceInfo = newInfo; return getStateWithChannel().getChannel().register(instanceInfo); }
@Override protected StateWithChannel reestablish() { final RegistryTracker newState = new RegistryTracker(); final ClientInterestChannel newChannel = channelFactory.newInterestChannel(newState.registry); return new StateWithChannel(newChannel, newState); }
@Override public Observable<Void> appendInterest(Interest<InstanceInfo> toAppend) { StateWithChannel current = getStateWithChannel(); ClientInterestChannel currentChannel = current.getChannel(); RegistryTracker currentState = current.getState(); return currentChannel.appendInterest(toAppend) .doOnCompleted(currentState.createAppendInterestAction(toAppend)); }
@Override public EurekaClientRegistry<InstanceInfo> associatedRegistry() { return getStateWithChannel().getState().registry; }
@Override public Observable<Void> unregister() { instanceInfo = null; return getStateWithChannel().getChannel().unregister(); }
@Override protected Observable<Void> repopulate(StateWithChannel newState) { if (instanceInfo != null) { return newState.getChannel().register(instanceInfo); } return Observable.empty(); }
@Override protected StateWithChannel reestablish() { RegistrationChannel newChannel = channelFactory.call(); return new StateWithChannel(newChannel, null); }
@Override public Observable<Void> removeInterest(Interest<InstanceInfo> toRemove) { StateWithChannel current = getStateWithChannel(); ClientInterestChannel currentChannel = current.getChannel(); RegistryTracker currentState = current.getState(); return currentChannel.removeInterest(toRemove) .doOnCompleted(currentState.createRemoveInterestAction(toRemove)); }
@Override public Observable<Void> update(final InstanceInfo newInfo) { this.instanceInfo = newInfo; return getStateWithChannel().getChannel().update(newInfo); }