You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@ignite.apache.org by "Kirill Tkalenko (Jira)" <ji...@apache.org> on 2022/12/20 09:47:00 UTC

[jira] [Updated] (IGNITE-18022) Creating an API for full rebalance of TxStateStorage on receiver

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

Kirill Tkalenko updated IGNITE-18022:
-------------------------------------
    Summary: Creating an API for full rebalance of TxStateStorage on receiver  (was: Creating an API for full rebalance without losing user data in TxStateStorage on receiver)

> Creating an API for full rebalance of TxStateStorage on receiver
> ----------------------------------------------------------------
>
>                 Key: IGNITE-18022
>                 URL: https://issues.apache.org/jira/browse/IGNITE-18022
>             Project: Ignite
>          Issue Type: Task
>            Reporter: Kirill Tkalenko
>            Assignee: Kirill Tkalenko
>            Priority: Major
>              Labels: ignite-3
>             Fix For: 3.0.0-beta2
>
>          Time Spent: 1.5h
>  Remaining Estimate: 0h
>
> Suggested API for a full rebalance for *org.apache.ignite.internal.tx.storage.state.TxStateStorage*:
> {code:java}
> public interface TxStateStorage extends ManuallyCloseable {
> ....
>     long FULL_REBALANCE_IN_PROGRESS = -1;
>     /**
>      * Prepares the transaction state storage for a full rebalance: clears the storage, sets the {@link #lastAppliedIndex()} to
>      * {@link #FULL_REBALANCE_IN_PROGRESS}, and closes all cursors.
>      *
>      * <p>After the complete of future, only write methods will be available, and read methods will throw {@link IgniteInternalException}.
>      *
>      * <p>This method must be called before every full rebalance of transaction state storage and ends with a call to one of the methods:
>      * <ul>
>      *     <li>{@link #abortFullRebalance()} - in case of errors or cancellation of a full rebalance;</li>
>      *     <li>{@link #finishFullRebalance(long, long)} - in case of successful completion of a full rebalance.</li>
>      * </ul>
>      *
>      * <p>If the {@link #lastAppliedIndex()} is {@link #FULL_REBALANCE_IN_PROGRESS} after a node restart, then the storage needs to be 
>      * cleared before it can be used.
>      *
>      * @return Future of the start a full rebalance for transaction state storage.
>      */
>     CompletableFuture<Void> startFullRebalance();
>     /**
>      * Aborts a full rebalance for transaction state storage: clears the storage, sets the {@link #lastAppliedIndex()} to {@code 0}.
>      *
>      * <p>After the complete of future, methods for writing and reading will be available.
>      *
>      * <p>If a full rebalance has not started, then nothing will happen.
>      *
>      * @return Future of the abort a full rebalance for transaction state storage.
>      */
>     CompletableFuture<Void> abortFullRebalance();
>     /**
>      * Completes a full rebalance for transaction state storage: updates {@link #lastAppliedIndex()} and {@link #lastAppliedTerm()}.
>      *
>      * <p>After the complete of future, methods for writing and reading will be available.
>      *
>      * <p>If a full rebalance has not started, then nothing will happen.
>      *
>      * @param lastAppliedIndex Last applied index.
>      * @param lastAppliedTerm Last applied term.
>      * @return Future of the finish a full rebalance for transaction state storage.
>      */
>     CompletableFuture<Void> finishFullRebalance(long lastAppliedIndex, long lastAppliedTerm);
> }
> {code}
> We will also need to write tests and make a test implementation.
> The main idea is described in IGNITE-17990.



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