Re: [jira] [Created] (IGNITE-12911) B+Tree Corrupted exception when using a key extracted from a value object --- and SQL enabled.

2020-04-22 Thread Dmitriy Pavlov
Folks,  could you please take a look at this issue?

It seems quite serious if we can potentially get B+Tree corrupted.

Sincerely,
Dmitriy Pavlov

пт, 17 апр. 2020 г. в 19:25, Alexander Korenshteyn (Jira) :

> Alexander Korenshteyn created IGNITE-12911:
> --
>
>  Summary: B+Tree Corrupted exception when using a key
> extracted from a value object --- and SQL enabled.
>  Key: IGNITE-12911
>  URL: https://issues.apache.org/jira/browse/IGNITE-12911
>  Project: Ignite
>   Issue Type: Bug
>   Components: cache, sql
> Reporter: Alexander Korenshteyn
>  Attachments: Employee.java, EmployeeId.java, ServerNode.java
>
> If a key is part of the value like so:
> class key \{ ... }
>
> class value {
> private Key key
> getKey()
> }
>
> cache = ignite.cache()*.withKeepBinary()*
>
> the following scenario yields a B+ Tree exception:
>
> 1. *Enable SQL via annotations or QueryEntities.*
>
> key1= new Key()
> value1 = new Value(key1)
>
> cache.put(key1, value1)
>
> BinaryObject val2 = cache.get(key1)
> BinaryObject key2 = val2.field("key")
>
> *cache.put(key2, emp1); // CRASH!!! CorruptedTreeException: B+Tree
> iscorrupted ...*
>
> user list:
> [
> http://apache-ignite-users.70518.x6.nabble.com/Ignite-crashes-with-CorruptedTreeException-quot-B-Tree-is-corrupted-quot-on-a-composite-BinaryObjecto-tc32032.html
> ]
>
> *Reproducer – attached*
>
>
>
> Exception:
>
>  [2020-04-17 11:24:33,475][ERROR][main][root] Critical system error
> detected. Will be handled accordingly to configured handler
> [hnd=StopNodeOrHaltFailureHandler [tryStop=false, timeout=0,
> super=AbstractFailureHandler [ignoredFailureTypes=UnmodifiableSet
> [SYSTEM_WORKER_BLOCKED, SYSTEM_CRITICAL_OPERATION_TIMEOUT]]],
> failureCtx=FailureContext [type=CRITICAL_ERROR, err=class
> o.a.i.i.processors.cache.persistence.tree.CorruptedTreeException: B+Tree is
> corrupted [pages(groupId, pageId)=[IgniteBiTuple [val1=1258113742,
> val2=844420635164673]], cacheId=1976096430, cacheName=EMPLOYEE,
> indexName=_key_PK, msg=Runtime failure on row: Row@2233cac0[ key:
> model.EmployeeId [idHash=1744523301, hash=674030145,
> employeeNumber=65348765, departmentNumber=123], val: model.Employee
> [idHash=382762227, hash=1627745429, firstName=John, lastName=Smith,
> id=model.EmployeeId [idHash=2021540695, hash=674030145,
> employeeNumber=65348765, departmentNumber=123]] ][ John, Smith 
>
> class
> org.apache.ignite.internal.processors.cache.persistence.tree.CorruptedTreeException:
> B+Tree is corrupted [pages(groupId, pageId)=[IgniteBiTuple
> [val1=1258113742, val2=844420635164673]], cacheId=1976096430,
> cacheName=EMPLOYEE, indexName=_key_PK, msg=Runtime failure on row:
> Row@2233cac0[ key: model.EmployeeId [idHash=1744523301, hash=674030145,
> employeeNumber=65348765, departmentNumber=123], val: model.Employee
> [idHash=382762227, hash=1627745429, firstName=John, lastName=Smith,
> id=model.EmployeeId [idHash=2021540695, hash=674030145,
> employeeNumber=65348765, departmentNumber=123]] ][ John, Smith ]]
>
>  at
> org.apache.ignite.internal.processors.query.h2.database.H2Tree.corruptedTreeException(H2Tree.java:836)
>
>  at
> org.apache.ignite.internal.processors.cache.persistence.tree.BPlusTree.doPut(BPlusTree.java:2447)
>
>  at
> org.apache.ignite.internal.processors.cache.persistence.tree.BPlusTree.putx(BPlusTree.java:2394)
>
>  at
> org.apache.ignite.internal.processors.query.h2.database.H2TreeIndex.putx(H2TreeIndex.java:437)
>
>  at
> org.apache.ignite.internal.processors.query.h2.opt.GridH2Table.update(GridH2Table.java:756)
>
>  at
> org.apache.ignite.internal.processors.query.h2.IgniteH2Indexing.store(IgniteH2Indexing.java:363)
>
>  at
> org.apache.ignite.internal.processors.query.GridQueryProcessor.store(GridQueryProcessor.java:2016)
>
>  at
> org.apache.ignite.internal.processors.cache.query.GridCacheQueryManager.store(GridCacheQueryManager.java:401)
>
>  at
> org.apache.ignite.internal.processors.cache.IgniteCacheOffheapManagerImpl$CacheDataStoreImpl.finishUpdate(IgniteCacheOffheapManagerImpl.java:2555)
>
>  at
> org.apache.ignite.internal.processors.cache.IgniteCacheOffheapManagerImpl$CacheDataStoreImpl.invoke0(IgniteCacheOffheapManagerImpl.java:1664)
>
>  at
> org.apache.ignite.internal.processors.cache.IgniteCacheOffheapManagerImpl$CacheDataStoreImpl.invoke(IgniteCacheOffheapManagerImpl.java:1639)
>
>  at
> org.apache.ignite.internal.processors.cache.IgniteCacheOffheapManagerImpl.invoke(IgniteCacheOffheapManagerImpl.java:436)
>
>  at
> org.apache.ignite.internal.processors.cache.GridCacheMapEntry.innerUpdate(GridCacheMapEntry.java:2311)
>
>  at
> org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.updateSingle(GridDhtAtomicCache.java:2593)
>
>  at
> org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.update(GridDhtAtomicCache.java:2053)
>
>  at
> 

[jira] [Created] (IGNITE-12911) B+Tree Corrupted exception when using a key extracted from a value object --- and SQL enabled.

2020-04-17 Thread Alexander Korenshteyn (Jira)
Alexander Korenshteyn created IGNITE-12911:
--

 Summary: B+Tree Corrupted exception when using a key extracted 
from a value object --- and SQL enabled.
 Key: IGNITE-12911
 URL: https://issues.apache.org/jira/browse/IGNITE-12911
 Project: Ignite
  Issue Type: Bug
  Components: cache, sql
Reporter: Alexander Korenshteyn
 Attachments: Employee.java, EmployeeId.java, ServerNode.java

If a key is part of the value like so:
class key \{ ... }

class value { 
private Key key
getKey()
}

cache = ignite.cache()*.withKeepBinary()*

the following scenario yields a B+ Tree exception:

1. *Enable SQL via annotations or QueryEntities.*

key1= new Key()
value1 = new Value(key1)

cache.put(key1, value1)

BinaryObject val2 = cache.get(key1)
BinaryObject key2 = val2.field("key")

*cache.put(key2, emp1); // CRASH!!! CorruptedTreeException: B+Tree iscorrupted 
...*

user list:
[http://apache-ignite-users.70518.x6.nabble.com/Ignite-crashes-with-CorruptedTreeException-quot-B-Tree-is-corrupted-quot-on-a-composite-BinaryObjecto-tc32032.html]

*Reproducer – attached* 

 

Exception:

 [2020-04-17 11:24:33,475][ERROR][main][root] Critical system error detected. 
Will be handled accordingly to configured handler 
[hnd=StopNodeOrHaltFailureHandler [tryStop=false, timeout=0, 
super=AbstractFailureHandler [ignoredFailureTypes=UnmodifiableSet 
[SYSTEM_WORKER_BLOCKED, SYSTEM_CRITICAL_OPERATION_TIMEOUT]]], 
failureCtx=FailureContext [type=CRITICAL_ERROR, err=class 
o.a.i.i.processors.cache.persistence.tree.CorruptedTreeException: B+Tree is 
corrupted [pages(groupId, pageId)=[IgniteBiTuple [val1=1258113742, 
val2=844420635164673]], cacheId=1976096430, cacheName=EMPLOYEE, 
indexName=_key_PK, msg=Runtime failure on row: Row@2233cac0[ key: 
model.EmployeeId [idHash=1744523301, hash=674030145, employeeNumber=65348765, 
departmentNumber=123], val: model.Employee [idHash=382762227, hash=1627745429, 
firstName=John, lastName=Smith, id=model.EmployeeId [idHash=2021540695, 
hash=674030145, employeeNumber=65348765, departmentNumber=123]] ][ John, Smith 


class 
org.apache.ignite.internal.processors.cache.persistence.tree.CorruptedTreeException:
 B+Tree is corrupted [pages(groupId, pageId)=[IgniteBiTuple [val1=1258113742, 
val2=844420635164673]], cacheId=1976096430, cacheName=EMPLOYEE, 
indexName=_key_PK, msg=Runtime failure on row: Row@2233cac0[ key: 
model.EmployeeId [idHash=1744523301, hash=674030145, employeeNumber=65348765, 
departmentNumber=123], val: model.Employee [idHash=382762227, hash=1627745429, 
firstName=John, lastName=Smith, id=model.EmployeeId [idHash=2021540695, 
hash=674030145, employeeNumber=65348765, departmentNumber=123]] ][ John, Smith 
]]

 at 
org.apache.ignite.internal.processors.query.h2.database.H2Tree.corruptedTreeException(H2Tree.java:836)

 at 
org.apache.ignite.internal.processors.cache.persistence.tree.BPlusTree.doPut(BPlusTree.java:2447)

 at 
org.apache.ignite.internal.processors.cache.persistence.tree.BPlusTree.putx(BPlusTree.java:2394)

 at 
org.apache.ignite.internal.processors.query.h2.database.H2TreeIndex.putx(H2TreeIndex.java:437)

 at 
org.apache.ignite.internal.processors.query.h2.opt.GridH2Table.update(GridH2Table.java:756)

 at 
org.apache.ignite.internal.processors.query.h2.IgniteH2Indexing.store(IgniteH2Indexing.java:363)

 at 
org.apache.ignite.internal.processors.query.GridQueryProcessor.store(GridQueryProcessor.java:2016)

 at 
org.apache.ignite.internal.processors.cache.query.GridCacheQueryManager.store(GridCacheQueryManager.java:401)

 at 
org.apache.ignite.internal.processors.cache.IgniteCacheOffheapManagerImpl$CacheDataStoreImpl.finishUpdate(IgniteCacheOffheapManagerImpl.java:2555)

 at 
org.apache.ignite.internal.processors.cache.IgniteCacheOffheapManagerImpl$CacheDataStoreImpl.invoke0(IgniteCacheOffheapManagerImpl.java:1664)

 at 
org.apache.ignite.internal.processors.cache.IgniteCacheOffheapManagerImpl$CacheDataStoreImpl.invoke(IgniteCacheOffheapManagerImpl.java:1639)

 at 
org.apache.ignite.internal.processors.cache.IgniteCacheOffheapManagerImpl.invoke(IgniteCacheOffheapManagerImpl.java:436)

 at 
org.apache.ignite.internal.processors.cache.GridCacheMapEntry.innerUpdate(GridCacheMapEntry.java:2311)

 at 
org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.updateSingle(GridDhtAtomicCache.java:2593)

 at 
org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.update(GridDhtAtomicCache.java:2053)

 at 
org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.updateAllAsyncInternal0(GridDhtAtomicCache.java:1871)

 at 
org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.updateAllAsyncInternal(GridDhtAtomicCache.java:1685)

 at