Index: oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/observation/ChangeProcessor.java =================================================================== --- oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/observation/ChangeProcessor.java (revision 1710279) +++ oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/observation/ChangeProcessor.java (working copy) @@ -108,7 +108,16 @@ private final int queueLength; private final CommitRateLimiter commitRateLimiter; + /** + * Lazy initialization via the {@link #start(Whiteboard)} method + */ + private String listenerId; + + /** + * Lazy initialization via the {@link #start(Whiteboard)} method + */ private CompositeRegistration registration; + private volatile NodeState previousRoot; public ChangeProcessor( @@ -150,7 +159,8 @@ final WhiteboardExecutor executor = new WhiteboardExecutor(); executor.start(whiteboard); final BackgroundObserver observer = createObserver(executor); - Map attrs = ImmutableMap.of(LISTENER_ID, String.valueOf(COUNTER.incrementAndGet())); + listenerId = COUNTER.incrementAndGet() + ""; + Map attrs = ImmutableMap.of(LISTENER_ID, listenerId); String name = tracker.toString(); registration = new CompositeRegistration( registerObserver(whiteboard, observer), @@ -417,4 +427,17 @@ return !wasStopped; } } + + @Override + public String toString() { + return "ChangeProcessor [" + + "listenerId=" + listenerId + + ", tracker=" + tracker + + ", contentSession=" + contentSession + + ", filterProvider=" + filterProvider + + ", eventCount=" + eventCount + + ", eventDuration=" + eventDuration + + ", commitRateLimiter=" + commitRateLimiter + + ", running=" + running.isSatisfied() + "]"; + } } Index: oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/observation/ObservationManagerImpl.java =================================================================== --- oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/observation/ObservationManagerImpl.java (revision 1710279) +++ oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/observation/ObservationManagerImpl.java (working copy) @@ -335,8 +335,12 @@ private static void stop(ChangeProcessor processor) { if (!processor.stopAndWait(STOP_TIME_OUT, MILLISECONDS)) { - LOG.warn(OBSERVATION, "Timed out waiting for change processor to stop after " + - STOP_TIME_OUT + " milliseconds. Falling back to asynchronous stop."); + LOG.warn( + OBSERVATION, + "Timed out waiting for change processor to stop after " + + STOP_TIME_OUT + + " milliseconds. Falling back to asynchronous stop on " + + processor); processor.stop(); } }