Skip to content

Commit

Permalink
[BugFix] Schema change ignoring PREPARED transaction may lead to data…
Browse files Browse the repository at this point in the history
… loss (#34381)

Signed-off-by: PengFei Li <lpengfei2016@gmail.com>
  • Loading branch information
banmoy authored Nov 14, 2023
1 parent f2f290e commit f13f0e8
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -387,7 +387,8 @@ public void setErrorReplicas(Set<Long> newErrorReplicas) {
}

public boolean isRunning() {
return transactionStatus == TransactionStatus.PREPARE || transactionStatus == TransactionStatus.COMMITTED;
return transactionStatus == TransactionStatus.PREPARE || transactionStatus == TransactionStatus.PREPARED ||
transactionStatus == TransactionStatus.COMMITTED;
}

public void setTabletCommitInfos(List<TabletCommitInfo> infos) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@
import java.io.IOException;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Set;
import java.util.UUID;

public class TransactionStateTest {
Expand Down Expand Up @@ -150,4 +151,22 @@ LoadJobSourceType.BACKEND_STREAMING, new TxnCoordinator(TxnSourceType.BE, "127.0
}
Assert.assertTrue(readTransactionState.isNewFinish());
}

@Test
public void testIsRunning() {
Set<TransactionStatus> nonRunningStatus = new HashSet<>();
nonRunningStatus.add(TransactionStatus.UNKNOWN);
nonRunningStatus.add(TransactionStatus.VISIBLE);
nonRunningStatus.add(TransactionStatus.ABORTED);

UUID uuid = UUID.randomUUID();
for (TransactionStatus status : TransactionStatus.values()) {
TransactionState transactionState = new TransactionState(1000L, Lists.newArrayList(20000L, 20001L),
3000, "label123", new TUniqueId(uuid.getMostSignificantBits(), uuid.getLeastSignificantBits()),
LoadJobSourceType.BACKEND_STREAMING, new TxnCoordinator(TxnSourceType.BE, "127.0.0.1"), 50000L,
60 * 1000L);
transactionState.setTransactionStatus(status);
Assert.assertEquals(nonRunningStatus.contains(status), !transactionState.isRunning());
}
}
}

0 comments on commit f13f0e8

Please sign in to comment.