if (!_isRunning) {
_changeLock.lock();
try {
final Instant now = Instant.now();
for (Map.Entry<ChangeProvider, VersionedSource> entry : _masterToSource.entrySet()) {
final ChangeProvider master = entry.getKey();
final VersionedSource source = entry.getValue();
final ChangeListener listener = new ChangeListener() {
@Override
public void entityChanged(ChangeEvent event) {
if (_watchSet.contains(event.getObjectId())) {
ViewProcessorManager.this.onMasterChanged(Instant.now(), source, event.getObjectId());
}
}
};
master.changeManager().addChangeListener(listener);
_masterToListener.put(master, listener);
s_logger.debug("Latching {} to {}", source, now);
// TODO this isn't ideal if there is clock drift between nodes - the time needs to be the system time at the master
source.setVersionCorrection(VersionCorrection.ofVersionAsOf(now)); // TODO ignores correction
}