You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by re...@apache.org on 2026/06/10 13:28:37 UTC

(jackrabbit-oak) 01/01: OAK-12253: add a mechanism to override FT defaults via system property

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

reschke pushed a commit to branch OAK-12253
in repository https://gitbox.apache.org/repos/asf/jackrabbit-oak.git

commit 1e210a2eed71b3a214dd72103aed0fef737be3e0
Author: Julian Reschke <re...@apache.org>
AuthorDate: Wed Jun 10 14:28:11 2026 +0100

    OAK-12253: add a mechanism to override FT defaults via system property
---
 .../java/org/apache/jackrabbit/oak/spi/toggle/Feature.java    |  8 +++++++-
 .../apache/jackrabbit/oak/spi/toggle/FeatureToggleTest.java   | 11 +++++++++++
 oak-core-spi/src/test/resources/logback-test.xml              |  2 +-
 3 files changed, 19 insertions(+), 2 deletions(-)

diff --git a/oak-core-spi/src/main/java/org/apache/jackrabbit/oak/spi/toggle/Feature.java b/oak-core-spi/src/main/java/org/apache/jackrabbit/oak/spi/toggle/Feature.java
index afad73f2e6..7fe362365a 100644
--- a/oak-core-spi/src/main/java/org/apache/jackrabbit/oak/spi/toggle/Feature.java
+++ b/oak-core-spi/src/main/java/org/apache/jackrabbit/oak/spi/toggle/Feature.java
@@ -22,8 +22,11 @@ import java.io.Closeable;
 import java.util.Collections;
 import java.util.concurrent.atomic.AtomicBoolean;
 
+import org.apache.jackrabbit.oak.commons.properties.SystemPropertySupplier;
 import org.apache.jackrabbit.oak.spi.whiteboard.Registration;
 import org.apache.jackrabbit.oak.spi.whiteboard.Whiteboard;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * A feature toggle to control new functionality. The default state of a feature
@@ -40,6 +43,7 @@ import org.apache.jackrabbit.oak.spi.whiteboard.Whiteboard;
  */
 public final class Feature implements Closeable {
 
+    private static final Logger log = LoggerFactory.getLogger(Feature.class);
     private final AtomicBoolean value;
 
     private final Registration registration;
@@ -60,7 +64,9 @@ public final class Feature implements Closeable {
      * @return the feature toggle.
      */
     public static Feature newFeature(String name, Whiteboard whiteboard) {
-        AtomicBoolean value = new AtomicBoolean();
+        // by default the initial value is false, but it can be overridden by a system property
+        AtomicBoolean value = new AtomicBoolean(
+                SystemPropertySupplier.create("oak-feature." + name, false).logSuccessAs("INFO").get());
         FeatureToggle adapter = new FeatureToggle(name, value);
         return new Feature(value, whiteboard.register(
                 FeatureToggle.class, adapter, Collections.emptyMap()));
diff --git a/oak-core-spi/src/test/java/org/apache/jackrabbit/oak/spi/toggle/FeatureToggleTest.java b/oak-core-spi/src/test/java/org/apache/jackrabbit/oak/spi/toggle/FeatureToggleTest.java
index 7999b04f52..803b1c13a5 100644
--- a/oak-core-spi/src/test/java/org/apache/jackrabbit/oak/spi/toggle/FeatureToggleTest.java
+++ b/oak-core-spi/src/test/java/org/apache/jackrabbit/oak/spi/toggle/FeatureToggleTest.java
@@ -50,6 +50,17 @@ public class FeatureToggleTest {
         }
     }
 
+    @Test
+    public void defaultOverridden() {
+        String sysPropName = "oak-feature.my.toggle";
+        System.setProperty(sysPropName, "true");
+        try (Feature feature = newFeature("my.toggle", whiteboard)) {
+            assertTrue(feature.isEnabled());
+        } finally {
+            System.clearProperty(sysPropName);
+        }
+    }
+
     @Test
     public void register() {
         try (Feature feature = newFeature("my.toggle", whiteboard)) {
diff --git a/oak-core-spi/src/test/resources/logback-test.xml b/oak-core-spi/src/test/resources/logback-test.xml
index 042856c27b..efce63c418 100644
--- a/oak-core-spi/src/test/resources/logback-test.xml
+++ b/oak-core-spi/src/test/resources/logback-test.xml
@@ -27,7 +27,7 @@
     </encoder>
 </appender>
 
-<root level="ERROR">
+<root level="INFO">
     <!--
     <appender-ref ref="console"/>
     -->