You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-issues@jackrabbit.apache.org by "Marcel Reutegger (Jira)" <ji...@apache.org> on 2020/07/07 15:39:00 UTC

[jira] [Comment Edited] (OAK-9132) Feature toggles

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