ASF GitHub Bot commented on BEAM-742:

GitHub user kennknowles opened a pull request:


    [BEAM-742] Translation from Trigger to TriggerStateMachine

    Be sure to do all of the following to help us incorporate your contribution
    quickly and easily:
     - [x] Make sure the PR title is formatted like:
       `[BEAM-<Jira issue #>] Description of pull request`
     - [x] Make sure tests pass via `mvn clean verify`. (Even better, enable
           Travis-CI on your fork and ensure the whole test matrix passes).
     - [x] Replace `<Jira issue #>` in the title with the actual Jira issue
           number, if there is one.
     - [x] If this contribution is large, please file an Apache
           [Individual Contributor License 
    This add a `TriggerStateMachines` utility class to `runners-core` with one 
key piece of functionality: converting a `Trigger` (where we pretend it is just 
a piece of syntax) to a `TriggerStateMachine` (which is just a copy of what 
triggers currently are).
    In doing so, a fairly large number of trivial accessors and private/public 
alteration were necessary to the existing trigger codebase, but no 
functionality changes.
    It is worth noting briefly the options for disjoint unions in Java, to 
explain why I chose the one I did:
    1. A binder/evaluator a la `StateBinder` (this is the super-type-safe way 
of doing data in Java) but that adds a non-user-facing method to the interface. 
It can be useful sometimes, such as the way that `StateTag` has a phantom type 
that gets propagated to the return type of the visitor.
    2. A visitor a la `PipelineVisitor` that just mutates some internal state. 
This is roughly the same as the prior, but returning `void` and mutating makes 
it easier to return complex data but forces an ordering.
    3. Using reflection to treat the Java class as the disjoint union tag. This 
is the approach taken by Scala, and the approach I take here. I tried to 
minimize the reflective boilerplate this induced. No type safety is really 
lost, since in the technical vision, this trigger will be an AST sent over the 
wire (aka no type safety is available).
    R: @bjchambers 

You can merge this pull request into a Git repository by running:

    $ git pull https://github.com/kennknowles/incubator-beam 

Alternatively you can review and apply these changes as the patch at:


To close this pull request, make a commit to your master/trunk branch
with (at least) the following in the commit message:

    This closes #1101
commit a931626554f48197d733a8793e42dd18abcdb36f
Author: Kenneth Knowles <k...@google.com>
Date:   2016-10-14T03:08:53Z

    Make Trigger#subTriggers public and non-null

commit 409e6b77abc59ac9dff19d155d4485d70e1cfc60
Author: Kenneth Knowles <k...@google.com>
Date:   2016-10-14T03:42:38Z

    Construct AfterAllStateMachine with a list of subtriggers

commit 12ab0cee39004877ee2d20778d8768966399919e
Author: Kenneth Knowles <k...@google.com>
Date:   2016-10-14T03:43:08Z

    Construct AfterFirstStateMachine with a list of subtriggers

commit 6c0b307719cdf8a6a45a3b6f1e82cff88d1d10bb
Author: Kenneth Knowles <k...@google.com>
Date:   2016-10-14T03:43:33Z

    Make AfterSynchronizedProcessingTime public
    We need to be able to access this class to reason about it when
    converting a trigger to a state machine.

commit 3cdd843b6498b2c5ac227ea3dc8be09d64b1c8b0
Author: Kenneth Knowles <k...@google.com>
Date:   2016-10-14T03:44:35Z

    Add direct accessors for the components of OrFinallyTrigger

commit 22527bb34708059327f63dccdac3ad4a69bda6ed
Author: Kenneth Knowles <k...@google.com>
Date:   2016-10-14T03:56:54Z

    Construct AfterEachStateMachine from list of subtriggers

commit 1ad53cb68c76452db1ccbc64d55b92fe14db0e48
Author: Kenneth Knowles <k...@google.com>
Date:   2016-10-14T03:57:48Z

    Add accessors to Repeatedly trigger

commit ebb8e63b650d2dc9e43ac23d11ef1b3be1d6ac6c
Author: Kenneth Knowles <k...@google.com>
Date:   2016-10-14T03:58:12Z

    Make OrFinallyTrigger public so it can be examined

commit 40277691f64861a622fbd9bddf0ad1d8963d64ca
Author: Kenneth Knowles <k...@google.com>
Date:   2016-10-14T04:13:27Z

    Add accessors to AfterWatermark trigger

commit a5bac7bea8f8d82d14f7c341b4757c6a9a40bddf
Author: Kenneth Knowles <k...@google.com>
Date:   2016-10-14T05:13:43Z

    Add access to values from AfterDelay triggers

commit e95f5945d2469a44218dd3ad6f40afb5dce094e4
Author: Kenneth Knowles <k...@google.com>
Date:   2016-10-14T05:14:32Z

    Add accessors for AfterPane(StateMachine) parameters

commit b1d7222f9c26c0e5456d5cb4f423a707b47112a5
Author: Kenneth Knowles <k...@google.com>
Date:   2016-10-14T05:15:32Z

    Make return types of trigger static factory methods precise
    This is helpful in testing and loses no abstraction - the code
    locations calling these methods already know the more-specific
    type that will be returned.

commit edf6f80b0e32bef5a6217668cf527652648ae861
Author: Kenneth Knowles <k...@google.com>
Date:   2016-10-14T05:17:14Z

    Accessors for AfterDelay

commit d65c47698747f28100dd3501c3ced65d371b6aec
Author: Kenneth Knowles <k...@google.com>
Date:   2016-10-14T05:17:26Z

    Make NeverTrigger public for translation

commit 6ea617ae8c2b1cb63f38ec4f08c8dbda69766099
Author: Kenneth Knowles <k...@google.com>
Date:   2016-10-14T05:46:08Z

    Make return types more precise for AfterWatermarkTriggerStateMachine

commit 4bc2ba5dbd25e7b320253cc6c9e635accbe260de
Author: Kenneth Knowles <k...@google.com>
Date:   2016-10-14T03:02:52Z

    Add TriggerStateMachines with conversion from Trigger


> Move trigger state machines to runners-core, convert triggers to AST
> --------------------------------------------------------------------
>                 Key: BEAM-742
>                 URL: https://issues.apache.org/jira/browse/BEAM-742
>             Project: Beam
>          Issue Type: Sub-task
>          Components: runner-core, sdk-java-core
>            Reporter: Kenneth Knowles
>            Assignee: Kenneth Knowles

This message was sent by Atlassian JIRA

Reply via email to