[ https://issues.apache.org/jira/browse/IGNITE-10789?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17180499#comment-17180499 ]
Stanilovsky Evgeny edited comment on IGNITE-10789 at 8/19/20, 12:17 PM: ------------------------------------------------------------------------ [~ptupitsyn] seems this request\functional need to be correctly documented and all errors: inner - from grid server side and outer - which would be thrown on client side need to be informative. I prepare fix, plz take a look ? TC in progress. was (Author: zstan): [~ptupitsyn] seems this request\functional need to be correctly documented and all errors: inner - from grid server side and outer - which would be thrown on client side. I prepare fix, plz take a look ? TC in progress. > CacheInterceptor on server node get BinaryObject if put was invoked by > ClientCache. > ----------------------------------------------------------------------------------- > > Key: IGNITE-10789 > URL: https://issues.apache.org/jira/browse/IGNITE-10789 > Project: Ignite > Issue Type: Bug > Components: cache > Affects Versions: 2.7 > Reporter: Sergey Antonov > Assignee: Stanilovsky Evgeny > Priority: Major > Time Spent: 0.5h > Remaining Estimate: 0h > > Cache interceptor on server node expects deserialized object, but gets > BinaryObject in case of put was from thin client. > The exception is following: > {noformat} > [2018-12-21 > 17:25:08,213][ERROR][client-connector-#53%cache.Test20%][ClientListenerNioListener] > Failed to process client request > [req=o.a.i.i.processors.platform.client.cache.ClientCachePutRequest@72009659] > org.apache.ignite.cache.CachePartialUpdateException: Failed to update keys > (retry update if possible).: [key] > at > org.apache.ignite.internal.processors.cache.GridCacheUtils.convertToCacheException(GridCacheUtils.java:1313) > at > org.apache.ignite.internal.processors.cache.IgniteCacheProxyImpl.cacheException(IgniteCacheProxyImpl.java:1754) > at > org.apache.ignite.internal.processors.cache.IgniteCacheProxyImpl.put(IgniteCacheProxyImpl.java:1107) > at > org.apache.ignite.internal.processors.cache.GatewayProtectedCacheProxy.put(GatewayProtectedCacheProxy.java:820) > at > org.apache.ignite.internal.processors.platform.client.cache.ClientCachePutRequest.process(ClientCachePutRequest.java:40) > at > org.apache.ignite.internal.processors.platform.client.ClientRequestHandler.handle(ClientRequestHandler.java:52) > at > org.apache.ignite.internal.processors.odbc.ClientListenerNioListener.onMessage(ClientListenerNioListener.java:174) > at > org.apache.ignite.internal.processors.odbc.ClientListenerNioListener.onMessage(ClientListenerNioListener.java:48) > at > org.apache.ignite.internal.util.nio.GridNioFilterChain$TailFilter.onMessageReceived(GridNioFilterChain.java:279) > at > org.apache.ignite.internal.util.nio.GridNioFilterAdapter.proceedMessageReceived(GridNioFilterAdapter.java:109) > at > org.apache.ignite.internal.util.nio.GridNioAsyncNotifyFilter$3.body(GridNioAsyncNotifyFilter.java:97) > at > org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java:120) > at > org.apache.ignite.internal.util.worker.GridWorkerPool$1.run(GridWorkerPool.java:70) > 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: class > org.apache.ignite.internal.processors.cache.CachePartialUpdateCheckedException: > Failed to update keys (retry update if possible).: [key] > at > org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridNearAtomicAbstractUpdateFuture.onPrimaryError(GridNearAtomicAbstractUpdateFuture.java:397) > at > org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridNearAtomicSingleUpdateFuture.onPrimaryResponse(GridNearAtomicSingleUpdateFuture.java:252) > at > org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridNearAtomicAbstractUpdateFuture$1.apply(GridNearAtomicAbstractUpdateFuture.java:304) > at > org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridNearAtomicAbstractUpdateFuture$1.apply(GridNearAtomicAbstractUpdateFuture.java:301) > at > org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicAbstractUpdateFuture.map(GridDhtAtomicAbstractUpdateFuture.java:394) > at > org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.updateAllAsyncInternal0(GridDhtAtomicCache.java:1942) > at > org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.updateAllAsyncInternal(GridDhtAtomicCache.java:1671) > at > org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridNearAtomicAbstractUpdateFuture.sendSingleRequest(GridNearAtomicAbstractUpdateFuture.java:300) > at > org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridNearAtomicSingleUpdateFuture.map(GridNearAtomicSingleUpdateFuture.java:482) > at > org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridNearAtomicSingleUpdateFuture.mapOnTopology(GridNearAtomicSingleUpdateFuture.java:442) > at > org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridNearAtomicAbstractUpdateFuture.map(GridNearAtomicAbstractUpdateFuture.java:249) > at > org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.update0(GridDhtAtomicCache.java:1153) > at > org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.put0(GridDhtAtomicCache.java:613) > at > org.apache.ignite.internal.processors.cache.GridCacheAdapter.put(GridCacheAdapter.java:2499) > at > org.apache.ignite.internal.processors.cache.GridCacheAdapter.put(GridCacheAdapter.java:2476) > at > org.apache.ignite.internal.processors.cache.IgniteCacheProxyImpl.put(IgniteCacheProxyImpl.java:1104) > ... 13 more > Suppressed: class org.apache.ignite.IgniteCheckedException: Failed to > update keys. > at > org.apache.ignite.internal.processors.cache.distributed.dht.atomic.UpdateErrors.addFailedKey(UpdateErrors.java:108) > at > org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridNearAtomicUpdateResponse.addFailedKey(GridNearAtomicUpdateResponse.java:327) > at > org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.updateSingle(GridDhtAtomicCache.java:2703) > at > org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.update(GridDhtAtomicCache.java:2019) > at > org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.updateAllAsyncInternal0(GridDhtAtomicCache.java:1848) > ... 23 more > Suppressed: class > org.apache.ignite.internal.processors.cache.persistence.tree.CorruptedTreeException: > Runtime failure on search row: SearchRow [key=KeyCacheObjectImpl [part=606, > val=key, hasValBytes=true], hash=106079, cacheId=0] > at > org.apache.ignite.internal.processors.cache.persistence.tree.BPlusTree.invoke(BPlusTree.java:1817) > at > org.apache.ignite.internal.processors.cache.IgniteCacheOffheapManagerImpl$CacheDataStoreImpl.invoke0(IgniteCacheOffheapManagerImpl.java:1663) > at > org.apache.ignite.internal.processors.cache.IgniteCacheOffheapManagerImpl$CacheDataStoreImpl.invoke(IgniteCacheOffheapManagerImpl.java:1646) > at > org.apache.ignite.internal.processors.cache.IgniteCacheOffheapManagerImpl.invoke(IgniteCacheOffheapManagerImpl.java:440) > at > org.apache.ignite.internal.processors.cache.GridCacheMapEntry.innerUpdate(GridCacheMapEntry.java:2335) > at > org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.updateSingle(GridDhtAtomicCache.java:2562) > ... 25 more > Caused by: java.lang.ClassCastException: > org.apache.ignite.internal.binary.BinaryObjectImpl cannot be cast to > org.apache.ignite.cache.Test2$ThinBinaryValue > at > org.apache.ignite.cache.Test2$ThinBinaryValueInterceptor.onBeforePut(Test2.java:64) > at > org.apache.ignite.internal.processors.cache.GridCacheMapEntry$AtomicCacheUpdateClosure.update(GridCacheMapEntry.java:6339) > at > org.apache.ignite.internal.processors.cache.GridCacheMapEntry$AtomicCacheUpdateClosure.call(GridCacheMapEntry.java:6138) > at > org.apache.ignite.internal.processors.cache.GridCacheMapEntry$AtomicCacheUpdateClosure.call(GridCacheMapEntry.java:5838) > at > org.apache.ignite.internal.processors.cache.persistence.tree.BPlusTree$Invoke.invokeClosure(BPlusTree.java:3758) > at > org.apache.ignite.internal.processors.cache.persistence.tree.BPlusTree$Invoke.access$5700(BPlusTree.java:3652) > at > org.apache.ignite.internal.processors.cache.persistence.tree.BPlusTree.invokeDown(BPlusTree.java:1900) > at > org.apache.ignite.internal.processors.cache.persistence.tree.BPlusTree.invoke(BPlusTree.java:1784) > ... 30 more > {noformat} > Reproducer: > {code:java} > import javax.cache.Cache; > import org.apache.ignite.Ignition; > import org.apache.ignite.client.ClientCache; > import org.apache.ignite.client.IgniteClient; > import org.apache.ignite.configuration.CacheConfiguration; > import org.apache.ignite.configuration.ClientConfiguration; > import org.apache.ignite.configuration.ClientConnectorConfiguration; > import org.apache.ignite.configuration.IgniteConfiguration; > import org.apache.ignite.failure.StopNodeFailureHandler; > import org.apache.ignite.internal.IgniteEx; > import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest; > import org.jetbrains.annotations.Nullable; > import org.junit.Test; > import org.junit.runner.RunWith; > import org.junit.runners.JUnit4; > @RunWith(JUnit4.class) > public class ThinClientPutCacheInterceptorTest extends GridCommonAbstractTest > { > @Override protected IgniteConfiguration getConfiguration(String > igniteInstanceName) throws Exception { > return super.getConfiguration(igniteInstanceName) > .setCacheConfiguration(new > CacheConfiguration("test").setInterceptor(new ThinBinaryValueInterceptor())) > .setClientConnectorConfiguration(new > ClientConnectorConfiguration()) > .setFailureHandler(new StopNodeFailureHandler()); > } > @Test > public void test() throws Exception { > try (IgniteEx ignite = startGrid(0)) { > ignite.cluster().active(true); > ClientConfiguration ccfg = new ClientConfiguration() > .setAddresses("127.0.0.1:" + > ignite.configuration().getClientConnectorConfiguration().getPort()); > try (IgniteClient igniteClient = Ignition.startClient(ccfg)) { > ClientCache<String, ThinBinaryValue> cache = > igniteClient.cache("test"); > cache.put("key", new ThinBinaryValue()); > } > } > } > private static class ThinBinaryValueInterceptor extends > CacheInterceptorAdapter<String, ThinBinaryValue> { > @Nullable @Override > public ThinBinaryValue onBeforePut(Cache.Entry<String, > ThinBinaryValue> entry, ThinBinaryValue newVal) { > return super.onBeforePut(entry, newVal); > } > } > private static class ThinBinaryValue { > } > } > {code} -- This message was sent by Atlassian Jira (v8.3.4#803005)