Hi Piotr!
Thanks for your response, I'll try to explain what I'm trying to achieve in
more detail:

Essentially, If I've two queries, in which has the same operators and runs
in the same task, I would want to figure out some way of controlling the
ingestion from *a source* to the respective queries in such a way that only
one of the queries receive data, based on a condition.
For more context, the second query (query2), is equipped with instrumented
operators, which are standard operators extended with some extra
functionality, in my case, they enrich the tuples with meta-data.

Source --> *Filter1* ---> rest of query1
   |
   v
   *Filter2* ---> rest of query2

By using *filters* prior to the queries, they allow records to pass
depending on a condition*, *let's say a global boolean variable (which is
initially set to false).
If it's set to *true, Filter1 will accept every record and Filter2 will
disregard every record.*
If it's set to
*false, Filter2 will accept every record and Filter1 will disregard every
record.*

*So the filter operators looks something like this: *

boolean global_var = false;

private static class filter1 implements FilterFunction<Tuple t> {
    @Override
    public boolean filter(Tuple t) throws Exception {
        return !global_var;
    }
}

private static class filter2 implements FilterFunction<Tuple t> {
    @Override
    public boolean filter(Tuple t) throws Exception {
        return global_var;
    }
}


Then later on, in the respective queries, there are some processing logic
in which changes the value of the global variable, thus enabling and
disabling the flow of data from the source to the respective queries.
The problem lies in this global variable being problematic in distributed
deployments, in which I'm having a hard time figuring out how to solve.
Is it a bit more clear? =)

Reply via email to