You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by st...@apache.org on 2022/10/12 16:25:13 UTC
[sling-org-apache-sling-discovery-oak] 01/01: SLING-11619 : safeguard backoff factors config
This is an automated email from the ASF dual-hosted git repository.
stefanegli pushed a commit to branch SLING-11619
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-discovery-oak.git
commit efc3d63e2b9741151e1a1ae8ef5182e1c9505ef4
Author: Stefan Egli <st...@apache.org>
AuthorDate: Wed Oct 12 18:25:01 2022 +0200
SLING-11619 : safeguard backoff factors config
---
.../java/org/apache/sling/discovery/oak/Config.java | 15 +++++++++++++--
.../java/org/apache/sling/discovery/oak/ConfigTest.java | 17 +++++++++++++++++
2 files changed, 30 insertions(+), 2 deletions(-)
diff --git a/src/main/java/org/apache/sling/discovery/oak/Config.java b/src/main/java/org/apache/sling/discovery/oak/Config.java
index d596311..514ba27 100644
--- a/src/main/java/org/apache/sling/discovery/oak/Config.java
+++ b/src/main/java/org/apache/sling/discovery/oak/Config.java
@@ -22,10 +22,12 @@ import java.net.MalformedURLException;
import java.net.URL;
import java.util.LinkedList;
import java.util.List;
+import java.util.function.Function;
import org.apache.sling.discovery.base.connectors.BaseConfig;
import org.apache.sling.discovery.commons.providers.spi.base.DiscoveryLiteConfig;
import org.osgi.framework.BundleContext;
+import org.osgi.service.component.ComponentException;
import org.osgi.service.component.annotations.Activate;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.metatype.annotations.Designate;
@@ -235,8 +237,8 @@ public class Config implements BaseConfig, DiscoveryLiteConfig {
sharedKey = config.sharedKey();
keyInterval = config.hmacSharedKeyTTL();
- backoffStandbyFactor = config.backoffStandbyFactor();
- backoffStableFactor = config.backoffStableFactor();
+ backoffStandbyFactor = guard((c) -> config.backoffStandbyFactor(), "backoffStandbyFactor", DEFAULT_BACKOFF_STANDBY_FACTOR);
+ backoffStableFactor = guard((c) -> config.backoffStableFactor(), "backoffStableFactor", DEFAULT_BACKOFF_STABLE_FACTOR);
this.invertLeaderElectionPrefixOrder = config.invertLeaderElectionPrefixOrder();
logger.debug("configure: invertLeaderElectionPrefixOrder='{}'", this.invertLeaderElectionPrefixOrder);
@@ -254,6 +256,15 @@ public class Config implements BaseConfig, DiscoveryLiteConfig {
logger.debug("configure: joinerDelaySeconds='{}'", this.joinerDelaySeconds);
}
+ private Integer guard(Function<Void, Integer> injectedConfig, String key, int def) {
+ try {
+ return injectedConfig.apply(null);
+ } catch(RuntimeException re) {
+ logger.info("configure: got RuntimeException for " + key + ", using default: " + re);
+ return def;
+ }
+ }
+
/**
* Returns the socket connect() timeout used by the topology connector, 0 disables the timeout
*
diff --git a/src/test/java/org/apache/sling/discovery/oak/ConfigTest.java b/src/test/java/org/apache/sling/discovery/oak/ConfigTest.java
index eb28a1b..70096e0 100644
--- a/src/test/java/org/apache/sling/discovery/oak/ConfigTest.java
+++ b/src/test/java/org/apache/sling/discovery/oak/ConfigTest.java
@@ -26,6 +26,7 @@ import org.junit.Test;
import java.util.Dictionary;
import java.util.Hashtable;
+import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
public class ConfigTest {
@@ -46,4 +47,20 @@ public class ConfigTest {
public void testIfServiceActive() {
assertNotNull(config);
}
+
+ @Test
+ public void testEmptyValues() {
+ Dictionary<String, Object> properties = new Hashtable<>();
+ properties.put("backoffStandbyFactor", "");
+ config = context.registerInjectActivateService(new Config(), properties);
+ assertEquals(5, config.getBackoffStandbyFactor());
+ properties = new Hashtable<>();
+ properties.put("backoffStandbyFactor", "4");
+ config = context.registerInjectActivateService(new Config(), properties);
+ assertEquals(4, config.getBackoffStandbyFactor());
+ properties = new Hashtable<>();
+ properties.put("backoffStableFactor", "");
+ config = context.registerInjectActivateService(new Config(), properties);
+ assertEquals(5, config.getBackoffStandbyFactor());
+ }
}
\ No newline at end of file