[ https://issues.apache.org/jira/browse/IGNITE-16484?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Yury Gerzhedovich resolved IGNITE-16484. ---------------------------------------- Resolution: Duplicate > sqlOnheapCacheEnabled leads to B+Tree corruption > ------------------------------------------------ > > Key: IGNITE-16484 > URL: https://issues.apache.org/jira/browse/IGNITE-16484 > Project: Ignite > Issue Type: Bug > Components: sql > Affects Versions: 2.12 > Reporter: Ilya Kazakov > Priority: Major > > This code leads to B+Tree corruption: > {code:java} > public static void main(String[] args) { > IgniteConfiguration cfg = new IgniteConfiguration() > .setCacheConfiguration(new CacheConfiguration<PersonKey, Integer>() > .setSqlOnheapCacheEnabled(true) > .setName("PERSON") > .setIndexedTypes(PersonKey.class, Integer.class)); > Ignite ignite = Ignition.start(cfg); > try (IgniteCache<PersonKey, Integer> cache = ignite.cache("PERSON")) { > for (int i = 0; i < Integer.MAX_VALUE; i++) { > cache.put(new PersonKey(i), i); > if (i % 100 == 0) > System.out.println(i); > } > } > } > private static class PersonKey { > @QuerySqlField > private long id; > public PersonKey(long id) { > this.id = id; > } > }{code} > {code:java} > class > org.apache.ignite.internal.processors.cache.persistence.tree.CorruptedTreeException: > B+Tree is corrupted [groupId=-1938387115, pageIds=[844420635166787], > cacheId=-1938387115, cacheName=PERSON, indexName=_key_PK, msg=Runtime failure > on row: Row@6c2ed0cd[ key: org.apache.ignite.examples.CacheStore$PersonKey > [idHash=2107543287, hash=-1581735888, id=4870], val: 4870 ][ ]] > at > org.apache.ignite.internal.cache.query.index.sorted.inline.InlineIndexTree.corruptedTreeException(InlineIndexTree.java:585) > at > org.apache.ignite.internal.processors.cache.persistence.tree.BPlusTree.doPut(BPlusTree.java:2572) > at > org.apache.ignite.internal.processors.cache.persistence.tree.BPlusTree.putx(BPlusTree.java:2512) > at > org.apache.ignite.internal.cache.query.index.sorted.inline.InlineIndexImpl.putx(InlineIndexImpl.java:265) > at > org.apache.ignite.internal.cache.query.index.sorted.inline.InlineIndexImpl.onUpdate(InlineIndexImpl.java:247) > at > org.apache.ignite.internal.cache.query.index.IndexProcessor.updateIndex(IndexProcessor.java:452) > at > org.apache.ignite.internal.cache.query.index.IndexProcessor.updateIndexes(IndexProcessor.java:295) > at > org.apache.ignite.internal.cache.query.index.IndexProcessor.store(IndexProcessor.java:142) > at > org.apache.ignite.internal.processors.query.GridQueryProcessor.store(GridQueryProcessor.java:2548) > at > org.apache.ignite.internal.processors.cache.query.GridCacheQueryManager.store(GridCacheQueryManager.java:422) > at > org.apache.ignite.internal.processors.cache.IgniteCacheOffheapManagerImpl$CacheDataStoreImpl.finishUpdate(IgniteCacheOffheapManagerImpl.java:2674) > at > org.apache.ignite.internal.processors.cache.IgniteCacheOffheapManagerImpl$CacheDataStoreImpl.invoke0(IgniteCacheOffheapManagerImpl.java:1750) > at > org.apache.ignite.internal.processors.cache.IgniteCacheOffheapManagerImpl$CacheDataStoreImpl.invoke(IgniteCacheOffheapManagerImpl.java:1725) > at > org.apache.ignite.internal.processors.cache.IgniteCacheOffheapManagerImpl.invoke(IgniteCacheOffheapManagerImpl.java:449) > at > org.apache.ignite.internal.processors.cache.GridCacheMapEntry.innerUpdate(GridCacheMapEntry.java:2331) > at > org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.updateSingle(GridDhtAtomicCache.java:2541) > at > org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.update(GridDhtAtomicCache.java:2004) > at > org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.updateAllAsyncInternal0(GridDhtAtomicCache.java:1821) > at > org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.updateAllAsyncInternal(GridDhtAtomicCache.java:1694) > 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:481) > at > org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridNearAtomicSingleUpdateFuture.mapOnTopology(GridNearAtomicSingleUpdateFuture.java:441) > 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:1147) > at > org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.put0(GridDhtAtomicCache.java:615) > at > org.apache.ignite.internal.processors.cache.GridCacheAdapter.put(GridCacheAdapter.java:2573) > at > org.apache.ignite.internal.processors.cache.GridCacheAdapter.put(GridCacheAdapter.java:2552) > at > org.apache.ignite.internal.processors.cache.IgniteCacheProxyImpl.put(IgniteCacheProxyImpl.java:1338) > at > org.apache.ignite.internal.processors.cache.GatewayProtectedCacheProxy.put(GatewayProtectedCacheProxy.java:870) > at org.apache.ignite.examples.CacheStore.main(CacheStore.java:22) > Caused by: class org.apache.ignite.IgniteException: Failed to store new index > row. > at > org.apache.ignite.internal.cache.query.index.sorted.inline.io.AbstractInlineInnerIO.storeByOffset(AbstractInlineInnerIO.java:105) > at > org.apache.ignite.internal.cache.query.index.sorted.inline.io.AbstractInlineInnerIO.storeByOffset(AbstractInlineInnerIO.java:37) > at > org.apache.ignite.internal.processors.cache.persistence.tree.io.BPlusIO.store(BPlusIO.java:228) > at > org.apache.ignite.internal.processors.cache.persistence.tree.io.BPlusIO.insert(BPlusIO.java:317) > at > org.apache.ignite.internal.processors.cache.persistence.tree.io.BPlusInnerIO.insert(BPlusInnerIO.java:150) > at > org.apache.ignite.internal.processors.cache.persistence.tree.BPlusTree$Put.insertSimple(BPlusTree.java:3862) > at > org.apache.ignite.internal.processors.cache.persistence.tree.BPlusTree$Put.insert(BPlusTree.java:3844) > at > org.apache.ignite.internal.processors.cache.persistence.tree.BPlusTree$Put.access$1700(BPlusTree.java:3686) > at > org.apache.ignite.internal.processors.cache.persistence.tree.BPlusTree$Insert.run0(BPlusTree.java:505) > at > org.apache.ignite.internal.processors.cache.persistence.tree.BPlusTree$Insert.run0(BPlusTree.java:486) > at > org.apache.ignite.internal.processors.cache.persistence.tree.BPlusTree$GetPageHandler.run(BPlusTree.java:6080) > at > org.apache.ignite.internal.processors.cache.persistence.tree.BPlusTree$GetPageHandler.run(BPlusTree.java:6066) > at > org.apache.ignite.internal.processors.cache.persistence.tree.util.PageHandler.writePage(PageHandler.java:381) > at > org.apache.ignite.internal.processors.cache.persistence.DataStructure.write(DataStructure.java:348) > at > org.apache.ignite.internal.processors.cache.persistence.tree.BPlusTree.access$11200(BPlusTree.java:162) > at > org.apache.ignite.internal.processors.cache.persistence.tree.BPlusTree$Put.tryInsert(BPlusTree.java:4000) > at > org.apache.ignite.internal.processors.cache.persistence.tree.BPlusTree$Put.finishOrLockTail(BPlusTree.java:3724) > at > org.apache.ignite.internal.processors.cache.persistence.tree.BPlusTree.putDown(BPlusTree.java:2936) > at > org.apache.ignite.internal.processors.cache.persistence.tree.BPlusTree.doPut(BPlusTree.java:2532) > ... 28 more > Caused by: java.lang.UnsupportedOperationException: 4 cannot be used for > inline type 19 > at > org.apache.ignite.internal.cache.query.index.sorted.inline.types.NullableInlineIndexKeyType.ensureKeyType(NullableInlineIndexKeyType.java:213) > at > org.apache.ignite.internal.cache.query.index.sorted.inline.types.NullableInlineIndexKeyType.put(NullableInlineIndexKeyType.java:142) > at > org.apache.ignite.internal.cache.query.index.sorted.inline.io.AbstractInlineInnerIO.storeByOffset(AbstractInlineInnerIO.java:96) > ... 46 more{code} > -- This message was sent by Atlassian Jira (v8.20.1#820001)