[fix](statistics)Use ConcurrentHashMap to avoid ConcurrentModificationException (#36452) (#36950)

OlapTable idToPartition Map should use ConcurrentHashMap to avoid
ConcurrentModificationException.
backport: https://github.com/apache/doris/pull/36452
This commit is contained in:
Jibing-Li
2024-06-27 23:06:03 +08:00
committed by GitHub
parent 474295cf31
commit 0051832f91

View File

@ -99,6 +99,7 @@ import java.util.Map.Entry;
import java.util.Objects;
import java.util.Optional;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.stream.Collectors;
/**
@ -140,7 +141,7 @@ public class OlapTable extends Table implements MTMVRelatedTableIf {
@SerializedName("partitionInfo")
private PartitionInfo partitionInfo;
@SerializedName("idToPartition")
private Map<Long, Partition> idToPartition = new HashMap<>();
private ConcurrentHashMap<Long, Partition> idToPartition = new ConcurrentHashMap<>();
private Map<String, Partition> nameToPartition = Maps.newTreeMap();
@SerializedName(value = "distributionInfo")
@ -611,7 +612,7 @@ public class OlapTable extends Table implements MTMVRelatedTableIf {
// reset partition info and idToPartition map
Map<Long, Long> partitionMap = Maps.newHashMap();
Map<Long, Partition> origIdToPartition = idToPartition;
idToPartition = Maps.newHashMap();
idToPartition = new ConcurrentHashMap<>();
for (Map.Entry<String, Long> entry : origPartNameToId.entrySet()) {
long newPartId = env.getNextId();
idToPartition.put(newPartId, origIdToPartition.get(entry.getValue()));