SLING-12288 - Allow configuration of timeouts for SubscriberReady check (#139)
diff --git a/src/main/java/org/apache/sling/distribution/journal/impl/subscriber/DistributionSubscriber.java b/src/main/java/org/apache/sling/distribution/journal/impl/subscriber/DistributionSubscriber.java
index 170eeb0..f9fc84f 100644
--- a/src/main/java/org/apache/sling/distribution/journal/impl/subscriber/DistributionSubscriber.java
+++ b/src/main/java/org/apache/sling/distribution/journal/impl/subscriber/DistributionSubscriber.java
@@ -169,7 +169,6 @@
requireNonNull(precondition);
requireNonNull(bookKeeperFactory);
- long idleMillies = getLong(properties, SubscriberReady.DEFAULT_IDLE_TIME_MILLIS);
if (config.editable()) {
commandPoller = new CommandPoller(messagingProvider, topics, subSlingId, subAgentName, delay::signal);
}
@@ -177,7 +176,7 @@
if (config.subscriberIdleCheck()) {
AtomicBoolean readyHolder = subscriberReadyStore.getReadyHolder(subAgentName);
- idleCheck = new SubscriberReady(subAgentName, idleMillies, SubscriberReady.DEFAULT_FORCE_IDLE_MILLIS, readyHolder, System::currentTimeMillis);
+ idleCheck = new SubscriberReady(subAgentName, config.idleMillies(), config.forceReadyMillies(), readyHolder, System::currentTimeMillis);
idleReadyCheck = new SubscriberIdleCheck(context, idleCheck);
} else {
idleCheck = new NoopIdle();
@@ -218,10 +217,6 @@
queueNames, config.subscriberIdleCheck());
}
- private long getLong(Map<String, Object> properties, long defaultValue) {
- return Long.parseLong(properties.getOrDefault("idleMillies", Long.valueOf(defaultValue)).toString());
- }
-
public static String escapeTopicName(URI messagingUri, String topicName) {
return String.format("%s%s_%s",
messagingUri.getHost(),
diff --git a/src/main/java/org/apache/sling/distribution/journal/impl/subscriber/SubscriberConfiguration.java b/src/main/java/org/apache/sling/distribution/journal/impl/subscriber/SubscriberConfiguration.java
index fc2aa48..ca0fb65 100644
--- a/src/main/java/org/apache/sling/distribution/journal/impl/subscriber/SubscriberConfiguration.java
+++ b/src/main/java/org/apache/sling/distribution/journal/impl/subscriber/SubscriberConfiguration.java
@@ -58,4 +58,10 @@
@AttributeDefinition(name = "ContentPackageExtractor.overwritePrimaryTypesOfFolders", description = "The flag determines whether the primary node types of folders should be overwritten during content package extraction, with a default value of 'true'.")
boolean contentPackageExtractorOverwritePrimaryTypesOfFolders() default true;
+
+ @AttributeDefinition(description = "Number of ms being idle before reporting ready.")
+ int idleMillies() default 10 * 1000;
+
+ @AttributeDefinition(description = "Number of ms to force subscriber reporting idle.")
+ int forceReadyMillies() default 300 * 1000;
}
diff --git a/src/main/java/org/apache/sling/distribution/journal/impl/subscriber/SubscriberReady.java b/src/main/java/org/apache/sling/distribution/journal/impl/subscriber/SubscriberReady.java
index 0e8edd7..bb376da 100644
--- a/src/main/java/org/apache/sling/distribution/journal/impl/subscriber/SubscriberReady.java
+++ b/src/main/java/org/apache/sling/distribution/journal/impl/subscriber/SubscriberReady.java
@@ -20,7 +20,6 @@
import static java.util.concurrent.TimeUnit.MILLISECONDS;
import static java.util.concurrent.TimeUnit.MINUTES;
-import static java.util.concurrent.TimeUnit.SECONDS;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
@@ -43,8 +42,6 @@
* After becoming ready once, the check stays ready.
*/
public class SubscriberReady implements IdleCheck {
- public static final long DEFAULT_IDLE_TIME_MILLIS = SECONDS.toMillis(10);
- public static final long DEFAULT_FORCE_IDLE_MILLIS = MINUTES.toMillis(5);
public static final long ACCEPTABLE_AGE_DIFF_MS = MINUTES.toMillis(2);
public static final int MAX_RETRIES = 10;