Dale LaBossiere created QUARKS-150:
--------------------------------------

             Summary: add Valve Predicate
                 Key: QUARKS-150
                 URL: https://issues.apache.org/jira/browse/QUARKS-150
             Project: Quarks
          Issue Type: New Feature
            Reporter: Dale LaBossiere


A Valve Predicate accepts tuples when its state is {@link State#OPEN}, 
otherwise it rejects tuples.

A valve is typically used to dynamically control whether or not
some downstream tuple processing is enabled.  A decision to change the
state of the valve may be a result of local analytics or an external
device command.

[ fwiw, this is known as a 'Switch' utility operator in IBM Streams ]

Maybe this belongs in quarks.topology.plumbing/PlumbingStreams, not 
quarks.analytics.sensors/Filters like Deadband and Deadtime, since there's not 
really much "analytic" about it?

E.g., a Valve might be used to control whether or not logging of tuples is 
enabled.

```
TStream<JsonObject> stream = ...;
 
Valve<JsonObject> valve = new Valve<>(Valve.State.CLOSED);
stream.filter(valve).sink(someTupleLoggingConsumer);

// from some analytic or device command handler...
    valve.setState(Valve.State.OPEN);
```



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to