[ 
https://issues.apache.org/jira/browse/IGNITE-23413?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17901208#comment-17901208
 ] 

Ivan Bessonov commented on IGNITE-23413:
----------------------------------------

Current progress status:
 * proposed algorithm is more or less intact
 * I implemented it for both "current" code and "zone collocation" code, with 2 
versions of tests
 * code used to be in a "cleanup" phase
 * I noticed that in some circumstances my code could hold old catalog 
indefinitely
 * it has been decided to account for {{pendingChangeTriggerKey}} values in 
order to avoid these situations. This is what I'm adding right now
 * the _"they would need to retry the read on oldest known revision"_ part will 
have its own Jira, I'll create it soon

Why does it take so long - a lot of side activities and my inability to come up 
with a proper solution. I keep re-writing it, finding more and more cases where 
my code is broken.

> Catalog compaction. Component to determine minimum catalog version required 
> by rebalance.
> -----------------------------------------------------------------------------------------
>
>                 Key: IGNITE-23413
>                 URL: https://issues.apache.org/jira/browse/IGNITE-23413
>             Project: Ignite
>          Issue Type: Improvement
>            Reporter: Pavel Pereslegin
>            Assignee: Ivan Bessonov
>            Priority: Major
>              Labels: ignite-3
>          Time Spent: 10m
>  Remaining Estimate: 0h
>
> Each rebalance procedure uses specific catalog version, it "holds" the 
> timestamp corresponding to the latest (at the moment of rebalancing start) 
> version of the catalog
> To be able safely perform catalog compaction, we need to design and implement 
> a component that can determine the minimum version required for active 
> rebalances (to avoid deleting this version during compaction).
> {code:java}
> interface RebalanceMinimumRequiredTimeProvider {
>     /**
>      * Returns the minimum time required for rebalance,
>      * or current timestamp if there are no active 
>      * rebalances and there is a guarantee that all rebalances
>      * launched in the future will use catalog version 
>      * corresponding to the current time or greater.
>      */
>     long minimumRequiredTime();
> }
> {code}
> The component can be either global or local (whichever is easier to 
> implement). This means that the compaction procedure can call the component 
> on all nodes in the cluster and calculate the minimum.
> The component must be able to track rebalances that may be triggered during 
> "replay" of the metastorage raft log.
> The component should return only monotonically increasing values.



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

Reply via email to