>  My expectation is that after the "flush error event", I can again accept new 
> published event and process those until I get another case where the cached 
> information is invalidated (i.e. the notification event changes the result 
> set and there is no way to simply update the cache and we have to re-run the 
> query).

So you can’t do this with the same PushStream instance. This is because the 
Pushstream instance is terminated after a terminal event (which an error event 
is). This does, however, give you the opportunity to re-run the query.

One way to achieve this is by registering a recovery function with the terminal 
promise from the PushStream. If the Promise fails with a 
“CacheInvalidatedException” you can re-run the same PushStream flow again (and 
again…) until the cache is no longer updated.

Does that make sense?

Tim

> On 15 Nov 2018, at 11:22, Alain Picard <pic...@castortech.com> wrote:
> 
> Tim,
> 
> One thing that I'm unsure about your suggestion. My expectation is that after 
> the "flush error event", I can again accept new published event and process 
> those until I get another case where the cached information is invalidated 
> (i.e. the notification event changes the result set and there is no way to 
> simply update the cache and we have to re-run the query). I am unclear as to 
> how this would happen.
> 
> 
> Thanks
> Alain
> 
> 
> On Thu, Nov 15, 2018 at 5:52 AM Tim Ward <tim.w...@paremus.com 
> <mailto:tim.w...@paremus.com>> wrote:
> The correct option will depend on what you want to happen. If you use an 
> endOfStream() or close() operation then you are telling your push stream that 
> the data has reached a “natural end”. This will cause the promise at the end 
> of your stream to resolve normally. This may be the right thing in some cases.
> 
> In the case that you describe I agree that endOfStream() and close() don’t 
> seem like the correct approach. The data hasn’t reached a natural conclusion, 
> and in fact the processing so far has been invalidated. This is the perfect 
> opportunity to send an error event! You can send an Exception indicating that 
> the result set was not completely processed, and potentially has been 
> invalidated. The default behaviour of the push stream will then be to fail 
> the pipeline, however a terminal “forEachEvent” handler could still choose to 
> do something useful with the information. For example it might choose to 
> trigger recreation of the stream against the updated dataset!
> 
> I hope this helps,
> 
> Tim
> 
> > On 15 Nov 2018, at 09:52, Alain Picard via osgi-dev <osgi-dev@mail.osgi.org 
> > <mailto:osgi-dev@mail.osgi.org>> wrote:
> > 
> > We are using a push stream to process data change notifications against a 
> > cached result set. Some of those notifications can result in directly 
> > applying updates to the result set, while other will force us to invalidate 
> > the cached result set.
> > 
> > When we do a requery, we want to make sure that any subsequent event sent 
> > to the push stream can be cleared and ignore. Looking at endOfStream() or 
> > close() doesn't seem to be the way to go. Only solution for now is to 
> > switch to a new stream, but wondering if that is the right way to do it.
> > 
> > Regards,
> > Alain
> > _______________________________________________
> > OSGi Developer Mail List
> > osgi-dev@mail.osgi.org <mailto:osgi-dev@mail.osgi.org>
> > https://mail.osgi.org/mailman/listinfo/osgi-dev 
> > <https://mail.osgi.org/mailman/listinfo/osgi-dev>
> 

_______________________________________________
OSGi Developer Mail List
osgi-dev@mail.osgi.org
https://mail.osgi.org/mailman/listinfo/osgi-dev

Reply via email to