This is an automated email from the ASF dual-hosted git repository.
tkalkirill 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 adb88ffb65 IGNITE-21696 Don't synchronize on AtomicReferenceArray
(#3429)
adb88ffb65 is described below
commit adb88ffb659c595f975d7b08eff4f9f20c63c027
Author: Roman Puchkovskiy <[email protected]>
AuthorDate: Mon Mar 18 10:31:07 2024 +0400
IGNITE-21696 Don't synchronize on AtomicReferenceArray (#3429)
---
check-rules/spotbugs-excludes.xml | 12 ------------
.../apache/ignite/internal/network/LazyStripedExecutors.java | 4 +++-
.../ignite/internal/network/netty/ConnectionManager.java | 2 +-
3 files changed, 4 insertions(+), 14 deletions(-)
diff --git a/check-rules/spotbugs-excludes.xml
b/check-rules/spotbugs-excludes.xml
index e111eb9e89..eb117abc40 100644
--- a/check-rules/spotbugs-excludes.xml
+++ b/check-rules/spotbugs-excludes.xml
@@ -244,18 +244,6 @@
<Bug pattern="UCF_USELESS_CONTROL_FLOW"/>
<Class name="org.apache.ignite.internal.pagememory.util.PageHandler"/>
</Match>
- <Match>
- <!-- TODO: https://issues.apache.org/jira/browse/IGNITE-21696 -->
- <Bug pattern="JLM_JSR166_UTILCONCURRENT_MONITORENTER"/>
- <Class name="org.apache.ignite.internal.network.LazyStripedExecutors"/>
- <Method name="stripedExecutorFor"/>
- </Match>
- <Match>
- <!-- TODO: https://issues.apache.org/jira/browse/IGNITE-21697 -->
- <Bug pattern="RV_RETURN_VALUE_IGNORED_BAD_PRACTICE"/>
- <Class name="org.apache.ignite.internal.network.netty.ConnectionManager"/>
- <Method name="handleNodeLeft"/>
- </Match>
<Match>
<!-- TODO: https://issues.apache.org/jira/browse/IGNITE-21698 -->
<Bug pattern="BX_UNBOXING_IMMEDIATELY_REBOXED"/>
diff --git
a/modules/network/src/main/java/org/apache/ignite/internal/network/LazyStripedExecutors.java
b/modules/network/src/main/java/org/apache/ignite/internal/network/LazyStripedExecutors.java
index 5d90c5070b..dcc5a35c09 100644
---
a/modules/network/src/main/java/org/apache/ignite/internal/network/LazyStripedExecutors.java
+++
b/modules/network/src/main/java/org/apache/ignite/internal/network/LazyStripedExecutors.java
@@ -42,6 +42,8 @@ abstract class LazyStripedExecutors implements
ManuallyCloseable {
private final AtomicBoolean closed = new AtomicBoolean();
private final AtomicReferenceArray<StripedExecutor> array = new
AtomicReferenceArray<>(Short.MAX_VALUE + 1);
+ private final Object executorCreationMutex = new Object();
+
/**
* Executes a command on a stripe with the given index. If the executor is
stopped, returns a special executor that executes nothing.
*
@@ -68,7 +70,7 @@ abstract class LazyStripedExecutors implements
ManuallyCloseable {
return existing;
}
- synchronized (array) {
+ synchronized (executorCreationMutex) {
existing = array.get(executorIndex);
if (existing != null) {
return existing;
diff --git
a/modules/network/src/main/java/org/apache/ignite/internal/network/netty/ConnectionManager.java
b/modules/network/src/main/java/org/apache/ignite/internal/network/netty/ConnectionManager.java
index 36bf399a3f..a5cbdf61ce 100644
---
a/modules/network/src/main/java/org/apache/ignite/internal/network/netty/ConnectionManager.java
+++
b/modules/network/src/main/java/org/apache/ignite/internal/network/netty/ConnectionManager.java
@@ -600,7 +600,7 @@ public class ConnectionManager implements
ChannelCreationListener {
// TODO: IGNITE-21207 - remove descriptors for good.
- connectionMaintenanceExecutor.submit(
+ connectionMaintenanceExecutor.execute(
() -> closeChannelsWith(id).whenCompleteAsync((res, ex) -> {
// Closing descriptors separately (as some of them might
not have an operating channel attached, but they
// still might have unacknowledged messages/futures).