This is an automated email from the ASF dual-hosted git repository.

cschneider pushed a commit to branch master
in repository 
https://gitbox.apache.org/repos/asf/sling-org-apache-sling-distribution-journal.git


The following commit(s) were added to refs/heads/master by this push:
     new 02b548b  SLING-8944 - Start in idle status to make sure we become 
ready if no activity happens
02b548b is described below

commit 02b548be9a0d49928de633c650a04e982659f948
Author: Christian Schneider <[email protected]>
AuthorDate: Tue Jan 21 09:58:39 2020 +0100

    SLING-8944 - Start in idle status to make sure we become ready if no 
activity happens
---
 .../journal/impl/subscriber/SubscriberIdle.java             | 13 +++++++++----
 .../journal/impl/subscriber/SubscriberIdleTest.java         | 10 ++++++++++
 2 files changed, 19 insertions(+), 4 deletions(-)

diff --git 
a/src/main/java/org/apache/sling/distribution/journal/impl/subscriber/SubscriberIdle.java
 
b/src/main/java/org/apache/sling/distribution/journal/impl/subscriber/SubscriberIdle.java
index 784c33d..250ffda 100644
--- 
a/src/main/java/org/apache/sling/distribution/journal/impl/subscriber/SubscriberIdle.java
+++ 
b/src/main/java/org/apache/sling/distribution/journal/impl/subscriber/SubscriberIdle.java
@@ -50,6 +50,7 @@ public class SubscriberIdle implements SystemReadyCheck, 
Closeable {
     public SubscriberIdle(BundleContext context, int idleMillis) {
         this.idleMillis = idleMillis;
         executor = Executors.newScheduledThreadPool(1);
+        idle();
         this.reg = context.registerService(SystemReadyCheck.class, this, new 
Hashtable<>());
     }
     
@@ -68,9 +69,7 @@ public class SubscriberIdle implements SystemReadyCheck, 
Closeable {
      * Called when processing of a message starts
      */
     public synchronized void busy() {
-        if (schedule != null) {
-            schedule.cancel(false);
-        }
+        cancelSchedule();
     }
 
     /**
@@ -78,11 +77,17 @@ public class SubscriberIdle implements SystemReadyCheck, 
Closeable {
      */
     public synchronized void idle() {
         if (!isReady.get()) {
-            busy();
+            cancelSchedule();
             schedule = executor.schedule(this::ready, idleMillis, 
TimeUnit.MILLISECONDS);
         }
     }
     
+    private void cancelSchedule() {
+        if (schedule != null) {
+            schedule.cancel(false);
+        }
+    }
+
     private void ready() {
         isReady.set(true);
     }
diff --git 
a/src/test/java/org/apache/sling/distribution/journal/impl/subscriber/SubscriberIdleTest.java
 
b/src/test/java/org/apache/sling/distribution/journal/impl/subscriber/SubscriberIdleTest.java
index a424671..ef5f0d7 100644
--- 
a/src/test/java/org/apache/sling/distribution/journal/impl/subscriber/SubscriberIdleTest.java
+++ 
b/src/test/java/org/apache/sling/distribution/journal/impl/subscriber/SubscriberIdleTest.java
@@ -51,6 +51,16 @@ public class SubscriberIdleTest {
         assertState("State should not be reset once it reached GREEN", 
State.GREEN);
         idle.close();
     }
+    
+    @Test
+    public void testStartIdle() throws InterruptedException {
+        BundleContext context = Mockito.mock(BundleContext.class);
+        idle = new SubscriberIdle(context , IDLE_MILLIES);
+        assertState("Initial state", State.RED);
+        Thread.sleep(IDLE_MILLIES * 2);
+        assertState("State after time over idle limit", State.GREEN);
+        idle.close();
+    }
 
     private void assertState(String message, State expectedState) {
         assertThat(message, idle.getStatus().getState(), 
equalTo(expectedState));

Reply via email to