The behavior mentioned in quotes below is when operator does not implement the interface. If it does it has to manage the idle time and not cause a busy loop.
Thanks On Wed, Sep 2, 2015 at 11:42 AM, Munagala Ramanath <[email protected]> wrote: > From the documentation at: > * > https://www.datatorrent.com/docs/2.0.0/apidocs/com/datatorrent/api/Operator.IdleTimeHandler.html > < > https://www.datatorrent.com/docs/2.0.0/apidocs/com/datatorrent/api/Operator.IdleTimeHandler.html > >* > it looks like there is no need to sleep at all: > > "...the engine will put the operator in scaled back processing mode to > better utilize CPU. It resumes its normal processing as soon as it detects > tuples being received or generated." > > > > On Wed, Sep 2, 2015 at 11:33 AM, Sandeep Deshmukh <[email protected] > > > wrote: > > > Bhupesh: I would code as follows: > > > > handleIdleTime() > > { > > if(something to do){ > > do some work W; > > } else{ > > sleep(SPIN_MILLIS); > > } > > } > > > > Essentially, if you have done some work then you don't need to sleep. > > > > Regards, > > Sandeep > > > > On Wed, Sep 2, 2015 at 11:27 AM, Pramod Immaneni <[email protected] > > > > wrote: > > > > > It is not guaranteed. > > > > > > On Wed, Sep 2, 2015 at 11:09 AM, Sandeep Deshmukh < > > [email protected] > > > > > > > wrote: > > > > > > > As I understand, I can get my task done earlier if I have that in > > > > handleIdleTime() rathe than waiting for endWindow(). > > > > > > > > But can I depend solely on handleIdleTime() ? Is invocation of > > > > handleIdleTime() guaranteed in the operator per window cycle? > > > > > > > > > > > > > > > > On Wed, Sep 2, 2015 at 7:46 AM, Pramod Immaneni < > > [email protected]> > > > > wrote: > > > > > > > > > The time you spend in handleIdleTime could still be less than a > > window > > > > > interval. If you move your processing to end window, since end > window > > > is > > > > > called when end window is received from upstream you would delay > the > > > > > results being sent to downstream. > > > > > > > > > > On Wed, Sep 2, 2015 at 1:26 AM, Bhupesh Chawda < > > > [email protected]> > > > > > wrote: > > > > > > > > > > > Hi All, > > > > > > > > > > > > I understand that handleIdleTime() is called when the operator is > > > > idling > > > > > > and is intended for auxiliary processing. Also, if the operator > > does > > > > not > > > > > > have anything to do, it must block for some time to avoid busy > > loop. > > > > > > What happens if my processing within handleIdleTime() exceeds the > > > > amount > > > > > of > > > > > > time it would have blocked otherwise? In that case does it make a > > > > > > difference whether the processing is done in handleIdleTime() or > in > > > > > > endWindow() call? > > > > > > > > > > > > To clarify the question, is this the right approach: > > > > > > > > > > > > handleIdleTime() > > > > > > { > > > > > > do some work W; > > > > > > t = time to do work W; > > > > > > sleep(SPIN_MILLIS - t); > > > > > > } > > > > > > > > > > > > What is the right approach if t > SPIN_MILLIS? > > > > > > > > > > > > Thanks. > > > > > > -- > > > > > > Regards, > > > > > > Bhupesh Chawda > > > > > > > > > > > > > > > > > > > > >
