1
0

[HUDI-3029] Transaction manager: avoid deadlock when doing begin and end transactions (#4373)

This commit is contained in:
Manoj Govindassamy
2021-12-18 08:43:10 -08:00
committed by GitHub
parent d1d48ed494
commit 733732be7b
2 changed files with 17 additions and 1 deletions

View File

@@ -190,6 +190,22 @@ public class TestTransactionManager extends HoodieCommonTestHarness {
transactionManager.endTransaction();
Assertions.assertFalse(transactionManager.getCurrentTransactionOwner().isPresent());
Assertions.assertFalse(transactionManager.getLastCompletedTransactionOwner().isPresent());
// 5. Transactions with new instants but with same timestamps should properly reset owners
transactionManager.beginTransaction(getInstant("0000005"), Option.empty());
Assertions.assertTrue(transactionManager.getCurrentTransactionOwner().isPresent());
Assertions.assertFalse(transactionManager.getLastCompletedTransactionOwner().isPresent());
transactionManager.endTransaction(getInstant("0000005"));
Assertions.assertFalse(transactionManager.getCurrentTransactionOwner().isPresent());
Assertions.assertFalse(transactionManager.getLastCompletedTransactionOwner().isPresent());
// 6. Transactions with no owners should also go through
transactionManager.beginTransaction(Option.empty(), Option.empty());
Assertions.assertFalse(transactionManager.getCurrentTransactionOwner().isPresent());
Assertions.assertFalse(transactionManager.getLastCompletedTransactionOwner().isPresent());
transactionManager.endTransaction(Option.empty());
Assertions.assertFalse(transactionManager.getCurrentTransactionOwner().isPresent());
Assertions.assertFalse(transactionManager.getLastCompletedTransactionOwner().isPresent());
}
private Option<HoodieInstant> getInstant(String timestamp) {