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) {