Proposal: Operators incubating process
OlegDokuka opened this issue · comments
Operators Incubating proposal
In many cases, we can't have an ability to include a "nice to have" operator into the reactor-core library. However, such operators could make sense for some use-cases, and many of the Reactor's users could find it use-full as well. Therefore this issue is about creating an incubation process which allows to include any use-full operator in the reactor-extra first and after some incubation period move it to reactor-core or keep it as an add-on feature in the reactor-extra.
The following is a brief description of how the incubation process can look like and the main intent of this issue is to start a discussion and make final decision after all.
Incubating process
In order to understand whether the operator is useful or not we have to have a specific incubation process which MUST include the following steps:
-
Create Issue
Title must include Operator name and starts with Incubation Proposal. For example:Incubation Proposal:
SwitchTransformFlux
Content must include the purpose of the operator, at least one use-case that will be useful for a wide audience. For example:
Purpose: Can transform flux based on the first element of the stream...
Use-case Elements Routing based on the first element in the stream... -
Discussion follow-up and voting process which might be exposed as issue liking, etc.
-
Providing PR with the reference implementation.
Note, the implementation must include
@Incubation
marker annotation and should sit in the reactor-extra module under thereactor.incubator
package.
Prerequisites
There are a few prerequisites in order to enable the incubating process feature.
-
Set of annotation in the
reactor-extra
reactor.incubation.annotation
package. Annotation should include@Incubation
,@Beta
,@Stabel
/@CoreCandidate
Where:
@Incubation
means that at this point it is unclear whether this operator will be included either into extra or into core libraries.@Beta
means that this operator will be included into either extra or core libraries@Beta
+@CoreCadidate
means that this operator will eventually be moved to the core library, so anyone who uses annotated operator should be ready for migration to core counterpart@Stable
means that this operator is going to be a part of the extra library and anyone can safely use it from there without any expectation for moving from the extra to the core.
-
Set of labels that indicates the state of incubation in the issue tracker:
Proposal
-> Incubation
-> Beta
-> Beta
+ Core Candidate
-> Movement to Core + Issue closing
_____________________________________ -> Stable
+ Issue closing
cc/ @simonbasle @smaldini