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