Hi,
Looks like a bug and CacheEntryPredicateContainsValue shouldn't deserialize
value to compare BinaryObjects in case of replace() operation.
Feel free to fill a ticket for this.



On Thu, Sep 7, 2017 at 9:50 AM, saikiran939 <saikiran...@gmail.com> wrote:

> Hi Team,
>
> Our team on working on a usecase in which we don't want to have any classes
> on Ignite Server node's classpath. To achieve this we are making use of
> BinaryObject based querying and putting/replacing values into cache.
>
> We are also using Optimistic Locking to replace the values into cache using
> "binaryObjectcache.replace(key, oldValue, newValue)" API - this method
> fails
> with ClassNotFoundException when used in client/server topology if the
> cache
> value class is not present at server's classpath. Sample piece of code is
> given below:
>
> String key = "key1";
> CacheValue entry1 = new CacheValue("putsomevalue");
> IgniteCache<String, CacheValue> cache = ignite.getOrCreateCache(cacheCfg);
> cache.put(key, entry1); //put works fine even if there is no class present
> in server's classpath
>
> CacheValue replaceEntry1 = cache.get(key);
> replaceEntry1.location= "test";
>
> IgniteCache<String, BinaryObject> binaryCacheProjection =
> cache.withKeepBinary();
> BinaryObject oldValueInBinary = binaryCacheProjection.get(key);
> BinaryObject newValueInBinary = ignite.binary().toBinary(replaceEntry1);
> binaryCacheProjection.replace(key, oldValueInBinary, newValueInBinary);
>
> The last replace() method call fails with below exception, is this bug in
> ignite because put() API works or is there anyway to workaround this
> exception ? I think from the stacktrace ignite server is trying to
> deserialize value object even if it is binary. I get the same exception
> with
> normal cache.replace() API .
>
> Exception in thread "main"
> org.apache.ignite.cache.CachePartialUpdateException: Failed to update keys
> (retry update if possible).: [OP21|SHARED]
>         at
> org.apache.ignite.internal.processors.cache.GridCacheUtils.
> convertToCacheException(GridCacheUtils.java:1488)
>         at
> org.apache.ignite.internal.processors.cache.IgniteCacheProxy.
> cacheException(IgniteCacheProxy.java:2021)
>         at
> org.apache.ignite.internal.processors.cache.IgniteCacheProxy.replace(
> IgniteCacheProxy.java:1393)
>         at
> com.ignite.binary.TestReplaceBinaryObject.populateCache(
> TestReplaceBinaryObject.java:166)
>         at
> com.ignite.binary.TestReplaceBinaryObject.main(
> TestReplaceBinaryObject.java:60)
>         at com.ignite.binary.IgniteDriver.main(IgniteDriver.java:11)
> Caused by: class
> org.apache.ignite.internal.processors.cache.CachePartialUpdateCheckedExcep
> tion:
> Failed to update keys (retry update if possible).: [OP21|SHARED]
>         at
> org.apache.ignite.internal.processors.cache.distributed.dht.atomic.
> GridNearAtomicSingleUpdateFuture.onResult(GridNearAtomicSingleUpdateFutu
> re.java:232)
>         at
> org.apache.ignite.internal.processors.cache.distributed.
> dht.atomic.GridDhtAtomicCache.processNearAtomicUpdateRespons
> e(GridDhtAtomicCache.java:2969)
>         at
> org.apache.ignite.internal.processors.cache.distributed.
> dht.atomic.GridDhtAtomicCache.access$700(GridDhtAtomicCache.java:130)
>         at
> org.apache.ignite.internal.processors.cache.distributed.
> dht.atomic.GridDhtAtomicCache$6.apply(GridDhtAtomicCache.java:274)
>         at
> org.apache.ignite.internal.processors.cache.distributed.
> dht.atomic.GridDhtAtomicCache$6.apply(GridDhtAtomicCache.java:272)
>         at
> org.apache.ignite.internal.processors.cache.GridCacheIoManager.
> processMessage(GridCacheIoManager.java:748)
>         at
> org.apache.ignite.internal.processors.cache.GridCacheIoManager.onMessage0(
> GridCacheIoManager.java:353)
>         at
> org.apache.ignite.internal.processors.cache.GridCacheIoManager.
> handleMessage(GridCacheIoManager.java:277)
>         at
> org.apache.ignite.internal.processors.cache.GridCacheIoManager.access$000(
> GridCacheIoManager.java:88)
>         at
> org.apache.ignite.internal.processors.cache.GridCacheIoManager$1.
> onMessage(GridCacheIoManager.java:231)
>         at
> org.apache.ignite.internal.managers.communication.
> GridIoManager.invokeListener(GridIoManager.java:1238)
>         at
> org.apache.ignite.internal.managers.communication.GridIoManager.
> processRegularMessage0(GridIoManager.java:866)
>         at
> org.apache.ignite.internal.managers.communication.
> GridIoManager.access$1700(GridIoManager.java:106)
>         at
> org.apache.ignite.internal.managers.communication.GridIoManager$5.run(
> GridIoManager.java:829)
>         at
> java.util.concurrent.ThreadPoolExecutor.runWorker(
> ThreadPoolExecutor.java:1145)
>         at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(
> ThreadPoolExecutor.java:615)
>         at java.lang.Thread.run(Thread.java:722)
>         Suppressed: class org.apache.ignite.IgniteCheckedException:
> Failed to
> update keys on primary node.
>                 at
> org.apache.ignite.internal.processors.cache.distributed.dht.atomic.
> GridNearAtomicUpdateResponse.addFailedKey(GridNearAtomicUpdateResponse.
> java:350)
>                 at
> org.apache.ignite.internal.processors.cache.distributed.
> dht.atomic.GridDhtAtomicCache.updateSingle(GridDhtAtomicCache.java:2393)
>                 at
> org.apache.ignite.internal.processors.cache.distributed.
> dht.atomic.GridDhtAtomicCache.updateAllAsyncInternal0(
> GridDhtAtomicCache.java:1652)
>                 at
> org.apache.ignite.internal.processors.cache.distributed.
> dht.atomic.GridDhtAtomicCache.updateAllAsyncInternal(
> GridDhtAtomicCache.java:1490)
>                 at
> org.apache.ignite.internal.processors.cache.distributed.
> dht.atomic.GridDhtAtomicCache.processNearAtomicUpdateRequest
> (GridDhtAtomicCache.java:2950)
>                 at
> org.apache.ignite.internal.processors.cache.distributed.
> dht.atomic.GridDhtAtomicCache.access$600(GridDhtAtomicCache.java:130)
>                 at
> org.apache.ignite.internal.processors.cache.distributed.
> dht.atomic.GridDhtAtomicCache$5.apply(GridDhtAtomicCache.java:268)
>                 at
> org.apache.ignite.internal.processors.cache.distributed.
> dht.atomic.GridDhtAtomicCache$5.apply(GridDhtAtomicCache.java:266)
>                 ... 12 more
>                 Suppressed: class org.apache.ignite.
> IgniteCheckedException:
> com.ignite.binary.CacheValue
>                         at
> org.apache.ignite.internal.util.IgniteUtils.cast(IgniteUtils.java:7142)
>                         at
> org.apache.ignite.internal.processors.cache.GridCacheContext.isAllLocked(
> GridCacheContext.java:1252)
>                         at
> org.apache.ignite.internal.processors.cache.GridCacheMapEntry.innerUpdate(
> GridCacheMapEntry.java:2241)
>                         at
> org.apache.ignite.internal.processors.cache.distributed.
> dht.atomic.GridDhtAtomicCache.updateSingle(GridDhtAtomicCache.java:2252)
>                         ... 18 more
>                 Caused by: java.lang.ClassNotFoundException:
> com.ignite.binary.CacheValue
>                         at java.net.URLClassLoader$1.run(
> URLClassLoader.java:366)
>                         at java.net.URLClassLoader$1.run(
> URLClassLoader.java:355)
>                         at java.security.AccessController.doPrivileged(Native
> Method)
>                         at java.net.URLClassLoader.
> findClass(URLClassLoader.java:354)
>                         at java.lang.ClassLoader.
> loadClass(ClassLoader.java:423)
>                         at sun.misc.Launcher$AppClassLoader.loadClass(
> Launcher.java:308)
>                         at java.lang.ClassLoader.
> loadClass(ClassLoader.java:356)
>                         at java.lang.Class.forName0(Native Method)
>                         at java.lang.Class.forName(Class.java:266)
>                         at
> org.apache.ignite.internal.util.IgniteUtils.forName(IgniteUtils.java:8350)
>                         at
> org.apache.ignite.internal.MarshallerContextAdapter.getClass(
> MarshallerContextAdapter.java:185)
>                         at
> org.apache.ignite.internal.binary.BinaryContext.descriptorForTypeId(
> BinaryContext.java:662)
>                         at
> org.apache.ignite.internal.binary.BinaryReaderExImpl.deserialize(
> BinaryReaderExImpl.java:1474)
>                         at
> org.apache.ignite.internal.binary.BinaryObjectImpl.deserializeValue(
> BinaryObjectImpl.java:585)
>                         at
> org.apache.ignite.internal.binary.BinaryObjectImpl.value(
> BinaryObjectImpl.java:142)
>                         at
> org.apache.ignite.internal.processors.cache.GridCacheUtils.value(
> GridCacheUtils.java:1512)
>                         at
> org.apache.ignite.internal.processors.cache.CacheEntryPredicateContainsVal
> ue.apply(CacheEntryPredicateContainsValue.java:63)
>                         at
> org.apache.ignite.internal.processors.cache.CacheEntryPredicateContainsVal
> ue.apply(CacheEntryPredicateContainsValue.java:32)
>                         at
> org.apache.ignite.internal.processors.cache.GridCacheContext.isAllLocked(
> GridCacheContext.java:1246)
>                         ... 20 more
>
>
>
>
>
> --
> Sent from: http://apache-ignite-users.70518.x6.nabble.com/
>



-- 
Best regards,
Andrey V. Mashenkov

Reply via email to