[
https://issues.apache.org/jira/browse/IGNITE-17578?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Alexander Lapin updated IGNITE-17578:
-------------------------------------
Ignite Flags: (was: Docs Required,Release Notes Required)
> Transactions: async cleanup processing on tx commit
> ---------------------------------------------------
>
> Key: IGNITE-17578
> URL: https://issues.apache.org/jira/browse/IGNITE-17578
> Project: Ignite
> Issue Type: Improvement
> Reporter: Alexander Lapin
> Priority: Major
> Labels: ignite-3, transaction3_rw
>
> h3. Motivation
> According to tx commit process design it's required to return the control to
> the outer logic right after COMMITED/ABORTED txn state replication. Follow-up
> cleanup process, that will send replica cleanup requests to all enlisted
> replication groups should be asynchronous.
> Currently it's not true:
> {code:java}
> /**
> * Process transaction finish request:
> * <ol>
> * <li>Evaluate commit timestamp.</li>
> * <li>Run specific raft {@code FinishTxCommand} command, that will apply
> txn state to corresponding txStateStorage.</li>
> * <li>Send cleanup requests to all enlisted primary replicas.</li>
> * </ol>
> * This operation is NOT idempotent, because of commit timestamp evaluation.
> *
> * @param request Transaction finish request.
> * @return future result of the operation.
> */
> private CompletableFuture<Object> processTxFinishAction(TxFinishRequest
> request) {
> HybridTimestamp commitTimestamp = hybridClock.now();
> List<String> aggregatedGroupIds =
> request.groups().values().stream().flatMap(List::stream).collect(Collectors.toList());
> UUID txId = request.txId();
> boolean commit = request.commit();
> CompletableFuture<Object> chaneStateFuture = raftClient.run(
> new FinishTxCommand(
> txId,
> commit,
> commitTimestamp,
> aggregatedGroupIds
> )
> );
> // TODO: https://issues.apache.org/jira/browse/IGNITE-17578
> chaneStateFuture.thenRun(
> () -> request.groups().forEach(
> (recipientNode, replicationGroupIds) -> txManager.cleanup(
> recipientNode,
> replicationGroupIds,
> txId,
> commit,
> commitTimestamp
> )
> )
> );
> return chaneStateFuture;
> }
> {code}
> Besides aforementioned, it's expected that cleanup process (that is
> guaranteed to be idempotent) should be performed until success.
> h3. Definition of done
> * Sending cleanup request should be implemented in an async format.
> * Cleanup failures, including timeouts should trigger one more cleanup until
> success. There's no failure handler currently, so it's the only option.
> h3. Implementation Details
> Seems that, properly shared between replicas, cleanup executor will suite us.
>
>
--
This message was sent by Atlassian Jira
(v8.20.10#820010)