Hello,

There are a couple of things wrt Ignite's CQ API and implementation I'd like to 
bring the community's attention to.

First, a CQ instance is a long living resource. Once started it continues to 
run until explicitly stopped by closing its cursor. If the query master node 
(the one holding the instance of the QueryCursor) crashes and the Auto 
Unsubscribe is off, then it doesn't seem there is any way to stop the CQ save 
for a complete restart of the grid. Making it possible to obtain the instance 
of the CQ from any grid node, might improve things.

Second, the purpose of the initial query and its usage in the current API is 
not clear. It makes one wonder what was the original use case the API was 
designed to address?

A couple of things:

1) the implementation doesn't provide a consistent point-in-time snapshot of 
the cache (no isolation). The cursor may deliver a more recent version of an 
entry if it got updated by a concurrent transaction. The same entry will also 
be delivered to the listener as an update event. Please correct me if I'm wrong.
2) the delivery of the initial query results is in no way synchronized with the 
delivery of the events to the listener.

This makes the API prone to race conditions and its correct usage impossible. 
By "correct usage" I mean the ability to capture point in time state of the 
cache followed by the correctly ordered change data events including the ones 
that occurred while the initial snapshot was being processed. In database 
systems it is also known as "materialized view maintenance".

It'd be more practical to deliver the initial state to the listener instance 
rather than to the cursor executing in a different thread. It'd also be 
necessary to punctuate the end of the initial state delivery and the beginning 
of the change data events, so that the listener could switch from building its 
initial state to applying incremental updates.

I'm curious if any of the above makes any sense?

Thanks
Andrey
"Misys" is the trade name of the Misys group of companies. This email and any 
attachments have been scanned for known viruses using multiple scanners. This 
email message is intended for the named recipient only. It may be privileged 
and/or confidential. If you are not the named recipient of this email please 
notify us immediately and do not copy it or use it for any purpose, nor 
disclose its contents to any other person. This email does not constitute the 
commencement of legal relations between you and Misys. Please refer to the 
executed contract between you and the relevant member of the Misys group for 
the identity of the contracting party with which you are dealing.

Reply via email to