caiconghui commented on a change in pull request #5675:
URL: https://github.com/apache/incubator-doris/pull/5675#discussion_r616317930
##########
File path:
fe/fe-core/src/main/java/org/apache/doris/transaction/DatabaseTransactionMgr.java
##########
@@ -590,15 +594,44 @@ public boolean publishTransaction(Database db, long
transactionId, long timeoutM
return transactionState.getTransactionStatus() ==
TransactionStatus.VISIBLE;
}
- public void deleteTransaction(TransactionState transactionState) {
+ @Deprecated
+ // use replayBatchDeleteTransaction instead
+ public void replayDeleteTransaction(TransactionState transactionState) {
writeLock();
try {
// here we only delete the oldest element, so if element exist in
finalStatusTransactionStateDeque,
- // it must at the front of the finalStatusTransactionStateDeque
- if (!finalStatusTransactionStateDeque.isEmpty() &&
- transactionState.getTransactionId() ==
finalStatusTransactionStateDeque.getFirst().getTransactionId()) {
- finalStatusTransactionStateDeque.pop();
- clearTransactionState(transactionState);
+ // it must at the front of the finalStatusTransactionStateDeque.
+ // check both "short" and "long" queue.
+ if (!finalStatusTransactionStateDequeShort.isEmpty() &&
+ transactionState.getTransactionId() ==
finalStatusTransactionStateDequeShort.getFirst().getTransactionId()) {
+ finalStatusTransactionStateDequeShort.pop();
+ clearTransactionState(transactionState.getTransactionId());
+ } else if (!finalStatusTransactionStateDequeLong.isEmpty() &&
+ transactionState.getTransactionId() ==
finalStatusTransactionStateDequeLong.getFirst().getTransactionId()) {
+ finalStatusTransactionStateDequeLong.pop();
+ clearTransactionState(transactionState.getTransactionId());
+ }
+ } finally {
+ writeUnlock();
+ }
+ }
+
+ public void replayBatchRemoveTransaction(List<Long> txnIds) {
+ writeLock();
+ try {
+ for (Long txnId : txnIds) {
+ // here we only delete the oldest element, so if element exist
in finalStatusTransactionStateDeque,
+ // it must at the front of the finalStatusTransactionStateDeque
+ // check both "short" and "long" queue.
+ if (!finalStatusTransactionStateDequeShort.isEmpty() &&
+ txnId ==
finalStatusTransactionStateDequeShort.getFirst().getTransactionId()) {
Review comment:
use check isShortTxn to make code more concise? use a queue reference to
point to finalStatusTransactionStateDeque
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]