This is an automated email from the ASF dual-hosted git repository.
ascherbakov pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/ignite-3.git
The following commit(s) were added to refs/heads/main by this push:
new 1b06b9f4872 IGNITE-25921 Fix treating RO txn as applicable for direct
mapping
1b06b9f4872 is described below
commit 1b06b9f487243e7fa56154cdf3323bb886b2a39c
Author: Alexey Scherbakov <[email protected]>
AuthorDate: Fri Jul 18 14:48:18 2025 +0300
IGNITE-25921 Fix treating RO txn as applicable for direct mapping
---
.../apache/ignite/internal/client/tx/DirectTxUtils.java | 2 +-
.../internal/runner/app/client/ItThinClientSqlTest.java | 16 ++++++++--------
.../runner/app/client/ItThinClientTransactionsTest.java | 14 ++++++++++----
3 files changed, 19 insertions(+), 13 deletions(-)
diff --git
a/modules/client/src/main/java/org/apache/ignite/internal/client/tx/DirectTxUtils.java
b/modules/client/src/main/java/org/apache/ignite/internal/client/tx/DirectTxUtils.java
index 5113ce7d82a..3f927cd38c5 100644
---
a/modules/client/src/main/java/org/apache/ignite/internal/client/tx/DirectTxUtils.java
+++
b/modules/client/src/main/java/org/apache/ignite/internal/client/tx/DirectTxUtils.java
@@ -256,7 +256,7 @@ public class DirectTxUtils {
String opNode = pm == null ? null : pm.nodeConsistentId();
if (tx != null) {
- return tx.hasCommitPartition() && opNode != null ? opNode :
tx.nodeName();
+ return !tx.isReadOnly() && tx.hasCommitPartition() && opNode !=
null ? opNode : tx.nodeName();
} else {
return opNode;
}
diff --git
a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/client/ItThinClientSqlTest.java
b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/client/ItThinClientSqlTest.java
index bb63c6fee3d..03259db3100 100644
---
a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/client/ItThinClientSqlTest.java
+++
b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/client/ItThinClientSqlTest.java
@@ -51,6 +51,7 @@ import org.apache.ignite.sql.async.AsyncResultSet;
import org.apache.ignite.table.Table;
import org.apache.ignite.table.mapper.Mapper;
import org.apache.ignite.tx.Transaction;
+import org.apache.ignite.tx.TransactionOptions;
import org.hamcrest.Matchers;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Test;
@@ -441,14 +442,13 @@ public class ItThinClientSqlTest extends
ItAbstractThinClientTest {
}
// The same for explicit RO transaction
- // TODO: https://issues.apache.org/jira/browse/IGNITE-25921
uncomment section below
- // client.transactions().runInTransaction(roTx -> {
- // for (int i = 0; i < count; i++) {
- // try (ResultSet<SqlRow> rs = sql.execute(roTx, "SELECT *
FROM my_table WHERE id = ?", i)) {
- // assertFalse(rs.hasNext());
- // }
- // }
- // }, new TransactionOptions().readOnly(true));
+ client.transactions().runInTransaction(roTx -> {
+ for (int i = 0; i < count; i++) {
+ try (ResultSet<SqlRow> rs = sql.execute(roTx, "SELECT *
FROM my_table WHERE id = ?", i)) {
+ assertFalse(rs.hasNext());
+ }
+ }
+ }, new TransactionOptions().readOnly(true));
});
// And now changes are published.
diff --git
a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/client/ItThinClientTransactionsTest.java
b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/client/ItThinClientTransactionsTest.java
index 48d44eec7b1..077df16e0ed 100644
---
a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/client/ItThinClientTransactionsTest.java
+++
b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/client/ItThinClientTransactionsTest.java
@@ -948,12 +948,18 @@ public class ItThinClientTransactionsTest extends
ItAbstractThinClientTest {
kvView.put(null, k1, v1);
kvView.put(null, k2, v2);
- Transaction tx = client().transactions().begin(new
TransactionOptions().readOnly(true));
+ // Create pending locks before RO gets.
+ Transaction tx0 = client().transactions().begin();
+ kvView.put(tx0, k1, v1);
+ kvView.put(tx0, k2, v2);
- assertTrue(Tuple.equals(v1, kvView.get(tx, k1)));
- assertTrue(Tuple.equals(v2, kvView.get(tx, k2)));
+ Transaction tx1 = client().transactions().begin(new
TransactionOptions().readOnly(true));
- tx.commit();
+ assertTrue(Tuple.equals(v1, kvView.get(tx1, k1)));
+ assertTrue(Tuple.equals(v2, kvView.get(tx1, k2)));
+
+ tx1.commit();
+ tx0.commit();
}
@AfterEach