ignite-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Nikolay Izhikov <nizhikov....@gmail.com>
Subject ContinuousQueryWithTransformer implementation questions - 2
Date Tue, 29 Aug 2017 10:36:53 GMT
Hello, Igniters.

I'm working on IGNITE-425 [1] issue.

Text of issue:

Currently if updated entry passes the filter, it is sent to node 
initiated the query entirely. It would be good to provide user with the 
ability to transform entry and, for example, select only fields that are 
important. This may bring huge economy to traffic and lower GC pressure 
as well.

My pull request [2] is ready.
Anton Vinogradov is OK with it.
Nikolay Tikhonov reviewed my changes and want to discuss changes related 
to public API with community.

1. I introduce new query class - ContinuousQueryWithTransformer [3].
* ContinuousQuery is final so user can't extends it. I don't want to
change that.
* ContinuousQuery contains some deprecated methods(setRemoteFilter) so 
with new class we can get rid of them.
* Such public API design disallow usage of existing localEventListener
with new transformedEventListenr in compile time.


2. What behavior is expected if transformer throws exception for some 
event? I see following options:

* Pass `null` to listener(pull request implementation).
* Skip event. Don't call listener.
* Introduce special callback. onTransformError?


public final class ContinuousQueryWithTransformer<K, V, T> extends 
Query<Cache.Entry<K, V>> {

     private Factory<? extends CacheEntryEventFilter<K, V>> 

     private Factory<? extends IgniteClosure<CacheEntryEvent<? extends 
K, ? extends V>, T>> rmtTransFactory;

     private EventListener<T> locLsnr;


     public interface EventListener<T> {
         void onUpdated(Iterable<? extends T> events);

Previous discussion - [4]

[1] https://issues.apache.org/jira/browse/IGNITE-425
[2] https://github.com/apache/ignite/pull/2372

View raw message