Ilya,

Yes, Rafael confirmed that the peer-class-loading is set.

Still does not work, this time complaining that the MyFilter class is not
found.
PeerClassLoading is active as far as I can tell. At least in both
server/client ignite config

Is this a known limitation or regression? Should we file an feature request
or bug?

Denis

On Thursday, July 2, 2020, Ilya Kasnacheev <ilya.kasnach...@gmail.com>
wrote:

> Hello!
>
> Did you enable peer class loading? You need to either enable peer class
> loading, or put your filter class(es) to all server nodes.
>
> Regards,
> --
> Ilya Kasnacheev
>
>
> чт, 2 июл. 2020 г. в 15:09, Rafael Troilo <rafael.tro...@heigit.org>:
>
>> Hi Denis,
>>
>> thank you for your quick response. Unfortunately even avoiding lambdas or
>> anonymous classes didn't solve this problem.
>> And was my first thought for this problem too.
>>
>> With:
>>
>> MyFilter.java
>>
>> import org.apache.ignite.lang.IgniteClosure;
>>
>> public class MyFilter<T> implements IgniteClosure<T, Long> {
>>
>>   private static final long serialVersionUID = 1L;
>>   private final long l;
>>
>>   public MyFilter(long l) {
>>     this.l = l;
>>   }
>>
>>   @Override
>>   public Long apply(T e) {
>>     return l;
>>   }
>>
>> }
>>
>>
>> and
>>
>> try (Ignite ignite = Ignition.start("ignite.xml")) {
>>    IgniteCache<Integer, String> cache = ignite.getOrCreateCache("
>> ScanTransformTest");
>>   ...
>>    // 2 Running the ScanQuery on the remote server. Works!
>>   compute.broadcast(() -> {
>>     try (QueryCursor<Long> cursor = cache.query(new
>> ScanQuery<>().setLocal(true), new MyFilter<>(234))) {
>>       for (Long row : cursor) {
>>         return row;
>>       }
>>     }
>>     return 0;
>>   })
>>
>>   // 3 Still does not work.
>>   try (QueryCursor<Long> cursor = cache.query(new ScanQuery<>(), new
>> MyFilter<>(345L))) {
>>     for (Long row : cursor) {
>>       System.out.println(row);
>>       break;
>>     }
>>   }
>> }
>>
>> Still does not work, this time complaining that the MyFilter class is not
>> found.
>> PeerClassLoading is active as far as I can tell. At least in both
>> server/client ignite config
>> ...
>> <property name="peerClassLoadingEnabled" value="true"/>
>> ...
>> it is enabled.
>>
>> I'm also not sure why the same class (IgniteClosure) works in the other
>> case but not in the Transformer or whats the differnt in case 2 to 3.
>> I guess making the MyFilter class available on the server will solve this
>> problem, but should not peerClassLoading work here?
>>
>> Is there any information  I can provide or test I should do to help to
>> solve this problem.
>>
>> Thank you very much.
>>
>>
>> Stack Trace:
>> Exception in thread "main" javax.cache.CacheException: class
>> org.apache.ignite.IgniteCheckedException: MyFilter
>>         at org.apache.ignite.internal.processors.cache.GridCacheUtils.
>> convertToCacheException(GridCacheUtils.java:1317)
>>         at org.apache.ignite.internal.processors.cache.query.
>> GridCacheQueryFutureAdapter.next(GridCacheQueryFutureAdapter.java:173)
>>         at org.apache.ignite.internal.processors.cache.query.
>> GridCacheDistributedQueryManager$5.onHasNext(
>> GridCacheDistributedQueryManager.java:645)
>>         at org.apache.ignite.internal.util.GridCloseableIteratorAdapter.
>> hasNextX(GridCloseableIteratorAdapter.java:53)
>>         at org.apache.ignite.internal.util.lang.GridIteratorAdapter.
>> hasNext(GridIteratorAdapter.java:45)
>>         at org.apache.ignite.internal.processors.cache.
>> AutoClosableCursorIterator.hasNext(AutoClosableCursorIterator.java:49)
>>         at ScanQueryTest.main(ScanQueryTest.java:57)
>> Caused by: class org.apache.ignite.IgniteCheckedException: MyFilter
>>         at org.apache.ignite.internal.util.IgniteUtils.unmarshal(
>> IgniteUtils.java:10310)
>>         at org.apache.ignite.internal.processors.cache.query.
>> GridCacheQueryRequest.finishUnmarshal(GridCacheQueryRequest.java:389)
>>         at org.apache.ignite.internal.processors.cache.
>> GridCacheIoManager.unmarshall(GridCacheIoManager.java:1625)
>>         at org.apache.ignite.internal.processors.cache.
>> GridCacheIoManager.onMessage0(GridCacheIoManager.java:586)
>>         at org.apache.ignite.internal.processors.cache.
>> GridCacheIoManager.handleMessage(GridCacheIoManager.java:392)
>>         at org.apache.ignite.internal.processors.cache.
>> GridCacheIoManager.handleMessage(GridCacheIoManager.java:318)
>>         at org.apache.ignite.internal.processors.cache.
>> GridCacheIoManager.access$100(GridCacheIoManager.java:109)
>>         at org.apache.ignite.internal.processors.cache.
>> GridCacheIoManager$1.onMessage(GridCacheIoManager.java:308)
>>         at org.apache.ignite.internal.managers.communication.
>> GridIoManager.invokeListener(GridIoManager.java:1843)
>>         at org.apache.ignite.internal.managers.communication.
>> GridIoManager.processRegularMessage0(GridIoManager.java:1468)
>>         at org.apache.ignite.internal.managers.communication.
>> GridIoManager.access$5200(GridIoManager.java:229)
>>         at org.apache.ignite.internal.managers.communication.
>> GridIoManager$9.run(GridIoManager.java:1365)
>>         at java.base/java.util.concurrent.ThreadPoolExecutor.
>> runWorker(ThreadPoolExecutor.java:1128)
>>         at java.base/java.util.concurrent.ThreadPoolExecutor$
>> Worker.run(ThreadPoolExecutor.java:628)
>>         at java.base/java.lang.Thread.run(Thread.java:834)
>> Caused by: class org.apache.ignite.binary.BinaryInvalidTypeException:
>> MyFilter
>>         at org.apache.ignite.internal.binary.BinaryContext.
>> descriptorForTypeId(BinaryContext.java:724)
>>         at org.apache.ignite.internal.binary.BinaryContext.
>> descriptorForTypeId(BinaryContext.java:721)
>>         at org.apache.ignite.internal.binary.BinaryReaderExImpl.
>> deserialize0(BinaryReaderExImpl.java:1757)
>>         at org.apache.ignite.internal.binary.BinaryReaderExImpl.
>> deserialize(BinaryReaderExImpl.java:1716)
>>         at org.apache.ignite.internal.binary.GridBinaryMarshaller.
>> deserialize(GridBinaryMarshaller.java:307)
>>         at org.apache.ignite.internal.binary.BinaryMarshaller.
>> unmarshal0(BinaryMarshaller.java:101)
>>         at org.apache.ignite.marshaller.AbstractNodeNameAwareMarshalle
>> r.unmarshal(AbstractNodeNameAwareMarshaller.java:81)
>>         at org.apache.ignite.internal.util.IgniteUtils.unmarshal(
>> IgniteUtils.java:10304)
>>         ... 14 more
>> Caused by: java.lang.ClassNotFoundException: MyFilter
>>         at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(
>> BuiltinClassLoader.java:581)
>>         at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.
>> loadClass(ClassLoaders.java:178)
>>         at java.base/java.lang.ClassLoader.loadClass(
>> ClassLoader.java:522)
>>         at java.base/java.lang.Class.forName0(Native Method)
>>         at java.base/java.lang.Class.forName(Class.java:398)
>>         at org.apache.ignite.internal.util.IgniteUtils.forName(
>> IgniteUtils.java:8828)
>>         at org.apache.ignite.internal.MarshallerContextImpl.getClass(
>> MarshallerContextImpl.java:374)
>>         at org.apache.ignite.internal.binary.BinaryContext.
>> descriptorForTypeId(BinaryContext.java:715)
>>         ... 21 more
>>
>>
>>
>> On 7/1/20 7:09 PM, Denis Magda wrote:
>> > Hi Rafael,
>> >
>> > Lamdas and anonymous classes capture and serialize their
>> Inner/OuterClass
>> > with all the fields, and classes of the fields of those fields, etc. In
>> > your case, ScanQueryClass was captured during the lamda serialization
>> and
>> > that class was not found during deserialization on the other side:
>> >
>> > Caused by: class org.apache.ignite.binary.BinaryObjectException:
>> Failed to
>> > read field [name=capturingClass]
>> >         at
>> > org.apache.ignite.internal.binary.BinaryFieldAccessor.
>> read(BinaryFieldAccessor.java:192)
>> >         at
>> > org.apache.ignite.internal.binary.BinaryClassDescriptor.
>> read(BinaryClassDescriptor.java:874)
>> >         ... 20 more
>> > Caused by: class org.apache.ignite.binary.BinaryInvalidTypeException:
>> > ScanQueryTest
>> >         at
>> > org.apache.ignite.internal.binary.BinaryContext.descriptorForTypeId(
>> BinaryContext.java:724)
>> >         at
>> > org.apache.ignite.internal.binary.BinaryContext.descriptorForTypeId(
>> BinaryContext.java:721)
>> >         at
>> > org.apache.ignite.internal.binary.BinaryUtils.
>> doReadClass(BinaryUtils.java:1638)
>> >         at
>> > org.apache.ignite.internal.binary.BinaryUtils.
>> doReadClass(BinaryUtils.java:1575)
>> >         at
>> > org.apache.ignite.internal.binary.BinaryUtils.
>> doReadClass(BinaryUtils.java:1552)
>> >         at
>> > org.apache.ignite.internal.binary.BinaryReaderExImpl.
>> readClass(BinaryReaderExImpl.java:383)
>> >         at
>> > org.apache.ignite.internal.binary.BinaryFieldAccessor$
>> DefaultFinalClassAccessor.readFixedType(BinaryFieldAccessor.java:907)
>> >         at
>> > org.apache.ignite.internal.binary.BinaryFieldAccessor$
>> DefaultFinalClassAccessor.read0(BinaryFieldAccessor.java:703)
>> >         at
>> > org.apache.ignite.internal.binary.BinaryFieldAccessor.
>> read(BinaryFieldAccessor.java:188)
>> >         ... 21 more
>> > *Caused by: java.lang.ClassNotFoundException: ScanQueryTest*
>> >         at
>> > java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(
>> BuiltinClassLoader.java:581)
>> >         at
>> > java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.
>> loadClass(ClassLoaders.java:178)
>> >         at java.base/java.lang.ClassLoader.loadClass(
>> ClassLoader.java:522)
>> >         at java.base/java.lang.Class.forName0(Native Method)
>> >         at java.base/java.lang.Class.forName(Class.java:398)
>> >         at
>> > org.apache.ignite.internal.util.IgniteUtils.forName(
>> IgniteUtils.java:8828)
>> >         at
>> > org.apache.ignite.internal.MarshallerContextImpl.getClass(
>> MarshallerContextImpl.java:374)
>> >         at
>> > org.apache.ignite.internal.binary.BinaryContext.descriptorForTypeId(
>> BinaryContext.java:715)
>> >         ... 29 more
>> >
>> > My advice is to avoid using lambdas and anonymous classes due to this
>> > specificity. Instead, you can create "private static classes" and Ignite
>> > will be serializing an instance of that class only:
>> >
>> > private static class MyFilter implements IgniteClosure {
>> > ....
>> > }
>> >
>> > Lamdas are nice for demos and simple code samples where
>> Inner/OuterClasses
>> > are simple Java classes. While in real production environments, things
>> can
>> > get messy.
>> >
>> > -
>> > Denis
>> >
>> >
>> > On Wed, Jul 1, 2020 at 9:36 AM Rafael Troilo <rafael.tro...@heigit.org>
>> > wrote:
>> >
>> >> Hey Guys,
>> >>
>> >> I have a strange problem with the Transform part of a ScanQuery that I
>> get
>> >> a deserialize object exception for the SerializedLambda.
>> >>> javax.cache.CacheException: class
>> >> org.apache.ignite.IgniteCheckedException: Failed to deserialize object
>> >> [typeName=java.lang.invoke.SerializedLambda]
>> >>
>> >> Strange is that it works very well in other cases like:
>> >>
>> >> try (Ignite ignite = Ignition.start("ignite.xml")) {
>> >>   IgniteCache<Integer,String> cache =
>> >> ignite.createCache("ScanTransformTest");
>> >>   cache.put(1, "Hello");
>> >>
>> >>   // 1  Just a broadcast with a IgniteClosure works!
>> >>   compute.broadcast((a) -> 123L, "Hello").forEach(System.out::
>> println);
>> >>
>> >>   // 2 Running the ScanQuery on the remote server. Works too!
>> >>   compute.broadcast(() -> {
>> >>     try(QueryCursor<Long> cursor = cache.query(new
>> >> ScanQuery<>().setLocal(true), (a) -> 234L)){
>> >>       for( Long row : cursor) {
>> >>         return row;
>> >>       }
>> >>     }
>> >>     return 0;
>> >>   }).forEach(System.out::println);
>> >>
>> >>
>> >>   // 3 But running it from the client side it fails!
>> >>   try(QueryCursor<Long> cursor = cache.query(new ScanQuery<>(), (a) ->
>> >> 345L)){
>> >>     for( Long row : cursor) {
>> >>       System.out.println(row);
>> >>       break;
>> >>     }
>> >>   }
>> >>
>> >> }
>> >>
>> >> Also changing the Lambda to a actually class implementing IgniteClosure
>> >> results in the same problem.
>> >>
>> >> Any idea what I'm doing wrong?
>> >>
>> >> We are running ignite ver. 2.8.0#20200226-sha1:341b01df
>> >> With java openjdk 11.0.7 2020-04-14
>> >>
>> >> Thank you!
>> >>
>> >> Best,
>> >> Rafael
>> >>
>> >>
>> >> Error Log:
>> >> Exception in thread "main" javax.cache.CacheException: class
>> >> org.apache.ignite.IgniteCheckedException: Failed to deserialize object
>> >> [typeName=java.lang.invoke.SerializedLambda]
>> >>         at
>> >> org.apache.ignite.internal.processors.cache.GridCacheUtils.
>> convertToCacheException(GridCacheUtils.java:1317)
>> >>         at
>> >> org.apache.ignite.internal.processors.cache.query.
>> GridCacheQueryFutureAdapter.next(GridCacheQueryFutureAdapter.java:173)
>> >>         at
>> >> org.apache.ignite.internal.processors.cache.query.
>> GridCacheDistributedQueryManager$5.onHasNext(
>> GridCacheDistributedQueryManager.java:645)
>> >>         at
>> >> org.apache.ignite.internal.util.GridCloseableIteratorAdapter.hasNextX(
>> GridCloseableIteratorAdapter.java:53)
>> >>         at
>> >> org.apache.ignite.internal.util.lang.GridIteratorAdapter.
>> hasNext(GridIteratorAdapter.java:45)
>> >>         at
>> >> org.apache.ignite.internal.processors.cache.
>> AutoClosableCursorIterator.hasNext(AutoClosableCursorIterator.java:49)
>> >>         at ScanQueryTest.main(ScanQueryTest.java:49)
>> >> Caused by: class org.apache.ignite.IgniteCheckedException: Failed to
>> >> deserialize object [typeName=java.lang.invoke.SerializedLambda]
>> >>         at
>> >> org.apache.ignite.internal.util.IgniteUtils.unmarshal(
>> IgniteUtils.java:10310)
>> >>         at
>> >> org.apache.ignite.internal.processors.cache.query.
>> GridCacheQueryRequest.finishUnmarshal(GridCacheQueryRequest.java:389)
>> >>         at
>> >> org.apache.ignite.internal.processors.cache.
>> GridCacheIoManager.unmarshall(GridCacheIoManager.java:1625)
>> >>         at
>> >> org.apache.ignite.internal.processors.cache.
>> GridCacheIoManager.onMessage0(GridCacheIoManager.java:586)
>> >>         at
>> >> org.apache.ignite.internal.processors.cache.GridCacheIoManager.
>> handleMessage(GridCacheIoManager.java:392)
>> >>         at
>> >> org.apache.ignite.internal.processors.cache.GridCacheIoManager.
>> handleMessage(GridCacheIoManager.java:318)
>> >>         at
>> >> org.apache.ignite.internal.processors.cache.
>> GridCacheIoManager.access$100(GridCacheIoManager.java:109)
>> >>         at
>> >> org.apache.ignite.internal.processors.cache.GridCacheIoManager$1.
>> onMessage(GridCacheIoManager.java:308)
>> >>         at
>> >> org.apache.ignite.internal.managers.communication.
>> GridIoManager.invokeListener(GridIoManager.java:1843)
>> >>         at
>> >> org.apache.ignite.internal.managers.communication.GridIoManager.
>> processRegularMessage0(GridIoManager.java:1468)
>> >>         at
>> >> org.apache.ignite.internal.managers.communication.
>> GridIoManager.access$5200(GridIoManager.java:229)
>> >>         at
>> >> org.apache.ignite.internal.managers.communication.GridIoManager$9.run(
>> GridIoManager.java:1365)
>> >>         at
>> >> java.base/java.util.concurrent.ThreadPoolExecutor.
>> runWorker(ThreadPoolExecutor.java:1128)
>> >>         at
>> >> java.base/java.util.concurrent.ThreadPoolExecutor$
>> Worker.run(ThreadPoolExecutor.java:628)
>> >>         at java.base/java.lang.Thread.run(Thread.java:834)
>> >> Caused by: class org.apache.ignite.binary.BinaryObjectException:
>> Failed to
>> >> deserialize object [typeName=java.lang.invoke.SerializedLambda]
>> >>         at
>> >> org.apache.ignite.internal.binary.BinaryClassDescriptor.
>> read(BinaryClassDescriptor.java:913)
>> >>         at
>> >> org.apache.ignite.internal.binary.BinaryReaderExImpl.deserialize0(
>> BinaryReaderExImpl.java:1764)
>> >>         at
>> >> org.apache.ignite.internal.binary.BinaryReaderExImpl.deserialize(
>> BinaryReaderExImpl.java:1716)
>> >>         at
>> >> org.apache.ignite.internal.binary.GridBinaryMarshaller.deserialize(
>> GridBinaryMarshaller.java:307)
>> >>         at
>> >> org.apache.ignite.internal.binary.BinaryMarshaller.
>> unmarshal0(BinaryMarshaller.java:101)
>> >>         at
>> >> org.apache.ignite.marshaller.AbstractNodeNameAwareMarshalle
>> r.unmarshal(AbstractNodeNameAwareMarshaller.java:81)
>> >>         at
>> >> org.apache.ignite.internal.util.IgniteUtils.unmarshal(
>> IgniteUtils.java:10304)
>> >>         ... 14 more
>> >> Caused by: class org.apache.ignite.binary.BinaryObjectException:
>> Failed to
>> >> read field [name=capturingClass]
>> >>         at
>> >> org.apache.ignite.internal.binary.BinaryFieldAccessor.
>> read(BinaryFieldAccessor.java:192)
>> >>         at
>> >> org.apache.ignite.internal.binary.BinaryClassDescriptor.
>> read(BinaryClassDescriptor.java:874)
>> >>         ... 20 more
>> >> Caused by: class org.apache.ignite.binary.BinaryInvalidTypeException:
>> >> ScanQueryTest
>> >>         at
>> >> org.apache.ignite.internal.binary.BinaryContext.descriptorForTypeId(
>> BinaryContext.java:724)
>> >>         at
>> >> org.apache.ignite.internal.binary.BinaryContext.descriptorForTypeId(
>> BinaryContext.java:721)
>> >>         at
>> >> org.apache.ignite.internal.binary.BinaryUtils.
>> doReadClass(BinaryUtils.java:1638)
>> >>         at
>> >> org.apache.ignite.internal.binary.BinaryUtils.
>> doReadClass(BinaryUtils.java:1575)
>> >>         at
>> >> org.apache.ignite.internal.binary.BinaryUtils.
>> doReadClass(BinaryUtils.java:1552)
>> >>         at
>> >> org.apache.ignite.internal.binary.BinaryReaderExImpl.
>> readClass(BinaryReaderExImpl.java:383)
>> >>         at
>> >> org.apache.ignite.internal.binary.BinaryFieldAccessor$
>> DefaultFinalClassAccessor.readFixedType(BinaryFieldAccessor.java:907)
>> >>         at
>> >> org.apache.ignite.internal.binary.BinaryFieldAccessor$
>> DefaultFinalClassAccessor.read0(BinaryFieldAccessor.java:703)
>> >>         at
>> >> org.apache.ignite.internal.binary.BinaryFieldAccessor.
>> read(BinaryFieldAccessor.java:188)
>> >>         ... 21 more
>> >> Caused by: java.lang.ClassNotFoundException: ScanQueryTest
>> >>         at
>> >> java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(
>> BuiltinClassLoader.java:581)
>> >>         at
>> >> java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.
>> loadClass(ClassLoaders.java:178)
>> >>         at java.base/java.lang.ClassLoader.loadClass(
>> ClassLoader.java:522)
>> >>         at java.base/java.lang.Class.forName0(Native Method)
>> >>         at java.base/java.lang.Class.forName(Class.java:398)
>> >>         at
>> >> org.apache.ignite.internal.util.IgniteUtils.forName(
>> IgniteUtils.java:8828)
>> >>         at
>> >> org.apache.ignite.internal.MarshallerContextImpl.getClass(
>> MarshallerContextImpl.java:374)
>> >>         at
>> >> org.apache.ignite.internal.binary.BinaryContext.descriptorForTypeId(
>> BinaryContext.java:715)
>> >>         ... 29 more
>> >>
>> >>
>> >>
>> >>
>> >>
>> >> --
>> >> Rafael Troilo
>> >> HeiGIT gGmbH
>> >> Heidelberg Institute for Geoinformation Technology at Heidelberg
>> University
>> >>
>> >> https://heigit.org | rafael.tro...@heigit.org | phone +49-6221-533 484
>> >>
>> >> Postal address: Schloss-Wolfsbrunnenweg 33 | 69118 Heidelberg |
>> Germany
>> <https://www.google.com/maps/search/Schloss-Wolfsbrunnenweg+33+%7C+69118+Heidelberg+%7C+Germany?entry=gmail&source=g>
>> >> Offices: Berliner Str. 45 | 69120 Heidelberg | Germany
>> <https://www.google.com/maps/search/Berliner+Str.+45+%7C+69120+Heidelberg+%7C+Germany?entry=gmail&source=g>
>> >>
>> >> Amtsgericht Mannheim | HRB 733765
>> >> Managing Directors: Prof. Dr. Alexander Zipf | Dr. Gesa Schönberger
>> >>
>> >
>>
>> --
>> Rafael Troilo
>> HeiGIT gGmbH
>> Heidelberg Institute for Geoinformation Technology at Heidelberg
>> University
>>
>> https://heigit.org | rafael.tro...@heigit.org | phone +49-6221-533 484
>>
>> Postal address: Schloss-Wolfsbrunnenweg 33 | 69118 Heidelberg | Germany
>> <https://www.google.com/maps/search/Schloss-Wolfsbrunnenweg+33+%7C+69118+Heidelberg+%7C+Germany?entry=gmail&source=g>
>> Offices: Berliner Str. 45 | 69120 Heidelberg | Germany
>> <https://www.google.com/maps/search/Berliner+Str.+45+%7C+69120+Heidelberg+%7C+Germany?entry=gmail&source=g>
>>
>> Amtsgericht Mannheim | HRB 733765
>> Managing Directors: Prof. Dr. Alexander Zipf | Dr. Gesa Schönberger
>>
>

-- 
-
Denis

Reply via email to