SLING-8944 - Start in idle status to make sure we become ready if no activity happens
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 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 @@
      * Called when processing of a message starts
      */
     public synchronized void busy() {
-        if (schedule != null) {
-            schedule.cancel(false);
-        }
+        cancelSchedule();
     }
 
     /**
@@ -78,11 +77,17 @@
      */
     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 @@
         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));