Re: BinaryObject model replace() in client/server topology fails with ClassNotFoundFunction

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

Re: BinaryObject model replace() in client/server topology fails with ClassNotFoundFunction

Andrew Mashenkov
Crossposting to dev list.

Guys,
Do we have any ETA for next releases?
I see no dates on release page [1].

[1]
https://issues.apache.org/jira/projects/IGNITE?selectedItem=com.atlassian.jira.jira-projects-plugin:release-page

On Mon, Sep 11, 2017 at 2:00 PM, Andrey Mashenkov <
[hidden email]> wrote:

> I've created a ticket for this [1].
> As a workaround you can try to use cache.invoke() with own comparison
> implementation inside EntryProcessor.
>
> Unfortunately, there is no release dated filled on apache ignite releases
> page [2].
> Usually, new Ignite release become available twice a year.
>
> [1] https://issues.apache.org/jira/browse/IGNITE-6332
> [2] https://issues.apache.org/jira/projects/IGNITE?
> selectedItem=com.atlassian.jira.jira-projects-plugin:release-page
>
> On Thu, Sep 7, 2017 at 9:50 PM, sai kiran nukala <[hidden email]>
> wrote:
>
>> Thanks for the reply.
>>
>> How do I file a ticket ?
>>
>> I know it is still early stage, usually how long it takes to fix this bug
>> and release a version because we need this functionality working for our
>> use case.
>>
>> On Sep 7, 2017 10:22 PM, "Andrey Mashenkov" <[hidden email]>
>> wrote:
>>
>> 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 <[hidden email]>
>> 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(cacheC
>>> fg);
>>> 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.c
>>> onvertToCacheException(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(Test
>>> ReplaceBinaryObject.java:166)
>>>         at
>>> com.ignite.binary.TestReplaceBinaryObject.main(TestReplaceBi
>>> naryObject.java:60)
>>>         at com.ignite.binary.IgniteDriver.main(IgniteDriver.java:11)
>>> Caused by: class
>>> org.apache.ignite.internal.processors.cache.CachePartialUpda
>>> teCheckedException:
>>> Failed to update keys (retry update if possible).: [OP21|SHARED]
>>>         at
>>> org.apache.ignite.internal.processors.cache.distributed.dht.
>>> atomic.GridNearAtomicSingleUpdateFuture.onResult(GridNearAto
>>> micSingleUpdateFuture.java:232)
>>>         at
>>> org.apache.ignite.internal.processors.cache.distributed.dht.
>>> atomic.GridDhtAtomicCache.processNearAtomicUpdateResponse(Gr
>>> idDhtAtomicCache.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.GridCacheIoManag
>>> er.processMessage(GridCacheIoManager.java:748)
>>>         at
>>> org.apache.ignite.internal.processors.cache.GridCacheIoManag
>>> er.onMessage0(GridCacheIoManager.java:353)
>>>         at
>>> org.apache.ignite.internal.processors.cache.GridCacheIoManag
>>> er.handleMessage(GridCacheIoManager.java:277)
>>>         at
>>> org.apache.ignite.internal.processors.cache.GridCacheIoManag
>>> er.access$000(GridCacheIoManager.java:88)
>>>         at
>>> org.apache.ignite.internal.processors.cache.GridCacheIoManag
>>> er$1.onMessage(GridCacheIoManager.java:231)
>>>         at
>>> org.apache.ignite.internal.managers.communication.GridIoMana
>>> ger.invokeListener(GridIoManager.java:1238)
>>>         at
>>> org.apache.ignite.internal.managers.communication.GridIoMana
>>> ger.processRegularMessage0(GridIoManager.java:866)
>>>         at
>>> org.apache.ignite.internal.managers.communication.GridIoMana
>>> ger.access$1700(GridIoManager.java:106)
>>>         at
>>> org.apache.ignite.internal.managers.communication.GridIoMana
>>> ger$5.run(GridIoManager.java:829)
>>>         at
>>> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPool
>>> Executor.java:1145)
>>>         at
>>> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoo
>>> lExecutor.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(GridNearAto
>>> micUpdateResponse.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(GridDhtAto
>>> micCache.java:1652)
>>>                 at
>>> org.apache.ignite.internal.processors.cache.distributed.dht.
>>> atomic.GridDhtAtomicCache.updateAllAsyncInternal(GridDhtAtom
>>> icCache.java:1490)
>>>                 at
>>> org.apache.ignite.internal.processors.cache.distributed.dht.
>>> atomic.GridDhtAtomicCache.processNearAtomicUpdateRequest(Gri
>>> dDhtAtomicCache.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.IgniteChecke
>>> dException:
>>> 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.GridCacheMapEntr
>>> y.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.findCl
>>> ass(URLClassLoader.java:354)
>>>                         at java.lang.ClassLoader.loadClas
>>> s(ClassLoader.java:423)
>>>                         at sun.misc.Launcher$AppClassLoad
>>> er.loadClass(Launcher.java:308)
>>>                         at java.lang.ClassLoader.loadClas
>>> s(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(IgniteUt
>>> ils.java:8350)
>>>                         at
>>> org.apache.ignite.internal.MarshallerContextAdapter.getClass
>>> (MarshallerContextAdapter.java:185)
>>>                         at
>>> org.apache.ignite.internal.binary.BinaryContext.descriptorFo
>>> rTypeId(BinaryContext.java:662)
>>>                         at
>>> org.apache.ignite.internal.binary.BinaryReaderExImpl.deseria
>>> lize(BinaryReaderExImpl.java:1474)
>>>                         at
>>> org.apache.ignite.internal.binary.BinaryObjectImpl.deseriali
>>> zeValue(BinaryObjectImpl.java:585)
>>>                         at
>>> org.apache.ignite.internal.binary.BinaryObjectImpl.value(Bin
>>> aryObjectImpl.java:142)
>>>                         at
>>> org.apache.ignite.internal.processors.cache.GridCacheUtils.v
>>> alue(GridCacheUtils.java:1512)
>>>                         at
>>> org.apache.ignite.internal.processors.cache.CacheEntryPredic
>>> ateContainsValue.apply(CacheEntryPredicateContainsValue.java:63)
>>>                         at
>>> org.apache.ignite.internal.processors.cache.CacheEntryPredic
>>> ateContainsValue.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
>>
>>
>>
>
>
> --
> Best regards,
> Andrey V. Mashenkov
>



--
Best regards,
Andrey V. Mashenkov