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

Ivan Bessonov reassigned IGNITE-15817:
--------------------------------------

    Assignee: Ivan Bessonov

> [Native Persistence 3.0] PageIOs abstractions porting
> -----------------------------------------------------
>
>                 Key: IGNITE-15817
>                 URL: https://issues.apache.org/jira/browse/IGNITE-15817
>             Project: Ignite
>          Issue Type: Task
>          Components: persistence
>            Reporter: Sergey Chugunov
>            Assignee: Ivan Bessonov
>            Priority: Major
>              Labels: ignite-3
>
> h2. Goal
> We want to keep PageIO abstraction in general but refine it, address some 
> flaws and repay tech debt that has built up in this subsystem.
> h2. Items to pay attention to
> Abstract parent PageIO class is overloaded with functionality (bad smell from 
> static methods etc), responsibilities split and minor redesign is needed.
> Retrieving version of a particular page requires complicated machinery, it 
> should be simplified.
> PageMetaIO hierarchy flattening - responsibilities of intermediate classes 
> should be unified and grouped in a lower hierarchy.
> Old versions cleanup: versions history shrinking is safe as no binary 
> compatibility between 2.x and 3.0.
> Reconsider approaches to support versioning and binary compatibility. Classes 
> with names like V2, V3 look questionable, we may come up with other naming or 
> completely different approach.
> h2. More details
> Generally speaking, there's no point in porting classes like PageMetaIO with 
> the abstraction. These can be ported with PageMemory component, for example.
> Currently, every IO type is described in a single class as a set of 
> constants. This approach is not flexible enough:
>  * all methods are static, it's hard to substitute IO in tests, so there are 
> fields like {{{}PageIO#testIO{}}}, which is a very poor design.
>  * IO types for every component are crammed into a single class, modules 
> connectivity is way too high. This leads to very awkward methods like 
> {{{}PageIO#registerH2{}}}.
> I propose using ServiceLoader interfaces or explicit extensions and store IO 
> objects in a registry, which won't be static.
> {{FLAG_IDX}} makes no sense, to be honest, it can be derived from partition 
> id. It should be removed.
> Topic of big page sizes should not be considered here right now, there are 
> unresolved issues with meta pages and so on.
> Classes like {{PageSupport}} and {{ReuseList}} (and others) will be ported 
> here, but without implementations. Or maybe with test implementations.



--
This message was sent by Atlassian Jira
(v8.20.1#820001)

Reply via email to