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));