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

sanpwc 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 b86bf47176 IGNITE-18714 Thread safe usage of 
InternalTableImpl#partitionMap (#1638)
b86bf47176 is described below

commit b86bf471761579bb8131d2f3b4c45a892bdf390d
Author: Sergey Uttsel <[email protected]>
AuthorDate: Thu Feb 9 19:50:42 2023 +0300

    IGNITE-18714 Thread safe usage of InternalTableImpl#partitionMap (#1638)
---
 .../internal/table/distributed/storage/InternalTableImpl.java  | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git 
a/modules/table/src/main/java/org/apache/ignite/internal/table/distributed/storage/InternalTableImpl.java
 
b/modules/table/src/main/java/org/apache/ignite/internal/table/distributed/storage/InternalTableImpl.java
index 9dc4315734..08d0c7cd57 100644
--- 
a/modules/table/src/main/java/org/apache/ignite/internal/table/distributed/storage/InternalTableImpl.java
+++ 
b/modules/table/src/main/java/org/apache/ignite/internal/table/distributed/storage/InternalTableImpl.java
@@ -101,7 +101,7 @@ public class InternalTableImpl implements InternalTable {
     private static final int ATTEMPTS_TO_ENLIST_PARTITION = 5;
 
     /** Partition map. */
-    protected final Int2ObjectMap<RaftGroupService> partitionMap;
+    protected volatile Int2ObjectMap<RaftGroupService> partitionMap;
 
     /** Partitions. */
     private final int partitions;
@@ -1219,7 +1219,13 @@ public class InternalTableImpl implements InternalTable {
         RaftGroupService oldSrvc;
 
         synchronized (updatePartMapMux) {
-            oldSrvc = partitionMap.put(p, raftGrpSvc);
+            Int2ObjectMap<RaftGroupService> newPartitionMap = new 
Int2ObjectOpenHashMap<>(partitions);
+
+            newPartitionMap.putAll(partitionMap);
+
+            oldSrvc = newPartitionMap.put(p, raftGrpSvc);
+
+            partitionMap = newPartitionMap;
         }
 
         if (oldSrvc != null) {

Reply via email to