[ 
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)

Reply via email to