Hello! Is it possible to simply disable P2P class loading for remote filter of continuous queries with autoUnsubscribe = true?
Regards, -- Ilya Kasnacheev чт, 18 окт. 2018 г. в 18:31, Denis Mekhanikov <dmekhani...@gmail.com>: > Igniters, > > I'm concerned with our continuous query API and deployment procedure. > > Continuous queries have remote filters, that can be deployed over peer > class loading mechanism (this functionality is currently broken though: > IGNITE-3653 <https://issues.apache.org/jira/browse/IGNITE-3653>, > IGNITE-9181 > <https://issues.apache.org/jira/browse/IGNITE-9181>). > In usual cases P2P class loading makes sense, but problems begin when a > node, that deployed the CQ, leaves cluster. By default the CQ is undeployed > in this case. But ContinuousQuery has *autoUnsubscribe* > < > https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/query/ContinuousQuery.html#setAutoUnsubscribe-boolean- > > > property. If set to true, it lets a continuous query stay in cluster, when > initiator leaves. > So, you may end up in a situation, when a continuous query remote filter is > deployed in a cluster, but the node, that the class was loaded from, is > already gone. > New nodes won't have where to load the remote filter class from in this > case. Also existing nodes may have problems, since class loading of > dependencies of the loaded class happens lazily (and cannot happen > eagerly), so they also need the initiator node. > > The *autoUnsubscribe* property helps to deploy continuous queries, that > listen to cache updates and react to them in the remote filters. This is > pretty convenient, since it allows cache updates be processed locally, > right where updates happen, without sending data over network. Such > continuous query may not even have a local listener, so initiator node may > deploy the query and leave. > > *BUT* > > - The deployed CQ becomes impossible to undeploy. It stays in the > cluster till the end of times. > - This case looks like a miss-use of the remote filters. They should > *filter*, but not *listen* and *react*. Remote filter should be a > stateless predicate rather than a clever callback. > - It causes the problems with P2P class loading, mentioned above. > > So, I'd like to see the *autoUnsubscribe *property deprecated and removed. > > This use-case should be covered by a different mechanism, that will allow > to deploy a listener into a cluster by name. It should support deployment > SPI <https://apacheignite.readme.io/docs/deployment-spi> instead of peer > class loading. It may be built on top of continuous queries, but have a > more suitable API. > > What do you think? > > Denis >