[ 
https://issues.apache.org/jira/browse/IGNITE-26261?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Ilya Shishkov updated IGNITE-26261:
-----------------------------------
    Description: 
It seems, than we have insufficient validation when inserting entries with 
changed class of key to cache with indexing.

When we try to put entry with new key class, there are some possible scenarios:
# Some data become unavailable with SQL.
# Unexpected SQL requests failures.
# Node failures.
# B+Tree corruption. As I see, there are no possibility to rebuild indexes, 
maintenance mode also fails to rebuild index. It is impossible to restore data 
with standard utilities.

Root cause for all cases:
{code}
org.apache.ignite.binary.BinaryObjectException: Failed to get field because 
type ID of passed object differs from type ID this BinaryField belongs to 
[expected=[typeId=449234053, 
typeName=org.apache.ignite.KeyClassChangeTest$OtherIntKey], 
actual=[typeId=1318599563, 
typeName=org.apache.ignite.KeyClassChangeTest$IntKey], fieldId=106079, 
fieldName=key, fieldType=int]
{code}

How to reproduce (TBD):
# Create cache with query entity, where key class contains field, annotated 
both {{@AffinityKeyMapped}} and {{@QuerySqlField}} annotations. For node and 
SQL failures 

  was:
It seems, than we have insufficient validation when inserting entries with 
changed class of key to cache with indexing.

When we try to put entry with new key class, there are some possible scenarios:
# Some data become unavailable with SQL.
# Unexpected SQL requests failures.
# Node failures.
# B+Tree corruption. As I see, there are no possibility to rebuild indexes, 
maintenance mode also fails to rebuild index. It is impossible to restore data 
with standard utilities.

In all cases, root cause is such error:
{code}
org.apache.ignite.binary.BinaryObjectException: Failed to get field because 
type ID of passed object differs from type ID this BinaryField belongs to 
[expected=[typeId=449234053, 
typeName=org.apache.ignite.KeyClassChangeTest$OtherIntKey], 
actual=[typeId=1318599563, 
typeName=org.apache.ignite.KeyClassChangeTest$IntKey], fieldId=106079, 
fieldName=key, fieldType=int]
{code}

How to reproduce (TBD):
# Create cache with query entity, where key class contains field, annotated 
both {{@AffinityKeyMapped}} and {{@QuerySqlField}} annotations. For node and 
SQL failures 


> Key class change leads to critical failure and B+Tree corruption
> ----------------------------------------------------------------
>
>                 Key: IGNITE-26261
>                 URL: https://issues.apache.org/jira/browse/IGNITE-26261
>             Project: Ignite
>          Issue Type: Task
>    Affects Versions: 2.16
>            Reporter: Ilya Shishkov
>            Priority: Critical
>
> It seems, than we have insufficient validation when inserting entries with 
> changed class of key to cache with indexing.
> When we try to put entry with new key class, there are some possible 
> scenarios:
> # Some data become unavailable with SQL.
> # Unexpected SQL requests failures.
> # Node failures.
> # B+Tree corruption. As I see, there are no possibility to rebuild indexes, 
> maintenance mode also fails to rebuild index. It is impossible to restore 
> data with standard utilities.
> Root cause for all cases:
> {code}
> org.apache.ignite.binary.BinaryObjectException: Failed to get field because 
> type ID of passed object differs from type ID this BinaryField belongs to 
> [expected=[typeId=449234053, 
> typeName=org.apache.ignite.KeyClassChangeTest$OtherIntKey], 
> actual=[typeId=1318599563, 
> typeName=org.apache.ignite.KeyClassChangeTest$IntKey], fieldId=106079, 
> fieldName=key, fieldType=int]
> {code}
> How to reproduce (TBD):
> # Create cache with query entity, where key class contains field, annotated 
> both {{@AffinityKeyMapped}} and {{@QuerySqlField}} annotations. For node and 
> SQL failures 



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to