is there any information? ---------- Forwarded message --------- From: Som Som <2av10...@gmail.com> Date: ср, 8 авг. 2018 г., 16:46 Subject: continous query remote filter issue To: <user@ignite.apache.org>
hello. It looks like peerAssemblyLoadingMode flag doesn’t work correctly in case of CacheEntryEventFilter: As an example: 1) This code works fine and I see “Hello world” on the server console. It means that HelloAction class was successfully transferred to server. class Program { static void Main(string[] args) { using (var ignite = Ignition .StartFromApplicationConfiguration()) { var remotes = ignite.GetCluster().ForRemotes(); remotes.GetCompute().Broadcast(newHelloAction()); } } class HelloAction : IComputeAction { public void Invoke() { Console.WriteLine("Hello, World!"); } } } 2) But this code that sends the filter class to the remote server node generates an error and I receive 4 entries of Employee instead of 2 as expected: class Program { public class Employee { public Employee(string name, long salary) { Name = name; Salary = salary; } [QuerySqlField] public string Name { get; set; } [QuerySqlField] public long Salary { get; set; } public override string ToString() { return string.Format("{0} [name={1}, salary={2}]", typeof( Employee).Name, Name, Salary); } } class EmployeeEventListener :ICacheEntryEventListener<int, Employee> { public void OnEvent(IEnumerable<ICacheEntryEvent<int, Employee>> evts) { foreach(var evt in evts) Console.WriteLine(evt.Value); } } class EmployeeEventFilter :ICacheEntryEventFilter<int, Employee> { public bool Evaluate(ICacheEntryEvent<int,Employee> evt) { return evt.Value.Salary > 5000; } } static void Main(string[] args) { using (var ignite = Ignition .StartFromApplicationConfiguration()) { var employeeCache = ignite.GetOrCreateCache<int, Employee>( new CacheConfiguration("employee", newQueryEntity(typeof (int), typeof(Employee))) { SqlSchema = "PUBLIC" }); var query = new ContinuousQuery<int,Employee>(new EmployeeEventListener()) { Filter = new EmployeeEventFilter() }; var queryHandle = employeeCache.QueryContinuous(query); employeeCache.Put(1, newEmployee("James Wilson", 1000)); employeeCache.Put(2, new Employee("Daniel Adams", 2000)); employeeCache.Put(3, newEmployee("Cristian Moss", 7000)); employeeCache.Put(4, newEmployee("Allison Mathis", 8000)); Console.WriteLine("Press any key..."); Console.ReadKey(); } } } Server node console output: [16:26:33] __________ ________________ [16:26:33] / _/ ___/ |/ / _/_ __/ __/ [16:26:33] _/ // (7 7 // / / / / _/ [16:26:33] /___/\___/_/|_/___/ /_/ /___/ [16:26:33] [16:26:33] ver. 2.7.0.20180721#19700101-sha1:DEV [16:26:33] 2018 Copyright(C) Apache Software Foundation [16:26:33] [16:26:33] Ignite documentation: http://ignite.apache.org [16:26:33] [16:26:33] Quiet mode. [16:26:33] ^-- Logging to file 'C:\Ignite\apache-ignite-fabric-2.7.0.20180721-bin\work\log\ignite-b1061a07.0.log' [16:26:33] ^-- Logging by 'JavaLogger [quiet=true, config=null]' [16:26:33] ^-- To see **FULL** console log here add -DIGNITE_QUIET=false or "-v" to ignite.{sh|bat} [16:26:33] [16:26:33] OS: Windows Server 2016 10.0 amd64 [16:26:33] VM information: Java(TM) SE Runtime Environment 1.8.0_161-b12 Oracle Corporation Java HotSpot(TM) 64-Bit Server VM 25.161-b12 [16:26:33] Please set system property '-Djava.net.preferIPv4Stack=true' to avoid possible problems in mixed environments. [16:26:33] Configured plugins: [16:26:33] ^-- None [16:26:33] [16:26:33] Configured failure handler: [hnd=StopNodeOrHaltFailureHandler [tryStop=false, timeout=0]] [16:26:33] Message queue limit is set to 0 which may lead to potential OOMEs when running cache operations in FULL_ASYNC or PRIMARY_SYNC modes due to message queues growth on sender and receiver sides. [16:26:33] Security status [authentication=off, tls/ssl=off] [16:26:35] Performance suggestions for grid (fix if possible) [16:26:35] To disable, set -DIGNITE_PERFORMANCE_SUGGESTIONS_DISABLED=true [16:26:35] ^-- Enable G1 Garbage Collector (add '-XX:+UseG1GC' to JVM options) [16:26:35] ^-- Specify JVM heap max size (add '-Xmx<size>[g|G|m|M|k|K]' to JVM options) [16:26:35] ^-- Set max direct memory size if getting 'OOME: Direct buffer memory' (add '-XX:MaxDirectMemorySize=<size>[g|G|m|M|k|K]' to JVM options) [16:26:35] ^-- Disable processing of calls to System.gc() (add '-XX:+DisableExplicitGC' to JVM options) [16:26:35] Refer to this page for more performance suggestions: https://apacheignite.readme.io/docs/jvm-and-system-tuning [16:26:35] [16:26:35] To start Console Management & Monitoring run ignitevisorcmd.{sh|bat} [16:26:35] [16:26:35] Ignite node started OK (id=b1061a07) [16:26:35] Topology snapshot [ver=1, servers=1, clients=0, CPUs=8, offheap=6.4GB, heap=7.1GB] [16:26:35] ^-- Node [id=B1061A07-4404-47BE-8EB4-160F6D174BF4, clusterState=ACTIVE] [16:26:35] Data Regions Configured: [16:26:35] ^-- default [initSize=256.0 MiB, maxSize=6.4 GiB, persistenceEnabled=false] [16:26:42] Topology snapshot [ver=2, servers=1, clients=1, CPUs=12, offheap=6.4GB, heap=11.0GB] [16:26:42] ^-- Node [id=B1061A07-4404-47BE-8EB4-160F6D174BF4, clusterState=ACTIVE] [16:26:42] Data Regions Configured: [16:26:42] ^-- default [initSize=256.0 MiB, maxSize=6.4 GiB, persistenceEnabled=false] [16:26:44,523][SEVERE][sys-stripe-1-#2][] Failure in Java callback class org.apache.ignite.IgniteException: Platform error:Apache.Ignite.Core.Binary.BinaryObjectException: No matching type found for object [typeId=-1369457415, typeName= IngiteExample.Program+EmployeeEventFilter]. This usually indicates that assembly with specified type is not loaded on a node. When using Apache.Ignite.exe, make sure to load assemblies with -assembly parameter. Alternatively, set IgniteConfiguration.PeerAssemblyLoadingEnabled to true. at Apache.Ignite.Core.Impl.Binary.BinaryReader.ReadFullObject[T](Int32 pos, Type typeOverride) at Apache.Ignite.Core.Impl.Binary.BinaryReader.TryDeserialize[T](T& res, Type typeOverride) at Apache.Ignite.Core.Impl.Binary.BinaryReader.Deserialize[T](Type typeOverride) at Apache.Ignite.Core.Impl.Cache.Query.Continuous.ContinuousQueryFilterHolder..ctor(IBinaryRawReader reader) at Apache.Ignite.Core.Impl.Binary.Marshaller.<AddSystemTypes>b__d(BinaryReader r) at Apache.Ignite.Core.Impl.Binary.BinarySystemTypeSerializer`1.ReadBinary[T1](BinaryReader reader, IBinaryTypeDescriptor desc, Int32 pos, Type typeOverride) at Apache.Ignite.Core.Impl.Binary.BinaryReader.ReadFullObject[T](Int32 pos, Type typeOverride) at Apache.Ignite.Core.Impl.Binary.BinaryReader.TryDeserialize[T](T& res, Type typeOverride) at Apache.Ignite.Core.Impl.Binary.BinaryReader.Deserialize[T](Type typeOverride) at Apache.Ignite.Core.Impl.Binary.BinaryReader.ReadBinaryObject[T](Boolean doDetach) at Apache.Ignite.Core.Impl.Binary.BinaryReader.TryDeserialize[T](T& res, Type typeOverride) at Apache.Ignite.Core.Impl.Binary.BinaryReader.Deserialize[T](Type typeOverride) at Apache.Ignite.Core.Impl.Unmanaged.UnmanagedCallbacks.ContinuousQueryFilterCreate(Int64 memPtr) at Apache.Ignite.Core.Impl.Unmanaged.UnmanagedCallbacks.InLongOutLong(Int32 type, Int64 val) at org.apache.ignite.internal.processors.platform.PlatformProcessorImpl.loggerLog(PlatformProcessorImpl.java:403) at org.apache.ignite.internal.processors.platform.PlatformProcessorImpl.processInStreamOutLong(PlatformProcessorImpl.java:459) at org.apache.ignite.internal.processors.platform.PlatformProcessorImpl.processInStreamOutLong(PlatformProcessorImpl.java:511) at org.apache.ignite.internal.processors.platform.PlatformTargetProxyImpl.inStreamOutLong(PlatformTargetProxyImpl.java:67) at org.apache.ignite.internal.processors.platform.callback.PlatformCallbackUtils.inLongOutLong(Native Method) at org.apache.ignite.internal.processors.platform.callback.PlatformCallbackGateway.continuousQueryFilterCreate(PlatformCallbackGateway.java:394) at org.apache.ignite.internal.processors.platform.cache.query.PlatformContinuousQueryRemoteFilter.deploy(PlatformContinuousQueryRemoteFilter.java:124) at org.apache.ignite.internal.processors.platform.cache.query.PlatformContinuousQueryRemoteFilter.evaluate(PlatformContinuousQueryRemoteFilter.java:84) at org.apache.ignite.internal.processors.cache.query.continuous.CacheContinuousQueryHandler.filter(CacheContinuousQueryHandler.java:833) at org.apache.ignite.internal.processors.cache.query.continuous.CacheContinuousQueryHandler $2.onEntryUpdated(CacheContinuousQueryHandler.java:422) at org.apache.ignite.internal.processors.cache.query.continuous.CacheContinuousQueryManager.onEntryUpdated(CacheContinuousQueryManager.java:399) at org.apache.ignite.internal.processors.cache.GridCacheMapEntry.innerUpdate(GridCacheMapEntry.java:1923) at org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.updateSingle(GridDhtAtomicCache.java:2436) at org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.update(GridDhtAtomicCache.java:1898) at org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.updateAllAsyncInternal0(GridDhtAtomicCache.java:1740) at org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.updateAllAsyncInternal(GridDhtAtomicCache.java:1630) at org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.processNearAtomicUpdateRequest(GridDhtAtomicCache.java:3071) at org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.access$400(GridDhtAtomicCache.java:133) at org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache$5.apply(GridDhtAtomicCache.java:269) at org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache$5.apply(GridDhtAtomicCache.java:264) at org.apache.ignite.internal.processors.cache.GridCacheIoManager.processMessage(GridCacheIoManager.java:1056) at org.apache.ignite.internal.processors.cache.GridCacheIoManager.onMessage0(GridCacheIoManager.java:581) at org.apache.ignite.internal.processors.cache.GridCacheIoManager.handleMessage(GridCacheIoManager.java:380) at org.apache.ignite.internal.processors.cache.GridCacheIoManager.handleMessage(GridCacheIoManager.java:306) at org.apache.ignite.internal.processors.cache.GridCacheIoManager.access$100(GridCacheIoManager.java:101) at org.apache.ignite.internal.processors.cache.GridCacheIoManager$1 .onMessage(GridCacheIoManager.java:295) at org.apache.ignite.internal.managers.communication.GridIoManager.invokeListener(GridIoManager.java:1556) at org.apache.ignite.internal.managers.communication.GridIoManager.processRegularMessage0(GridIoManager.java:1184) at org.apache.ignite.internal.managers.communication.GridIoManager.access$4200(GridIoManager.java:125) at org.apache.ignite.internal.managers.communication.GridIoManager$9.run(GridIoManager.java:1091) at org.apache.ignite.internal.util.StripedExecutor$Stripe.body(StripedExecutor.java:496) at org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java:110) at java.lang.Thread.run(Thread.java:748) [16:26:44,538][SEVERE][sys-stripe-1-#2][query] CacheEntryEventFilter failed: javax.cache.event.CacheEntryListenerException: Failed to deploy the filter. [16:26:44,554][SEVERE][sys-stripe-2-#3][query] CacheEntryEventFilter failed: javax.cache.event.CacheEntryListenerException: Failed to deploy the filter because it has been closed. [16:26:44,554][SEVERE][sys-stripe-3-#4][query] CacheEntryEventFilter failed: javax.cache.event.CacheEntryListenerException: Failed to deploy the filter because it has been closed. [16:26:44,570][SEVERE][sys-stripe-4-#5][query] CacheEntryEventFilter failed: javax.cache.event.CacheEntryListenerException: Failed to deploy the filter because it has been closed.