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

Reply via email to