[ 
https://issues.apache.org/jira/browse/OAK-9132?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17150836#comment-17150836
 ] 

Marcel Reutegger edited comment on OAK-9132 at 7/7/20, 3:38 PM:
----------------------------------------------------------------

A very simple default implementation in Oak could then read from a system 
property when the toggle is registered with the Whiteboard:
{noformat}
Index: oak-core/src/main/java/org/apache/jackrabbit/oak/Oak.java
===================================================================
--- oak-core/src/main/java/org/apache/jackrabbit/oak/Oak.java   (revision 
1879558)
+++ oak-core/src/main/java/org/apache/jackrabbit/oak/Oak.java   (working copy)
@@ -125,6 +125,7 @@
 import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
 import org.apache.jackrabbit.oak.spi.state.NodeState;
 import org.apache.jackrabbit.oak.spi.state.NodeStore;
+import org.apache.jackrabbit.oak.spi.toggle.FeatureToggle;
 import org.apache.jackrabbit.oak.spi.whiteboard.CompositeRegistration;
 import org.apache.jackrabbit.oak.spi.whiteboard.DefaultWhiteboard;
 import org.apache.jackrabbit.oak.spi.whiteboard.Registration;
@@ -301,6 +302,11 @@
                 }
             } else if (type == Observer.class && store instanceof Observable) {
                 observerSubscription.register(((Observable) 
store).addObserver((Observer) service));
+            } else if (type == FeatureToggle.class) {
+                // initialize the feature toggle with the value of
+                // the corresponding system property
+                FeatureToggle ft = (FeatureToggle) service;
+                ft.setEnabled(Boolean.getBoolean(ft.getName()));
             }
 
             ObjectName objectName = null;
{noformat}


was (Author: mreutegg):
A very simple default implementation in Oak could then read from a system 
property when the toggle is registered with the Whiteboard:
{noformat}
Index: oak-core/src/main/java/org/apache/jackrabbit/oak/Oak.java
===================================================================
--- oak-core/src/main/java/org/apache/jackrabbit/oak/Oak.java   (revision 
1879464)
+++ oak-core/src/main/java/org/apache/jackrabbit/oak/Oak.java   (working copy)
@@ -125,6 +125,7 @@
 import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
 import org.apache.jackrabbit.oak.spi.state.NodeState;
 import org.apache.jackrabbit.oak.spi.state.NodeStore;
+import org.apache.jackrabbit.oak.spi.toggle.FeatureToggleAdapter;
 import org.apache.jackrabbit.oak.spi.whiteboard.CompositeRegistration;
 import org.apache.jackrabbit.oak.spi.whiteboard.DefaultWhiteboard;
 import org.apache.jackrabbit.oak.spi.whiteboard.Registration;
@@ -301,6 +302,11 @@
                 }
             } else if (type == Observer.class && store instanceof Observable) {
                 observerSubscription.register(((Observable) 
store).addObserver((Observer) service));
+            } else if (type == FeatureToggleAdapter.class) {
+                // initialize the feature toggle with the value of
+                // the corresponding system property
+                FeatureToggleAdapter ft = (FeatureToggleAdapter) service;
+                ft.setEnabled(Boolean.getBoolean(ft.getName()));
             }
 
             ObjectName objectName = null;
{noformat}

> Feature toggles
> ---------------
>
>                 Key: OAK-9132
>                 URL: https://issues.apache.org/jira/browse/OAK-9132
>             Project: Jackrabbit Oak
>          Issue Type: New Feature
>          Components: core-spi
>            Reporter: Marcel Reutegger
>            Assignee: Marcel Reutegger
>            Priority: Minor
>
> Introduce the concept of [feature 
> toggles|https://martinfowler.com/articles/feature-toggles.html]. Oak already 
> has various system properties that control configuration or runtime behaviour 
> of the repository. With Oak moving to a more frequent release cycle there is 
> an increased need for control over new features. Some features should not be 
> enabled by default, for other features we may want to have a way to disable 
> if they introduce unexpected side effects for some users. Preferably, feature 
> toggles can be changed at runtime and no restart is required.
> It should also be possible to integrate third party systems that manage 
> feature toggles centrally.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to