private synchronized void setRoot(NodeState root, CommitInfo info) { this.root.getAndSet(root); for (Observer observer : observers.values()) { observer.contentChanged(root, info); } }
private synchronized void setRoot(NodeState root, CommitInfo info) { this.root.getAndSet(root); for (Observer observer : observers.values()) { observer.contentChanged(root, info); } }
@Override public synchronized void contentChanged( @Nonnull NodeState root, @Nonnull CommitInfo info) { checkNotNull(root); for (Observer observer : observers) { observer.contentChanged(root, info); } }
@Override public synchronized void contentChanged( @NotNull NodeState root, @NotNull CommitInfo info) { checkNotNull(root); for (Observer observer : observers) { observer.contentChanged(root, info); } }
@Override public void contentChanged(@NotNull NodeState root, @NotNull CommitInfo info) { //TODO Optimize for the case where new async index update is detected. Then //existing items in queue should not be processed //We need to only pass on included changes. Not using FilteringAwareObserver //As here the filtering logic only relies on CommitContext and not concerned //with before state if (!filter.excludes(root, info)) { delegate.contentChanged(root, info); } } }
@Override public void contentChanged(@NotNull NodeState root, @NotNull CommitInfo info) { //TODO Optimize for the case where new async index update is detected. Then //existing items in queue should not be processed //We need to only pass on included changes. Not using FilteringAwareObserver //As here the filtering logic only relies on CommitContext and not concerned //with before state if (!filter.excludes(root, info)) { delegate.contentChanged(root, info); } } }
@Override public Closeable addObserver(Observer observer) { observer.contentChanged(getRoot(), CommitInfo.EMPTY_EXTERNAL); observers.add(observer); return () -> observers.remove(observer); }
@Override public Closeable addObserver(Observer observer) { observer.contentChanged(getRoot(), CommitInfo.EMPTY_EXTERNAL); observers.add(observer); return () -> observers.remove(observer); }
@Override public Closeable addObserver(Observer observer) { observer.contentChanged(getRoot(), CommitInfo.EMPTY_EXTERNAL); observers.add(observer); return () -> observers.remove(observer); }
@Override public synchronized Closeable addObserver(Observer observer) { observer.contentChanged(getRoot(), CommitInfo.EMPTY_EXTERNAL); Closeable closeable = new Closeable() { @Override public void close() throws IOException { synchronized (MemoryNodeStore.this) { observers.remove(this); } } }; observers.put(closeable, observer); return closeable; }
@Override public synchronized Closeable addObserver(Observer observer) { observer.contentChanged(getRoot(), CommitInfo.EMPTY_EXTERNAL); Closeable closeable = new Closeable() { @Override public void close() throws IOException { synchronized (MemoryNodeStore.this) { observers.remove(this); } } }; observers.put(closeable, observer); return closeable; }
/** * Register a new {@link Observer} for receiving notifications about changes reported to * this change dispatcher. Changes are reported synchronously and clients need to ensure * to no block any length of time (e.g. by relaying through a {@link BackgroundObserver}). * <p> * Clients need to call {@link java.io.Closeable#close()} close} on the returned * {@code Closeable} instance to stop receiving notifications. * * @return a {@link Closeable} instance */ @Override @NotNull public synchronized Closeable addObserver(final Observer observer) { observer.contentChanged(root, CommitInfo.EMPTY_EXTERNAL); observers.addObserver(observer); return new Closeable() { @Override public void close() { observers.removeObserver(observer); } }; }
/** * Register a new {@link Observer} for receiving notifications about changes reported to * this change dispatcher. Changes are reported synchronously and clients need to ensure * to no block any length of time (e.g. by relaying through a {@link BackgroundObserver}). * <p> * Clients need to call {@link java.io.Closeable#close()} close} on the returned * {@code Closeable} instance to stop receiving notifications. * * @return a {@link Closeable} instance */ @Override @Nonnull public synchronized Closeable addObserver(final Observer observer) { observer.contentChanged(root, CommitInfo.EMPTY_EXTERNAL); observers.addObserver(observer); return new Closeable() { @Override public void close() { observers.removeObserver(observer); } }; }
public void enableCopyOnWrite() throws CommitFailedException { BranchNodeStore branchStore = new BranchNodeStore(store); NodeBuilder b = branchStore.getRoot().builder(); b.setProperty(":cow", true); branchStore.merge(b, EmptyHook.INSTANCE, CommitInfo.EMPTY); branchStore.addObserver((root, info) -> observers.stream().forEach(o -> o.contentChanged(root, info))); this.branchStore = branchStore; }
public void enableCopyOnWrite() throws CommitFailedException { BranchNodeStore branchStore = new BranchNodeStore(store); NodeBuilder b = branchStore.getRoot().builder(); b.setProperty(":cow", true); branchStore.merge(b, EmptyHook.INSTANCE, CommitInfo.EMPTY); branchStore.addObserver((root, info) -> observers.stream().forEach(o -> o.contentChanged(root, info))); this.branchStore = branchStore; }
public void enableCopyOnWrite() throws CommitFailedException { BranchNodeStore branchStore = new BranchNodeStore(store); NodeBuilder b = branchStore.getRoot().builder(); b.setProperty(":cow", true); branchStore.merge(b, EmptyHook.INSTANCE, CommitInfo.EMPTY); branchStore.addObserver((root, info) -> observers.stream().forEach(o -> o.contentChanged(root, info))); this.branchStore = branchStore; }
@Test public void builder() throws Exception{ ExternalObserverBuilder builder = new ExternalObserverBuilder(queue, tracker,NOOP, MoreExecutors.sameThreadExecutor(), 10); Observer o = builder.build(); o.contentChanged(INITIAL_CONTENT, CommitInfo.EMPTY_EXTERNAL); verifyZeroInteractions(queue); }
private static void contentChanged(Observer observer, long value) { NodeState node = EMPTY_NODE.builder().setProperty("p", value).getNodeState(); observer.contentChanged(node, COMMIT_INFO); }
private static void done(Observer observer) { NodeState node = EMPTY_NODE.builder().setProperty("done", true).getNodeState(); observer.contentChanged(node, COMMIT_INFO); }
private void assertIndexing(Observer observer){ Multimap<String, String> indexedPaths = HashMultimap.create(); indexedPaths.put("/a", "/oak:index/foo"); commitContext.set(LuceneDocumentHolder.NAME, new IndexedPaths(indexedPaths)); CommitInfo ci = newCommitInfo(); when(queue.add(any(LuceneDoc.class))).thenReturn(true); when(tracker.getIndexDefinition("/oak:index/foo")).thenReturn(createNRTIndex("nt:base")); NodeBuilder nb = INITIAL_CONTENT.builder(); nb.child("a").setProperty("foo", "bar"); observer.contentChanged(nb.getNodeState(), ci); ArgumentCaptor<LuceneDoc> doc = ArgumentCaptor.forClass(LuceneDoc.class); verify(queue).add(doc.capture()); assertEquals("/oak:index/foo", doc.getValue().getIndexPath()); }