I suppose the primitive we need is a DAMGATE that will copy all pending on the primary stream when it is plodded by a record on the alternate stream. (Which could be generated by BEAT.)
On 29 March 2013 18:55, Glenn Knickerbocker <[email protected]> wrote: > On 3/29/2013 12:38 AM, Paul Gilmartin wrote: >> I have a stage I would like to run immediately on receiving >> a request; however, if it has run within the previous 15 >> minutes, it should queue any requests and execute them as a >> batch when the 15 minutes expires. > > STREAMSTATE INPUT will tell you if the next record is already waiting. > You'll have to SUSPEND first to give the stream upstage a chance to > write it: > > 'streamstate summary' > Do While rc = 0 > 'callpipe *: | take 1 | *:' > 'suspend' > 'streamstate input' > If rc ¬= 0 then Do > 'callpipe literal +15:00 | delay | hole' > 'peekto' > End > 'streamstate summary' > End > > I threw in the PEEKTO just in case this is in a feedback loop--wouldn't > want to have two of these stages waiting on each other forever! If you > want to read the records in as a batch and process them together, > instead of doing this in a separate stage you could save them one by one > in a stem: > > 'streamstate summary' > Do While rc = 0 > 'callpipe *: | take 1 | stem batch. append' > 'suspend' > 'streamstate input' > If rc ¬= 0 then Do > /* process the batch here, and then: */ > batch.0 = 0 > 'callpipe literal +15:00 | delay | hole' > 'peekto' > End > 'streamstate summary' > End > > ¬R
