You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 23 Next »

IDIEP-50
Author
Sponsor
Created

 

Status

DRAFT


Motivation

Thin clients should be able to perform Continuous Queries.

Description

Continuous query involves the following:

  • Cache update listener: while query is active, client receives events. Server → Client notification mechanism already exists for that (see IEP-42 Thin client: compute support).
  • (Optional) Remote filter
  • (Optional) Initial query: Sql or Scan

Remote Filter is a BinaryObject:

  • Java client can use any filter as usual, as long as the class is present on the servers.
  • .NET clients can use .NET filters as usual, as long as .NET platform is present on the server nodes - using PlatformContext.createContinuousQueryFilter (see ClientCacheScanQueryRequest)
  • Non-Java clients can use Java filters by building BinaryObjects with a Java class name and properties. Corresponding class should be registered in BinaryConfiguration.


ContinuousQueryWithTransformer is out of scope: it is a separate class, and should have a separate client operation.

Operation codes

Name

Code

OP_QUERY_CONTINUOUS2006

OP_QUERY_CONTINUOUS message format

Request
intcacheId
byteflags: standard cache flags, see ClientCacheRequest. Only KEEP_BINARY is applicable to Continuous Query. When KEEP_BINARY is set, the filter should receive key/val in binary form.
intbufferSize (see AbstractContinuousQuery, default 1)
longtimeInterval (see AbstractContinuousQuery, default 0)
boolincludeExpired (see AbstractContinuousQuery, default false)
BinaryObjectfilter
bytefilterPlatform (see ClientCacheScanQueryRequest, 1= Java, 2 = .NET) (when filter is not null)
byteinitialQueryType (0 = NONE, 1 = SQL, 2 = SCAN)
initialQuery (when initialQueryType > 0)

when initialQueryType == 1 (SCAN)

BinaryObjectfilter
bytefilterPlatform (when filter is not null)
intpageSize
intpartition (-1 for no partition)
boollocal

when initialQueryType == 2 (SQL)

stringschema
intpageSize
stringsql
intargument count
n * Objectarguments
booldistributed joins
boollocal
boolenforce join order
boolcolocated
boollazy
longtimeout, in milliseconds
Response
longcontinuousQueryId
intcolumnCount (when initial query is SQL)
n * stringcolumn names (when initial query is SQL)

Resulting continuousQueryId should be used to stop the query with OP_RESOURCE_CLOSE and (when applicable) retrieve initial query data with OP_QUERY_SCAN_CURSOR_GET_PAGE or OP_QUERY_SQL_CURSOR_GET_PAGE, respectively.

Note: AbstractContinuousQuery.autoUnsubscribe should be always true for thin client continuous queries.

Risks & Assumptions

  • Flow control & backpressure: We assume no special flow control and rely on GridNioServer to handle "slow client, fast server" scenario.
  • Fault tolerance: Initial implementation does not provide failover in case when server node that holds the query goes down or client connection fails. It is up to specific client implementation to notify user code about the connection loss (for example, by providing special CacheEntryEvent instance that throws an exception from all members).

Discussion Links

Tickets

Unable to render Jira issues macro, execution error.



  • No labels