Hello, Igniters. > Does this exception happen because IgniteUuid class is not correctly > handled?
Yes. I've fixed it. But story doesn't end :) > As far as propagating exceptions, addData(...) is asynchronous operation > and returns IgniteFuture. Thank you, my bad. But, I can't understand when returned future should complete? Javadocs or documentation doesn't explain it. Also, I can't find any tests that checks future returned from addData. Can someone explan it to me? В Пн, 19/02/2018 в 21:47 -0600, Dmitriy Setrakyan пишет: > Nikolay, > > Does this exception happen because IgniteUuid class is not correctly > handled? If that's the case, we should fix it. Would be great if you could > do it. > > As far as propagating exceptions, addData(...) is asynchronous operation > and returns IgniteFuture. The exception should be propagated to that > future. Do you not see it there? > > D. > > On Mon, Feb 19, 2018 at 1:00 PM, Nikolay Izhikov <nizhi...@apache.org> > wrote: > > > Hello, Igniters. > > > > While working on IGNITE-7727 I found strange behavior of > > IgniteDataStreamer: > > > > If we have IgniteUuid as an indexed type update silently brokes on a > > server node. > > Client doesn't have any notification about fails. > > All calls of `addData`, `close`, etc. succeed on a client side but fails > > on server side. > > > > I see 2 issue here: > > > > 1. The fail itself - it certainly a bug, I think I can fix it. > > > > 2. Lack of client notification. Is it OK when client doesn't know about > > fails of streamer updates? > > Do we have this documented? I briefly looked at streamer docs but can't > > find description of such behavior. > > > > > > Reproducer [1] > > > > ``` > > public void testStreamer() throws Exception { > > Ignite client = grid("client"); > > > > CacheConfiguration ccfg = new CacheConfiguration("UUID_CACHE"); > > > > ccfg.setIndexedTypes(IgniteUuid.class, String.class); > > > > client.createCache(ccfg); > > > > try(IgniteDataStreamer<IgniteUuid, String> cache = > > client.dataStreamer("UUID_CACHE")) { > > > > for(Integer i=0; i<2; i++) > > cache.addData(IgniteUuid.randomUuid().toString(), > > i.toString()); > > } > > } > > ``` > > > > Server node stack trace [2]: > > > > ``` > > Caused by: class org.apache.ignite.IgniteCheckedException: Failed to > > update index, incorrect key class [expCls=org.apache.ignite. > > lang.IgniteUuid, > > actualCls=org.apache.ignite.internal.binary.BinaryObjectImpl] > > at org.apache.ignite.internal.processors.query.GridQueryProcessor. > > typeByValue(GridQueryProcessor.java:1954) > > at org.apache.ignite.internal.processors.query. > > GridQueryProcessor.store(GridQueryProcessor.java:1877) > > at org.apache.ignite.internal.processors.cache.query. > > GridCacheQueryManager.store(GridCacheQueryManager.java:403) > > at org.apache.ignite.internal.processors.cache. > > IgniteCacheOffheapManagerImpl$CacheDataStoreImpl.finishUpdate( > > IgniteCacheOffheapManagerImpl.java:1343) > > at org.apache.ignite.internal.processors.cache. > > IgniteCacheOffheapManagerImpl$CacheDataStoreImpl.invoke( > > IgniteCacheOffheapManagerImpl.java:1207) > > at org.apache.ignite.internal.processors.cache. > > IgniteCacheOffheapManagerImpl.invoke(IgniteCacheOffheapManagerImpl. > > java:345) > > at org.apache.ignite.internal.processors.cache. > > GridCacheMapEntry.storeValue(GridCacheMapEntry.java:3527) > > at org.apache.ignite.internal.processors.cache.GridCacheMapEntry. > > initialValue(GridCacheMapEntry.java:2735) > > at org.apache.ignite.internal.processors.datastreamer. > > DataStreamerImpl$IsolatedUpdater.receive(DataStreamerImpl.java:2113) > > ... 11 more > > ``` > > > > [1] https://gist.github.com/nizhikov/2e70a73c7b74a50fc89d270e9af1e1ca > > > > [2] https://gist.github.com/nizhikov/c491c8f2b45aa59458b37b42b4b8dab4
signature.asc
Description: This is a digitally signed message part