From 34642781c24e9fb6deddb14ca77b8541d2799536 Mon Sep 17 00:00:00 2001 From: Mingyu Chen Date: Thu, 7 Dec 2023 18:26:02 +0800 Subject: [PATCH] [fix](meta) fix ConcurrentModificationException when dump image (#28072) ``` Caused by: java.util.ConcurrentModificationException at java.util.HashMap$HashIterator.nextNode(HashMap.java:1437) ~[?:1.8.0_131] at java.util.HashMap$EntryIterator.next(HashMap.java:1471) ~[?:1.8.0_131] at java.util.HashMap$EntryIterator.next(HashMap.java:1469) ~[?:1.8.0_131] at org.apache.doris.catalog.CatalogRecycleBin.write(CatalogRecycleBin.java:1047) ~[doris-fe.jar:1.2-SNAPSHOT] at org.apache.doris.catalog.Env.saveRecycleBin(Env.java:2298) ~[doris-fe.jar:1.2-SNAPSHOT] ``` When calling `/dump` api to dump image, ConcurrentModificationException may be thrown. Because no lock to protect `CatalogRecycleBin` --- .../main/java/org/apache/doris/catalog/CatalogRecycleBin.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/CatalogRecycleBin.java b/fe/fe-core/src/main/java/org/apache/doris/catalog/CatalogRecycleBin.java index e328270ae1..ac66dc6dd3 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/catalog/CatalogRecycleBin.java +++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/CatalogRecycleBin.java @@ -1033,8 +1033,10 @@ public class CatalogRecycleBin extends MasterDaemon implements Writable { return Stream.of(dbInfos, tableInfos, partitionInfos).flatMap(Collection::stream).collect(Collectors.toList()); } + // Need to add "synchronized", because when calling /dump api to dump image, + // this class is not protected by any lock, will throw ConcurrentModificationException. @Override - public void write(DataOutput out) throws IOException { + public synchronized void write(DataOutput out) throws IOException { int count = idToDatabase.size(); out.writeInt(count); for (Map.Entry entry : idToDatabase.entrySet()) {