final long tempNewVersion = currentVersion + 1; final InstanceInfo tempNewInfo = new InstanceInfo.Builder() .withInstanceInfo(newInfo).withVersion(tempNewVersion).build();
@Override public Observable<Void> register(final InstanceInfo instanceInfo) { logger.debug("Replicated registry entry: {}", instanceInfo); if (STATES.Opened != state.get()) { return Observable.error(state.get() == STATES.Closed ? CHANNEL_CLOSED_EXCEPTION : IDLE_STATE_EXCEPTION); } if (replicationLoop) { return Observable.error(REPLICATION_LOOP_EXCEPTION); } if (instanceInfoById.containsKey(instanceInfo.getId())) { logger.info("Overwriting existing registration entry for instance {}", instanceInfo.getId()); } InstanceInfo tempNewInfo = new InstanceInfo.Builder() .withInstanceInfo(instanceInfo).withVersion(currentVersion++).build(); return registry.register(tempNewInfo, replicationSource) .ignoreElements() .cast(Void.class) .doOnCompleted(new Action0() { @Override public void call() { instanceInfoById.put(instanceInfo.getId(), instanceInfo); } }); }
@Override public Observable<Void> update(final InstanceInfo newInfo) { logger.debug("Updating existing registry entry. New info= {}", newInfo); if (STATES.Opened != state.get()) { return Observable.error(state.get() == STATES.Closed ? CHANNEL_CLOSED_EXCEPTION : IDLE_STATE_EXCEPTION); } if (replicationLoop) { return Observable.error(REPLICATION_LOOP_EXCEPTION); } InstanceInfo currentInfo = instanceInfoById.get(newInfo.getId()); if (currentInfo == null) { logger.info("Replication update request for non-existing entry {}; handling it as an initial registration", newInfo.getId()); return register(newInfo); } InstanceInfo tempNewInfo = new InstanceInfo.Builder() .withInstanceInfo(newInfo).withVersion(currentVersion++).build(); Set<Delta<?>> deltas = tempNewInfo.diffOlder(currentInfo); logger.debug("Set of InstanceInfo modified fields: {}", deltas); return registry.update(tempNewInfo, deltas, replicationSource) .ignoreElements() .cast(Void.class) .doOnCompleted(new Action0() { @Override public void call() { instanceInfoById.put(newInfo.getId(), newInfo); } }); }
.withInstanceInfo(instanceInfo).withVersion(tempNewVersion).build();
@Override public boolean matches(Object item) { if (!(item instanceof InstanceInfo)) { return false; } // Versions may be different InstanceInfo target = (InstanceInfo) item; if (!expectSameVersion) { target = new Builder() .withInstanceInfo(target) .withVersion(expectedValue.getVersion()) .build(); } return target.equals(expectedValue); }