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

Reply via email to