This is an automated email from the ASF dual-hosted git repository.

korlov 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 c0e290289d3 IGNITE-28493 Reduce contention in 
RemotelyTriggeredResourceRegistry (#7960)
c0e290289d3 is described below

commit c0e290289d3cff6ff04a2645b2437db3e9740c55
Author: korlov42 <[email protected]>
AuthorDate: Tue Apr 14 10:30:47 2026 +0300

    IGNITE-28493 Reduce contention in RemotelyTriggeredResourceRegistry (#7960)
---
 .../internal/benchmark/SqlIndexScanBenchmark.java  |  2 +-
 .../benchmark/SqlIndexScanBenchmarkV2.java         |  2 +-
 .../sql/engine/exec/rel/IndexScanNode.java         |  2 +-
 .../tx/impl/RemotelyTriggeredResourceRegistry.java | 22 +++++++++-------------
 4 files changed, 12 insertions(+), 16 deletions(-)

diff --git 
a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/benchmark/SqlIndexScanBenchmark.java
 
b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/benchmark/SqlIndexScanBenchmark.java
index 81d63cf6ccc..ad2b4dbaeb1 100644
--- 
a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/benchmark/SqlIndexScanBenchmark.java
+++ 
b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/benchmark/SqlIndexScanBenchmark.java
@@ -152,7 +152,7 @@ public class SqlIndexScanBenchmark extends 
AbstractMultiNodeBenchmark {
      */
     public static void main(String[] args) throws RunnerException {
         Options opt = new OptionsBuilder()
-                .include(".*" + SqlIndexScanBenchmark.class.getSimpleName() + 
".*")
+                .include(SqlIndexScanBenchmark.class.getName() + "\\..*")
                 .build();
 
         new Runner(opt).run();
diff --git 
a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/benchmark/SqlIndexScanBenchmarkV2.java
 
b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/benchmark/SqlIndexScanBenchmarkV2.java
index 3c2d36b2645..649285b1e85 100644
--- 
a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/benchmark/SqlIndexScanBenchmarkV2.java
+++ 
b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/benchmark/SqlIndexScanBenchmarkV2.java
@@ -129,7 +129,7 @@ public class SqlIndexScanBenchmarkV2 extends 
AbstractMultiNodeBenchmark {
     public static void main(String[] args) throws RunnerException {
         Options opt = new OptionsBuilder()
                 .addProfiler("gc")
-                .include(".*" + SqlIndexScanBenchmarkV2.class.getSimpleName() 
+ ".*")
+                .include(SqlIndexScanBenchmarkV2.class.getName() + "\\..*")
                 .build();
 
         new Runner(opt).run();
diff --git 
a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/rel/IndexScanNode.java
 
b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/rel/IndexScanNode.java
index baee1191383..b245effe2b7 100644
--- 
a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/rel/IndexScanNode.java
+++ 
b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/rel/IndexScanNode.java
@@ -122,7 +122,7 @@ public class IndexScanNode<RowT> extends 
StorageScanNode<RowT> {
         int bufferSize = context().bufferSize();
 
         // Let's prefetch equal share of a buffer from each partition.
-        int fetchSize = max(context().bufferSize() / 
partsWithConsistencyTokens.size(), 1);
+        int fetchSize = max(bufferSize / partsWithConsistencyTokens.size(), 1);
 
         // Adds some buffer to improve chances to fulfill entire request 
without need go to storage once again.
         // This renders over-prefetching over all local partitions in total, 
but at least it's capped now at
diff --git 
a/modules/transactions/src/main/java/org/apache/ignite/internal/tx/impl/RemotelyTriggeredResourceRegistry.java
 
b/modules/transactions/src/main/java/org/apache/ignite/internal/tx/impl/RemotelyTriggeredResourceRegistry.java
index b7d8064fbc1..8dfeac23404 100644
--- 
a/modules/transactions/src/main/java/org/apache/ignite/internal/tx/impl/RemotelyTriggeredResourceRegistry.java
+++ 
b/modules/transactions/src/main/java/org/apache/ignite/internal/tx/impl/RemotelyTriggeredResourceRegistry.java
@@ -163,23 +163,19 @@ public class RemotelyTriggeredResourceRegistry {
     }
 
     private void addRemoteHostResource(UUID remoteHostId, 
FullyQualifiedResourceId resourceId) {
-        remoteHostsToResources.compute(remoteHostId, (k, v) -> {
-            if (v == null) {
-                v = ConcurrentHashMap.newKeySet();
-            }
-
-            v.add(resourceId);
-
-            return v;
-        });
+        remoteHostsToResources.computeIfAbsent(remoteHostId, k -> 
ConcurrentHashMap.newKeySet()).add(resourceId);
     }
 
     private void removeRemoteHostResource(UUID remoteHostId, 
FullyQualifiedResourceId resourceId) {
-        remoteHostsToResources.computeIfPresent(remoteHostId, (k, v) -> {
-            v.remove(resourceId);
+        Set<FullyQualifiedResourceId> resources = 
remoteHostsToResources.get(remoteHostId);
 
-            return v.isEmpty() ? null : v;
-        });
+        if (resources != null) {
+            resources.remove(resourceId);
+
+            if (resources.isEmpty()) {
+                remoteHostsToResources.computeIfPresent(remoteHostId, (k, v) 
-> v.isEmpty() ? null : v);
+            }
+        }
     }
 
     private Map<FullyQualifiedResourceId, RemotelyTriggeredResource> 
resources(UUID contextId) {

Reply via email to