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

Bertrand Delacretaz edited comment on SLING-3148 at 11/12/13 3:38 PM:
----------------------------------------------------------------------

To be useful I think feature flags need to be more dynamic than just 
enabling/disabling OSGi services or bundles. Being able to enable a feature for 
just specific requests, user groups or for a percentage of all requests is 
where this really shines.

The slides at [1] give a good overview IMO (thanks [~teofili]!}, based on that 
we can imagine feature flags based on various things like run mode, request, 
user, group, resource, random percentage, opt-in cookie etc.

I'm not sure if we need an external library for that, creating our own is quite 
simple and can fully take advantage of the Sling environment. I have created a 
minimal prototype at [2] that has 3 example feature flags providers based on 
resource paths, random numbers and a request header. A demo servlet dumps the 
feature flag values, which depend on the current request, in JSON:

{code}
$ curl -HX-sling-feature:foo http://localhost:8080/tmp/foo.featureflags.json
{
  "featureFlags": {
    "request.header.feature": true,
    "random.feature": false,
    "resource.path.feature": true
  }
}

$ curl http://localhost:8080/apps.featureflags.json
{
  "featureFlags": {
    "request.header.feature": false,
    "random.feature": true,
    "resource.path.feature": false
  }
}
{code}

The implementation is very simple, if we agree on the need we could move it 
under contrib and make the examples more useful.

[1] http://www.paulhammond.org/2010/06/trunk/alwaysshiptrunk.pdf
[2] https://svn.apache.org/repos/asf/sling/whiteboard/bdelacretaz/feature-flags


was (Author: bdelacretaz):
To be useful I think feature flags need to be more dynamic than just 
enabling/disabling OSGi services or bundles.

The slides at [1] give a good overview IMO (thanks [~teofili]!}, based on that 
we can imagine feature flags based on various things like run mode, request, 
user, group, resource, random percentage, opt-in cookie etc.

I'm not sure if we need an external library for that, creating our own is quite 
simple and can fully take advantage of the Sling environment. I have created a 
minimal prototype at [2] that has 3 example feature flags providers based on 
resource paths, random numbers and a request header. A demo servlet dumps the 
feature flag values, which depend on the current request, in JSON:

{code}
$ curl -HX-sling-feature:foo http://localhost:8080/tmp/foo.featureflags.json
{
  "featureFlags": {
    "request.header.feature": true,
    "random.feature": false,
    "resource.path.feature": true
  }
}

$ curl http://localhost:8080/apps.featureflags.json
{
  "featureFlags": {
    "request.header.feature": false,
    "random.feature": true,
    "resource.path.feature": false
  }
}
{code}

The implementation is very simple, if we agree on the need we could move it 
under contrib and make the examples more useful.

[1] http://www.paulhammond.org/2010/06/trunk/alwaysshiptrunk.pdf
[2] https://svn.apache.org/repos/asf/sling/whiteboard/bdelacretaz/feature-flags

> Implement support for Feature Flags/Toggles in Sling
> ----------------------------------------------------
>
>                 Key: SLING-3148
>                 URL: https://issues.apache.org/jira/browse/SLING-3148
>             Project: Sling
>          Issue Type: New Feature
>          Components: General
>            Reporter: Henry Saginor
>            Priority: Minor
>
> It would be nice if sling provide support for feature flags (also called 
> toggles) pattern [1].
> I am thinking the implementation could provide the following.
> 1) Integrate an existing framework such as togglz [2] or implement something 
> similar with UI/Configuration to toggle features.
> 2) Create a jcr property (sling:Feature) which can be added to resource type 
> nodes. Then some conditional logic in <sling:include>, and get and post 
> servlets determines if the resource should be rendered if its resource type 
> contains such property.
> [1] http://en.wikipedia.org/wiki/Feature_toggle
> [2] http://www.togglz.org/



--
This message was sent by Atlassian JIRA
(v6.1#6144)

Reply via email to