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

Alexander Lapin updated IGNITE-25140:
-------------------------------------
    Epic Link: IGNITE-24953  (was: IGNITE-22115)

> Move table lifecycle logic for colocation in a separate manager 
> ----------------------------------------------------------------
>
>                 Key: IGNITE-25140
>                 URL: https://issues.apache.org/jira/browse/IGNITE-25140
>             Project: Ignite
>          Issue Type: Improvement
>            Reporter: Mikhail Efremov
>            Assignee: Mikhail Efremov
>            Priority: Major
>              Labels: ignite-3
>
> *Description*
> We have a pretty common pattern for tables handling in colocation track. As 
> illustration {{ChangeIndexStatusTaskController}} may be considered. The 
> common idea: we can not rely on {{Catalog}} in case of proper tables' 
> lifecycle management. A table catalog descriptor may existing, but table may 
> not yet. And otherwise if there no the descriptor then the corresponding 
> table and its resources may exist until low watermark will be updated. So we 
> can't for colocation's zones rely on code like the follow:
> {code:java}
> Collection<CatalogTableDescriptor> tableDescriptors = catalogService
>                 .catalog(catalogService.latestCatalogVersion())
>                 .tables(partitionKey.zoneId());
> {code}
> ...because we may potentially miss to handle a table by it descriptor. 
> So {{ChangeIndexStatusTaskController}}:
> # track tables in a set in case of table creation;
> # uses {{DestroyTableEvent}} record for track a table drops with prioritized 
> queue by drop event catalog version token;
> # do a proper handling on actual table destruction without missing any table 
> entity.
> We need to generalize this pattern because this isn't a single place of usage 
> of such approach during and after the colocation track will be done.
> *Motivation*
> This refactoring will speed up colocation development in cases of tables 
> lifecycle event handling, will reduce code duplication and then reduce a 
> mistakes during the colocation track implementation.
> *Definition of done*
> * New {{TableLifecycleManager}} is introduced.
> * It allows simultaneous subscription on {{CatalogEvent.TABLE_CREATE}}, 
> {{CatalogEvent.TABLE_DROP}}, {{LowWatermarkEvent.LOW_WATERMARK_CHANGED}}.
> * Accepts custom handlers at least for the last event.
> * {{DestroyTableEvent}} is moved into the manager.
> * {{ChangeIndexStatusTaskController}} is simplified by the new manager 
> instance. 



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

Reply via email to