That’s a great investigation! I think the developer mailing list 
(http://apache-ignite-developers.2346864.n4.nabble.com) would be a better place 
to discuss the best way to fix it, though.

Regards,
Stephen

> On 2 Jan 2019, at 07:20, otorreno <oscar.torr...@shapelets.io> wrote:
> 
> Hi everyone,
> 
> After the new release (2.7.0), I have been playing around with the machine
> learning algorithms a bit.
> We have some data in a cache created with the "withKeepBinary()" option, and
> I wanted
> to test if the machine learning algos would work with such a cache. I tried,
> but it fails with the following stacktrace:
> 
> org.apache.ignite.IgniteException: testType
>    at
> org.apache.ignite.internal.processors.closure.GridClosureProcessor$C2.execute(GridClosureProcessor.java:1858)
>    at
> org.apache.ignite.internal.processors.job.GridJobWorker$2.call(GridJobWorker.java:568)
>    at
> org.apache.ignite.internal.util.IgniteUtils.wrapThreadLoader(IgniteUtils.java:6816)
>    at
> org.apache.ignite.internal.processors.job.GridJobWorker.execute0(GridJobWorker.java:562)
>    at
> org.apache.ignite.internal.processors.job.GridJobWorker.body(GridJobWorker.java:491)
>    at
> org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java:120)
>    at
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
>    at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
>    at java.lang.Thread.run(Thread.java:748)
> Caused by: org.apache.ignite.binary.BinaryInvalidTypeException: testType
>    at
> org.apache.ignite.internal.binary.BinaryContext.descriptorForTypeId(BinaryContext.java:707)
>    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.BinaryObjectImpl.deserializeValue(BinaryObjectImpl.java:798)
>    at
> org.apache.ignite.internal.binary.BinaryObjectImpl.value(BinaryObjectImpl.java:143)
>    at
> org.apache.ignite.internal.processors.cache.CacheObjectUtils.unwrapBinary(CacheObjectUtils.java:177)
>    at
> org.apache.ignite.internal.processors.cache.CacheObjectUtils.unwrapBinaryIfNeeded(CacheObjectUtils.java:39)
>    at
> org.apache.ignite.internal.processors.cache.query.GridCacheQueryManager$ScanQueryIterator.advance(GridCacheQueryManager.java:3063)
>    at
> org.apache.ignite.internal.processors.cache.query.GridCacheQueryManager$ScanQueryIterator.onHasNext(GridCacheQueryManager.java:2965)
>    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.ml.dataset.impl.cache.util.ComputeUtils.computeCount(ComputeUtils.java:313)
>    at
> org.apache.ignite.ml.dataset.impl.cache.util.ComputeUtils.computeCount(ComputeUtils.java:300)
>    at
> org.apache.ignite.ml.dataset.impl.cache.util.ComputeUtils.lambda$initContext$9b68d858$1(ComputeUtils.java:222)
>    at
> org.apache.ignite.ml.dataset.impl.cache.util.ComputeUtils.lambda$affinityCallWithRetries$b46c4136$1(ComputeUtils.java:90)
>    at
> org.apache.ignite.internal.processors.closure.GridClosureProcessor$C2.execute(GridClosureProcessor.java:1855)
>    ... 8 common frames omitted
> Caused by: java.lang.ClassNotFoundException: testType
>    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
>    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
>    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:338)
>    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
>    at java.lang.Class.forName0(Native Method)
>    at java.lang.Class.forName(Class.java:348)
>    at
> org.apache.ignite.internal.util.IgniteUtils.forName(IgniteUtils.java:8771)
>    at
> org.apache.ignite.internal.MarshallerContextImpl.getClass(MarshallerContextImpl.java:349)
>    at
> org.apache.ignite.internal.binary.BinaryContext.descriptorForTypeId(BinaryContext.java:698)
>    ... 23 common frames omitted
> 
> Debugging, I found the source of the error, at some point you are just
> taking the
> name of the upstreamCache (where the data resides), and creating a new
> IgniteCache
> object using such name before copying the data to a dataset cache. However,
> you
> are not using the keepBinary property of the original cache. I hardcoded the
> "withKeepBinary()" to the following lines:
> https://github.com/apache/ignite/blob/2.7.0/modules/ml/src/main/java/org/apache/ignite/ml/dataset/impl/cache/util/ComputeUtils.java#L162
> https://github.com/apache/ignite/blob/2.7.0/modules/ml/src/main/java/org/apache/ignite/ml/dataset/impl/cache/util/ComputeUtils.java#L215
> https://github.com/apache/ignite/blob/2.7.0/modules/ml/src/main/java/org/apache/ignite/ml/dataset/impl/cache/CacheBasedDatasetBuilder.java#L99
> 
> The previous made it work. I tried to retrieve the keep binary property from
> the
> upstreamCache, but I was not able to find the right method to obtain it (I
> saw the property is
> stored in the operation context field (opCtx), but it is private and cannot
> be
> accessed from the lines I modified)
> 
> My example code is available at:
> https://gist.github.com/otorreno/ca6c5347c1bbde2d4fedd02b51d02cbb
> 
> Any plans on making the machine learning algorithms work with caches with
> keepBinary set to true?
> 
> 
> 
> --
> Sent from: http://apache-ignite-users.70518.x6.nabble.com/


Reply via email to