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

Ivan Bessonov updated IGNITE-22050:
-----------------------------------
    Description: 
In current implementation we use a single reuse list for all partitions in 
aimem storage engine.

That works fine in Ignite 2, but here in Ignite 3 we implemented a 
"partitilnless link" format for eliminating 2 bytes, that indicate partition 
number, from the data in pages. This means that if allocator provided the 
structure with the page from partition X, but the structure itself represents 
partition Y, we will lose the "X" in the process and next time will try 
accessing the page by the pageId that has Y encoded in it. This would lead to 
pageId mismatch.

We have several options here.
 * ignore mismatched partitions
 * get rid of partitionless pageIds
 * fix the allocator, so that it would change partition Id upon allocation

Ideally, we should go with the 3rd option. It requires some slight changes in 
internal data structure API, so that we would pass the required partitionId 
directly into the allocator (reuse list). This is a little bit excessive at 
first sight, but seems more appropriate in a long run. Ignite 2 pageIds are all 
messed up inside of structures, we can fix that.

> Data structures don't clear partId of reused page
> -------------------------------------------------
>
>                 Key: IGNITE-22050
>                 URL: https://issues.apache.org/jira/browse/IGNITE-22050
>             Project: Ignite
>          Issue Type: Bug
>            Reporter: Ivan Bessonov
>            Assignee: Ivan Bessonov
>            Priority: Major
>              Labels: ignite-3
>             Fix For: 3.0.0-beta2
>
>          Time Spent: 20m
>  Remaining Estimate: 0h
>
> In current implementation we use a single reuse list for all partitions in 
> aimem storage engine.
> That works fine in Ignite 2, but here in Ignite 3 we implemented a 
> "partitilnless link" format for eliminating 2 bytes, that indicate partition 
> number, from the data in pages. This means that if allocator provided the 
> structure with the page from partition X, but the structure itself represents 
> partition Y, we will lose the "X" in the process and next time will try 
> accessing the page by the pageId that has Y encoded in it. This would lead to 
> pageId mismatch.
> We have several options here.
>  * ignore mismatched partitions
>  * get rid of partitionless pageIds
>  * fix the allocator, so that it would change partition Id upon allocation
> Ideally, we should go with the 3rd option. It requires some slight changes in 
> internal data structure API, so that we would pass the required partitionId 
> directly into the allocator (reuse list). This is a little bit excessive at 
> first sight, but seems more appropriate in a long run. Ignite 2 pageIds are 
> all messed up inside of structures, we can fix that.



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

Reply via email to