Please note that tuples should not be emitted by any thread other than the main operator thread.
A common pattern is to use a thread-safe queue and have worker threads enqueue tuples there; the main operator thread then pulls tuples from the queue and emits them. Ram On Tue, Feb 21, 2017 at 10:05 AM, Sunil Parmar <[email protected]> wrote: > Hi there, > We have the following setup: > > - we have a generic operator that’s processing tuples in its input port > - in the input port’s process method, we check for a condition, and: > - if the condition is met, the tuple is emitted to the next > operator right away (in the process method) > - Otherwise, if the condition is not met, we store the tuple in > some cache and we use some threads that periodically check the > condition to > become true. Once the condition is true, the threads call the emit > method > on the stored tuples. > > With this setup, we occasionally encounter the following error: > 2017-02-15 17:29:09,364 ERROR com.datatorrent.stram.engine.GenericNode: > Catastrophic Error: Out of sequence BEGIN_WINDOW tuple 58a4046100003b7f on > port transformedJSON while expecting 58a4046100003b7e > > Is there a way to make the above work correctly? > If not, can you recommend a better way of doing this? > How can we ensure window assignment is done synchronously before emitting > tuples ? > > Thanks very much in advance… > -allan > -- _______________________________________________________ Munagala V. Ramanath Software Engineer E: [email protected] | M: (408) 331-5034 | Twitter: @UnknownRam www.datatorrent.com | apex.apache.org
