reactor / reactor-addons

Additional optional modules for the Reactor project

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

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:

  1. 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...

  2. Discussion follow-up and voting process which might be exposed as issue liking, etc.

  3. Providing PR with the reference implementation.

    Note, the implementation must include @Incubation marker annotation and should sit in the reactor-extra module under the reactor.incubator package.

Prerequisites

There are a few prerequisites in order to enable the incubating process feature.

  1. 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.
  2. 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