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].
Reasons:
* 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.
Thoughts?
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?
Thoughts?
```
public final class ContinuousQueryWithTransformer<K, V, T> extends
Query<Cache.Entry<K, V>> {
//...
private Factory<? extends CacheEntryEventFilter<K, V>>
rmtFilterFactory;
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
[3]
https://github.com/apache/ignite/pull/2372/files#diff-22cc0cf0bc428b32a39e6cc0b22b0e3e
[4]
http://apache-ignite-developers.2346864.n4.nabble.com/ContinuousQueryWithTransformer-implementation-questions-td20078.html