You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ozone.apache.org by ad...@apache.org on 2022/07/25 13:47:11 UTC

[ozone] branch master updated: HDDS-7041. Avoid ConcurrentModificationException in RepeatedOmKeyInfo (#3617)

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

adoroszlai pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ozone.git


The following commit(s) were added to refs/heads/master by this push:
     new 11cdb25fec HDDS-7041. Avoid ConcurrentModificationException in RepeatedOmKeyInfo (#3617)
11cdb25fec is described below

commit 11cdb25fecb62519462901de7f46bac5b10af701
Author: Symious <yi...@foxmail.com>
AuthorDate: Mon Jul 25 21:47:03 2022 +0800

    HDDS-7041. Avoid ConcurrentModificationException in RepeatedOmKeyInfo (#3617)
---
 .../java/org/apache/hadoop/ozone/om/helpers/RepeatedOmKeyInfo.java | 7 ++++++-
 .../java/org/apache/hadoop/ozone/om/OmMetadataManagerImpl.java     | 2 +-
 2 files changed, 7 insertions(+), 2 deletions(-)

diff --git a/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/helpers/RepeatedOmKeyInfo.java b/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/helpers/RepeatedOmKeyInfo.java
index ac58d609a9..feb12f884a 100644
--- a/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/helpers/RepeatedOmKeyInfo.java
+++ b/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/helpers/RepeatedOmKeyInfo.java
@@ -52,6 +52,11 @@ public class RepeatedOmKeyInfo {
     return omKeyInfoList;
   }
 
+  // HDDS-7041. Return a new ArrayList to avoid ConcurrentModifyException
+  public List<OmKeyInfo> cloneOmKeyInfoList() {
+    return new ArrayList<>(omKeyInfoList);
+  }
+
   public static RepeatedOmKeyInfo getFromProto(RepeatedKeyInfo
       repeatedKeyInfo) throws IOException {
     List<OmKeyInfo> list = new ArrayList<>();
@@ -68,7 +73,7 @@ public class RepeatedOmKeyInfo {
    */
   public RepeatedKeyInfo getProto(boolean compact, int clientVersion) {
     List<KeyInfo> list = new ArrayList<>();
-    for (OmKeyInfo k : omKeyInfoList) {
+    for (OmKeyInfo k : cloneOmKeyInfoList()) {
       list.add(k.getProtobuf(compact, clientVersion));
     }
 
diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OmMetadataManagerImpl.java b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OmMetadataManagerImpl.java
index 8e9ddd7c01..1db265ed58 100644
--- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OmMetadataManagerImpl.java
+++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OmMetadataManagerImpl.java
@@ -1233,7 +1233,7 @@ public class OmMetadataManagerImpl implements OMMetadataManager {
         KeyValue<String, RepeatedOmKeyInfo> kv = keyIter.next();
         if (kv != null) {
           RepeatedOmKeyInfo infoList = kv.getValue();
-          for (OmKeyInfo info : infoList.getOmKeyInfoList()) {
+          for (OmKeyInfo info : infoList.cloneOmKeyInfoList()) {
             // Add all blocks from all versions of the key to the deletion list
             for (OmKeyLocationInfoGroup keyLocations :
                 info.getKeyLocationVersions()) {


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@ozone.apache.org
For additional commands, e-mail: commits-help@ozone.apache.org