Skip to content

Commit dd1b439

Browse files
authored
IGNITE-28489 Fix tx map cleanup on tx timeout during initialization (#12998)
1 parent 5723edc commit dd1b439

2 files changed

Lines changed: 28 additions & 0 deletions

File tree

modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxLocal.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4368,6 +4368,8 @@ public void initTimeoutHandler() throws TransactionTimeoutException {
43684368
if (remainingTime() == -1L) {
43694369
onTimeout();
43704370

4371+
cctx.tm().clearThreadMap(this);
4372+
43714373
throw new TransactionTimeoutException(
43724374
"Failed to start transaction. Transaction is timed out during initialization.");
43734375
}

modules/core/src/test/java/org/apache/ignite/internal/client/thin/FunctionalTest.java

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@
5454
import org.apache.ignite.client.ClientConnectionException;
5555
import org.apache.ignite.client.ClientException;
5656
import org.apache.ignite.client.ClientTransaction;
57+
import org.apache.ignite.client.ClientTransactions;
5758
import org.apache.ignite.client.Config;
5859
import org.apache.ignite.client.IgniteClient;
5960
import org.apache.ignite.client.LocalIgniteCluster;
@@ -743,6 +744,31 @@ public void testTxResumeAfterTxTimeout() throws Exception {
743744
}
744745
}
745746

747+
/** */
748+
@Test
749+
public void testTxResumeAfterTxTimeoutOnInitialize() {
750+
IgniteConfiguration cfg = Config.getServerConfiguration().setClientConnectorConfiguration(
751+
new ClientConnectorConfiguration().setThreadPoolSize(2));
752+
753+
try (Ignite ignite = Ignition.start(cfg); IgniteClient client = Ignition.startClient(getClientConfiguration())) {
754+
ClientTransactions txs = client.transactions();
755+
756+
for (int i = 0; i < 10_000; i++) {
757+
try {
758+
try (ClientTransaction tx = txs.txStart(OPTIMISTIC, SERIALIZABLE, 1)) {
759+
tx.commit();
760+
}
761+
}
762+
catch (ClientException e) {
763+
assertTrue(
764+
"Wrong exception: " + e.getMessage(),
765+
e.getCause().getMessage().contains("timed out")
766+
);
767+
}
768+
}
769+
}
770+
}
771+
746772
/**
747773
* Test transactions.
748774
*/

0 commit comments

Comments
 (0)