[
https://issues.apache.org/jira/browse/IGNITE-21759?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Alexander Lapin updated IGNITE-21759:
-------------------------------------
Description:
h3. Motivation
Within one of Txn cursros cleanup sub tickets cursor cleanup scheduler was
introduced. Now it's turn to generalize it to handle txn resource cleanup task.
Thus it's expected that two new entities will be introduced:
TxnResourceCleanupTask and TxnResourceCleanupContext, the latter is expected to
be node-local, volatile and be, probably, a part of a TxManager.
Few words about the logic inside TxnResourceCleanupTask that is expected to be
implemented within given ticket (it'll be adjusted later on in other jiras):
# CleanupTask evaluates txnStateCleanupWatermark as System.currentTimeMillis.
There's no sense in using common clock and thus we may reduce the contention.
# CleanupTask iterates over txnResourceCleanupContext.txnStatesToCleanup and
if txnState.markForRemovalTimestamp + txnStateTTL (more details a bit later) >=
txnStateCleanupWatermark:
## Removes given txnId from txnStateVolatileMap.
## Removes same txnId from txnResourceCleanupContext.txnStatesToCleanup.
# CleanupTask scans txnStateVolatileMap and filters all finished (COMMITED or
ABORTED) transactions.
# Depending on txnStateTTL cleanupTask either removes the finished entry from
the txnStateVolatileMap (if txnStateTTL == 0) or populates the
txnResourceCleanupContext.transactionsToCleanup map with txId ->
txnStateCleanupWatermark semantically txnToCleanupDetectionTime. Such bypassing
- immediate removal instead of common "mark -> nextTimerIteration -> remove" is
useful for testing purposes.
txnStateTTL is a new cluster configuration property that defines the *minimum*
lifetime of a transaction state in milliseconds. Real txnState lifetime will
also depend on cleanupTimer intervals which of course not suitable for test
purposes thus we should introduce manual ability to run TxnResourceCleanupTask
immediately. At least we will use it within tests.
h3. Definition of Done
* New configuration property txnStateTTL is introduced with default of 30_000
milliseconds.
* At least two new classes are introduced: TxnResourceCleanupTask and
TxnResourceCleanupContext.
* Cleanup scheduler is generalized and adjusted to run TxnResourceCleanupTask
on every iteration.
* TxnResourceCleanupTask is thread safe, and implemented according to the
description in motivation section.
* Special trigger txnResourceCleanup is introduced within TxManager.
> Prepare general txn cleanup logic: txnCleanupTask along with txnCleanupContext
> ------------------------------------------------------------------------------
>
> Key: IGNITE-21759
> URL: https://issues.apache.org/jira/browse/IGNITE-21759
> Project: Ignite
> Issue Type: Improvement
> Reporter: Alexander Lapin
> Priority: Major
>
> h3. Motivation
> Within one of Txn cursros cleanup sub tickets cursor cleanup scheduler was
> introduced. Now it's turn to generalize it to handle txn resource cleanup
> task. Thus it's expected that two new entities will be introduced:
> TxnResourceCleanupTask and TxnResourceCleanupContext, the latter is expected
> to be node-local, volatile and be, probably, a part of a TxManager.
> Few words about the logic inside TxnResourceCleanupTask that is expected to
> be implemented within given ticket (it'll be adjusted later on in other
> jiras):
> # CleanupTask evaluates txnStateCleanupWatermark as
> System.currentTimeMillis. There's no sense in using common clock and thus we
> may reduce the contention.
> # CleanupTask iterates over txnResourceCleanupContext.txnStatesToCleanup and
> if txnState.markForRemovalTimestamp + txnStateTTL (more details a bit later)
> >= txnStateCleanupWatermark:
> ## Removes given txnId from txnStateVolatileMap.
> ## Removes same txnId from txnResourceCleanupContext.txnStatesToCleanup.
> # CleanupTask scans txnStateVolatileMap and filters all finished (COMMITED
> or ABORTED) transactions.
> # Depending on txnStateTTL cleanupTask either removes the finished entry
> from the txnStateVolatileMap (if txnStateTTL == 0) or populates the
> txnResourceCleanupContext.transactionsToCleanup map with txId ->
> txnStateCleanupWatermark semantically txnToCleanupDetectionTime. Such
> bypassing - immediate removal instead of common "mark -> nextTimerIteration
> -> remove" is useful for testing purposes.
>
> txnStateTTL is a new cluster configuration property that defines the
> *minimum* lifetime of a transaction state in milliseconds. Real txnState
> lifetime will also depend on cleanupTimer intervals which of course not
> suitable for test purposes thus we should introduce manual ability to run
> TxnResourceCleanupTask immediately. At least we will use it within tests.
> h3. Definition of Done
> * New configuration property txnStateTTL is introduced with default of
> 30_000 milliseconds.
> * At least two new classes are introduced: TxnResourceCleanupTask and
> TxnResourceCleanupContext.
> * Cleanup scheduler is generalized and adjusted to run
> TxnResourceCleanupTask on every iteration.
> * TxnResourceCleanupTask is thread safe, and implemented according to the
> description in motivation section.
> * Special trigger txnResourceCleanup is introduced within TxManager.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)