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

szetszwo 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 9d78dfd3e9 HDDS-8427. Optimize multipartUpload memory usage (#4572)
9d78dfd3e9 is described below

commit 9d78dfd3e95f853f9441866e02092ac5d41c549c
Author: XiChen <[email protected]>
AuthorDate: Thu May 18 10:28:08 2023 +0800

    HDDS-8427. Optimize multipartUpload memory usage (#4572)
---
 .../ozone/om/helpers/OmMultipartKeyInfo.java       | 130 +++++++++++++++++----
 .../ozone/om/helpers/TestOmMultipartKeyInfo.java   |   2 +-
 .../rpc/TestOzoneClientMultipartUploadWithFSO.java |  14 +--
 .../org/apache/hadoop/ozone/om/KeyManagerImpl.java |  14 +--
 .../multipart/S3MultipartUploadAbortRequest.java   |   7 +-
 .../S3MultipartUploadCommitPartRequest.java        |   2 +-
 .../S3MultipartUploadCompleteRequest.java          |  18 ++-
 .../multipart/S3MultipartUploadAbortResponse.java  |   8 +-
 .../apache/hadoop/ozone/om/TestKeyManagerUnit.java |   4 -
 .../s3/multipart/TestS3MultipartResponse.java      |   2 +-
 10 files changed, 132 insertions(+), 69 deletions(-)

diff --git 
a/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/helpers/OmMultipartKeyInfo.java
 
b/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/helpers/OmMultipartKeyInfo.java
index 86da3ebf9e..1be6e4612b 100644
--- 
a/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/helpers/OmMultipartKeyInfo.java
+++ 
b/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/helpers/OmMultipartKeyInfo.java
@@ -21,19 +21,105 @@ import org.apache.hadoop.hdds.client.ReplicationConfig;
 import 
org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.MultipartKeyInfo;
 import 
org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.PartKeyInfo;
 
-import java.util.HashMap;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Iterator;
+import java.util.List;
 import java.util.Map;
+import java.util.SortedMap;
 import java.util.TreeMap;
 
 /**
  * This class represents multipart upload information for a key, which holds
  * upload part information of the key.
  */
-public class OmMultipartKeyInfo extends WithObjectID {
+public final class OmMultipartKeyInfo extends WithObjectID {
+  /**
+   * An unmodifiable Array wrapper providing PartKeyInfo sorted by partNumber,
+   * Whenever a PartKeyInfo is added, it returns a new shallow copy of
+   * the PartKeyInfoMap instance.
+   */
+  public static class PartKeyInfoMap implements Iterable<PartKeyInfo> {
+    static final Comparator<Object> PART_NUMBER_COMPARATOR = (o1, o2) -> {
+      final int partNumber1 = o1 instanceof PartKeyInfo ?
+          ((PartKeyInfo) o1).getPartNumber() : (int) o1;
+      final int partNumber2 = o2 instanceof PartKeyInfo ?
+          ((PartKeyInfo) o2).getPartNumber() : (int) o2;
+      return Integer.compare(partNumber1, partNumber2);
+    };
+
+    /**
+     * Adds a PartKeyInfo to sortedPartKeyInfoList.
+     * If a partKeyInfo with the same PartNumber is in the array, the old value
+     * will be replaced, otherwise the PartNumber will be inserted in the right
+     * place to ensure the array is ordered.
+     * @param partKeyInfo the partKeyInfo will be added
+     */
+    static void put(PartKeyInfo partKeyInfo, List<PartKeyInfo> sortedList) {
+      if (partKeyInfo == null) {
+        return;
+      }
+      final int i = Collections.binarySearch(sortedList, partKeyInfo,
+          Comparator.comparingInt(PartKeyInfo::getPartNumber));
+      if (i >= 0) {
+        sortedList.set(i, partKeyInfo);
+      } else {
+        sortedList.add(-(i + 1), partKeyInfo);
+      }
+    }
+
+    static PartKeyInfoMap put(PartKeyInfo partKeyInfo,
+        PartKeyInfoMap sortedMap) {
+      if (partKeyInfo == null) {
+        return sortedMap;
+      }
+      final List<PartKeyInfo> list = new ArrayList<>(sortedMap.sorted);
+      put(partKeyInfo, list);
+      return new PartKeyInfoMap(list);
+    }
+
+    private final List<PartKeyInfo> sorted;
+
+    PartKeyInfoMap(List<PartKeyInfo> sorted) {
+      this.sorted = Collections.unmodifiableList(sorted);
+    }
+
+    PartKeyInfoMap(SortedMap<Integer, PartKeyInfo> sorted) {
+      this(new ArrayList<>(sorted.values()));
+    }
+
+    /**
+     * Retrieves a PartKeyInfo based on its part number.
+     *
+     * @param partNumber The part number of the PartKeyInfo to retrieve.
+     * @return The PartKeyInfo with the specified part number.
+     *         If no such PartKeyInfo exists, returns null.
+     */
+    public PartKeyInfo get(int partNumber) {
+      final int i = Collections.binarySearch(
+          sorted, partNumber, PART_NUMBER_COMPARATOR);
+      return i >= 0 ? sorted.get(i) : null;
+    }
+
+    public int size() {
+      return sorted.size();
+    }
+
+    @Override
+    public Iterator<PartKeyInfo> iterator() {
+      return sorted.iterator();
+    }
+
+    public PartKeyInfo lastEntry() {
+      return sorted.get(size() - 1);
+    }
+  }
+
   private final String uploadID;
   private final long creationTime;
   private final ReplicationConfig replicationConfig;
-  private TreeMap<Integer, PartKeyInfo> partKeyInfoList;
+  private PartKeyInfoMap partKeyInfoMap;
 
   /**
    * A pointer to parent directory used for path traversal. ParentID will be
@@ -63,15 +149,18 @@ public class OmMultipartKeyInfo extends WithObjectID {
    * Construct OmMultipartKeyInfo object which holds multipart upload
    * information for a key.
    */
-  public OmMultipartKeyInfo(String id, long creationTime,
+  @SuppressWarnings("parameternumber")
+  private OmMultipartKeyInfo(String id, long creationTime,
       ReplicationConfig replicationConfig,
-      Map<Integer, PartKeyInfo> list, long objectID, long updateID) {
+      PartKeyInfoMap sortedMap, long objectID, long updateID,
+      long parentObjId) {
     this.uploadID = id;
     this.creationTime = creationTime;
     this.replicationConfig = replicationConfig;
-    this.partKeyInfoList = new TreeMap<>(list);
+    this.partKeyInfoMap = sortedMap;
     this.objectID = objectID;
     this.updateID = updateID;
+    this.parentID = parentObjId;
   }
 
   /**
@@ -79,12 +168,12 @@ public class OmMultipartKeyInfo extends WithObjectID {
    * information for a key.
    */
   @SuppressWarnings("parameternumber")
-  public OmMultipartKeyInfo(String id, long creationTime,
+  private OmMultipartKeyInfo(String id, long creationTime,
       ReplicationConfig replicationConfig,
-      Map<Integer, PartKeyInfo> list, long objectID, long updateID,
+      SortedMap<Integer, PartKeyInfo> list, long objectID, long updateID,
       long parentObjId) {
-    this(id, creationTime, replicationConfig, list, objectID, updateID);
-    this.parentID = parentObjId;
+    this(id, creationTime, replicationConfig, new PartKeyInfoMap(list),
+        objectID, updateID, parentObjId);
   }
 
   /**
@@ -108,16 +197,16 @@ public class OmMultipartKeyInfo extends WithObjectID {
     return creationTime;
   }
 
-  public TreeMap<Integer, PartKeyInfo> getPartKeyInfoMap() {
-    return partKeyInfoList;
+  public PartKeyInfoMap getPartKeyInfoMap() {
+    return partKeyInfoMap;
   }
 
-  public void addPartKeyInfo(int partNumber, PartKeyInfo partKeyInfo) {
-    this.partKeyInfoList.put(partNumber, partKeyInfo);
+  public void addPartKeyInfo(PartKeyInfo partKeyInfo) {
+    this.partKeyInfoMap = PartKeyInfoMap.put(partKeyInfo, partKeyInfoMap);
   }
 
   public PartKeyInfo getPartKeyInfo(int partNumber) {
-    return partKeyInfoList.get(partNumber);
+    return partKeyInfoMap.get(partNumber);
   }
 
   public ReplicationConfig getReplicationConfig() {
@@ -197,7 +286,7 @@ public class OmMultipartKeyInfo extends WithObjectID {
    */
   public static OmMultipartKeyInfo getFromProto(
       MultipartKeyInfo multipartKeyInfo) {
-    Map<Integer, PartKeyInfo> list = new HashMap<>();
+    final SortedMap<Integer, PartKeyInfo> list = new TreeMap<>();
     multipartKeyInfo.getPartKeyInfoListList().forEach(partKeyInfo ->
         list.put(partKeyInfo.getPartNumber(), partKeyInfo));
 
@@ -233,7 +322,7 @@ public class OmMultipartKeyInfo extends WithObjectID {
       builder.setFactor(ReplicationConfig.getLegacyFactor(replicationConfig));
     }
 
-    partKeyInfoList.forEach((key, value) -> builder.addPartKeyInfoList(value));
+    builder.addAllPartKeyInfoList(partKeyInfoMap);
     return builder.build();
   }
 
@@ -257,10 +346,11 @@ public class OmMultipartKeyInfo extends WithObjectID {
   }
 
   public OmMultipartKeyInfo copyObject() {
-    // For partKeyInfoList we can do shallow copy here, as the PartKeyInfo is
-    // immutable here.
+    // PartKeyInfoMap is an immutable data structure. Whenever a PartKeyInfo
+    // is added, it returns a new shallow copy of the PartKeyInfoMap Object
+    // so here we can directly pass in partKeyInfoMap
     return new OmMultipartKeyInfo(uploadID, creationTime, replicationConfig,
-            new TreeMap<>(partKeyInfoList), objectID, updateID, parentID);
+        partKeyInfoMap, objectID, updateID, parentID);
   }
 
 }
diff --git 
a/hadoop-ozone/common/src/test/java/org/apache/hadoop/ozone/om/helpers/TestOmMultipartKeyInfo.java
 
b/hadoop-ozone/common/src/test/java/org/apache/hadoop/ozone/om/helpers/TestOmMultipartKeyInfo.java
index c6f8818e24..df48d5ac97 100644
--- 
a/hadoop-ozone/common/src/test/java/org/apache/hadoop/ozone/om/helpers/TestOmMultipartKeyInfo.java
+++ 
b/hadoop-ozone/common/src/test/java/org/apache/hadoop/ozone/om/helpers/TestOmMultipartKeyInfo.java
@@ -105,7 +105,7 @@ public class TestOmMultipartKeyInfo {
     OmMultipartKeyInfo copy = subject.copyObject();
 
     // WHEN
-    subject.addPartKeyInfo(1, createPart(createKeyInfo()).build());
+    subject.addPartKeyInfo(createPart(createKeyInfo()).build());
 
     // THEN
     assertEquals(0, copy.getPartKeyInfoMap().size());
diff --git 
a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/client/rpc/TestOzoneClientMultipartUploadWithFSO.java
 
b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/client/rpc/TestOzoneClientMultipartUploadWithFSO.java
index 90ac291817..5ce2f8a1ed 100644
--- 
a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/client/rpc/TestOzoneClientMultipartUploadWithFSO.java
+++ 
b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/client/rpc/TestOzoneClientMultipartUploadWithFSO.java
@@ -602,11 +602,8 @@ public class TestOzoneClientMultipartUploadWithFSO {
         metadataMgr.getMultipartInfoTable().get(multipartKey);
     Assert.assertNotNull(omMultipartKeyInfo);
 
-    TreeMap<Integer, OzoneManagerProtocolProtos.PartKeyInfo> partKeyInfoMap =
-        omMultipartKeyInfo.getPartKeyInfoMap();
-    for (Map.Entry<Integer, OzoneManagerProtocolProtos.PartKeyInfo> entry :
-        partKeyInfoMap.entrySet()) {
-      OzoneManagerProtocolProtos.PartKeyInfo partKeyInfo = entry.getValue();
+    for (OzoneManagerProtocolProtos.PartKeyInfo partKeyInfo :
+        omMultipartKeyInfo.getPartKeyInfoMap()) {
       String partKeyName = partKeyInfo.getPartName();
 
       // reconstruct full part name with volume, bucket, partKeyName
@@ -845,11 +842,8 @@ public class TestOzoneClientMultipartUploadWithFSO {
         omKeyInfo.getKeyName());
     Assert.assertEquals(uploadID, omMultipartKeyInfo.getUploadID());
 
-    TreeMap<Integer, OzoneManagerProtocolProtos.PartKeyInfo> partKeyInfoMap =
-        omMultipartKeyInfo.getPartKeyInfoMap();
-    for (Map.Entry<Integer, OzoneManagerProtocolProtos.PartKeyInfo> entry :
-        partKeyInfoMap.entrySet()) {
-      OzoneManagerProtocolProtos.PartKeyInfo partKeyInfo = entry.getValue();
+    for (OzoneManagerProtocolProtos.PartKeyInfo partKeyInfo :
+        omMultipartKeyInfo.getPartKeyInfoMap()) {
       OmKeyInfo currentKeyPartInfo =
           OmKeyInfo.getFromProtobuf(partKeyInfo.getPartKeyInfo());
 
diff --git 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/KeyManagerImpl.java
 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/KeyManagerImpl.java
index 4d6a91e358..179561db14 100644
--- 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/KeyManagerImpl.java
+++ 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/KeyManagerImpl.java
@@ -732,10 +732,8 @@ public class KeyManagerImpl implements KeyManager {
         throw new OMException("No Such Multipart upload exists for this key.",
             ResultCodes.NO_SUCH_MULTIPART_UPLOAD_ERROR);
       } else {
-        TreeMap<Integer, PartKeyInfo> partKeyInfoMap =
-            multipartKeyInfo.getPartKeyInfoMap();
-        Iterator<Map.Entry<Integer, PartKeyInfo>> partKeyInfoMapIterator =
-            partKeyInfoMap.entrySet().iterator();
+        Iterator<PartKeyInfo> partKeyInfoMapIterator =
+            multipartKeyInfo.getPartKeyInfoMap().iterator();
 
         ReplicationConfig replicationConfig = null;
 
@@ -743,13 +741,11 @@ public class KeyManagerImpl implements KeyManager {
         List<OmPartInfo> omPartInfoList = new ArrayList<>();
 
         while (count < maxParts && partKeyInfoMapIterator.hasNext()) {
-          Map.Entry<Integer, PartKeyInfo> partKeyInfoEntry =
-              partKeyInfoMapIterator.next();
-          nextPartNumberMarker = partKeyInfoEntry.getKey();
+          PartKeyInfo partKeyInfo = partKeyInfoMapIterator.next();
+          nextPartNumberMarker = partKeyInfo.getPartNumber();
           // As we should return only parts with part number greater
           // than part number marker
-          if (partKeyInfoEntry.getKey() > partNumberMarker) {
-            PartKeyInfo partKeyInfo = partKeyInfoEntry.getValue();
+          if (nextPartNumberMarker > partNumberMarker) {
             String partName = getPartName(partKeyInfo, volumeName, bucketName,
                 keyName);
             OmPartInfo omPartInfo = new OmPartInfo(partKeyInfo.getPartNumber(),
diff --git 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/multipart/S3MultipartUploadAbortRequest.java
 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/multipart/S3MultipartUploadAbortRequest.java
index e7a11ae71c..d8a87e24f2 100644
--- 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/multipart/S3MultipartUploadAbortRequest.java
+++ 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/multipart/S3MultipartUploadAbortRequest.java
@@ -19,7 +19,6 @@
 package org.apache.hadoop.ozone.om.request.s3.multipart;
 
 import java.io.IOException;
-import java.util.Iterator;
 import java.util.Map;
 
 import org.apache.hadoop.ozone.om.helpers.BucketLayout;
@@ -169,11 +168,7 @@ public class S3MultipartUploadAbortRequest extends 
OMKeyRequest {
       // When abort uploaded key, we need to subtract the PartKey length from
       // the volume usedBytes.
       long quotaReleased = 0;
-      Iterator iter =
-          multipartKeyInfo.getPartKeyInfoMap().entrySet().iterator();
-      while (iter.hasNext()) {
-        Map.Entry entry = (Map.Entry)iter.next();
-        PartKeyInfo iterPartKeyInfo = (PartKeyInfo)entry.getValue();
+      for (PartKeyInfo iterPartKeyInfo : multipartKeyInfo.getPartKeyInfoMap()) 
{
         quotaReleased += QuotaUtil.getReplicatedSize(
             iterPartKeyInfo.getPartKeyInfo().getDataSize(),
             omKeyInfo.getReplicationConfig());
diff --git 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/multipart/S3MultipartUploadCommitPartRequest.java
 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/multipart/S3MultipartUploadCommitPartRequest.java
index 2d4670b9f4..1769fdbb20 100644
--- 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/multipart/S3MultipartUploadCommitPartRequest.java
+++ 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/multipart/S3MultipartUploadCommitPartRequest.java
@@ -201,7 +201,7 @@ public class S3MultipartUploadCommitPartRequest extends 
OMKeyRequest {
           getOmRequest().getVersion()));
 
       // Add this part information in to multipartKeyInfo.
-      multipartKeyInfo.addPartKeyInfo(partNumber, partKeyInfo.build());
+      multipartKeyInfo.addPartKeyInfo(partKeyInfo.build());
 
       // Set the UpdateID to current transactionLogIndex
       multipartKeyInfo.setUpdateID(trxnLogIndex,
diff --git 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/multipart/S3MultipartUploadCompleteRequest.java
 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/multipart/S3MultipartUploadCompleteRequest.java
index 318c97461f..52bc3feba4 100644
--- 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/multipart/S3MultipartUploadCompleteRequest.java
+++ 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/multipart/S3MultipartUploadCompleteRequest.java
@@ -26,7 +26,6 @@ import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
 import java.util.Map;
-import java.util.TreeMap;
 
 import org.apache.hadoop.hdds.client.ReplicationConfig;
 import org.apache.hadoop.hdds.utils.db.cache.CacheKey;
@@ -174,10 +173,10 @@ public class S3MultipartUploadCompleteRequest extends 
OMKeyRequest {
             failureMessage(requestedVolume, requestedBucket, keyName),
             OMException.ResultCodes.NO_SUCH_MULTIPART_UPLOAD_ERROR);
       }
-      TreeMap<Integer, PartKeyInfo> partKeyInfoMap =
-          multipartKeyInfo.getPartKeyInfoMap();
 
       if (partsList.size() > 0) {
+        final OmMultipartKeyInfo.PartKeyInfoMap partKeyInfoMap
+            = multipartKeyInfo.getPartKeyInfoMap();
         if (partKeyInfoMap.size() == 0) {
           LOG.error("Complete MultipartUpload failed for key {} , MPU Key has" 
+
                   " no parts in OM, parts given to upload are {}", ozoneKey,
@@ -206,11 +205,10 @@ public class S3MultipartUploadCompleteRequest extends 
OMKeyRequest {
 
         //Find all unused parts.
         List<OmKeyInfo> allKeyInfoToRemove = new ArrayList<>();
-        for (Map.Entry< Integer, PartKeyInfo> partKeyInfo :
-            partKeyInfoMap.entrySet()) {
-          if (!partNumbers.contains(partKeyInfo.getKey())) {
+        for (PartKeyInfo partKeyInfo : partKeyInfoMap) {
+          if (!partNumbers.contains(partKeyInfo.getPartNumber())) {
             allKeyInfoToRemove.add(OmKeyInfo
-                .getFromProtobuf(partKeyInfo.getValue().getPartKeyInfo()));
+                .getFromProtobuf(partKeyInfo.getPartKeyInfo()));
           }
         }
 
@@ -359,11 +357,11 @@ public class S3MultipartUploadCompleteRequest extends 
OMKeyRequest {
   protected OmKeyInfo getOmKeyInfo(OzoneManager ozoneManager, long 
trxnLogIndex,
       KeyArgs keyArgs, String volumeName, String bucketName, String keyName,
       String multipartOpenKey, OMMetadataManager omMetadataManager,
-      String ozoneKey, TreeMap<Integer, PartKeyInfo> partKeyInfoMap,
+      String ozoneKey, OmMultipartKeyInfo.PartKeyInfoMap partKeyInfoMap,
       List<OmKeyLocationInfo> partLocationInfos, long dataSize)
           throws IOException {
     OzoneManagerProtocolProtos.KeyInfo partKeyInfo =
-        partKeyInfoMap.lastEntry().getValue().getPartKeyInfo();
+        partKeyInfoMap.lastEntry().getPartKeyInfo();
 
     OmKeyInfo omKeyInfo = getOmKeyInfoFromKeyTable(ozoneKey, keyName,
             omMetadataManager);
@@ -481,7 +479,7 @@ public class S3MultipartUploadCompleteRequest extends 
OMKeyRequest {
   @SuppressWarnings("checkstyle:ParameterNumber")
   private long getMultipartDataSize(String requestedVolume,
       String requestedBucket, String keyName, String ozoneKey,
-      TreeMap<Integer, PartKeyInfo> partKeyInfoMap,
+      OmMultipartKeyInfo.PartKeyInfoMap partKeyInfoMap,
       int partsListSize, List<OmKeyLocationInfo> partLocationInfos,
       List<OzoneManagerProtocolProtos.Part> partsList,
       OzoneManager ozoneManager) throws OMException {
diff --git 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/response/s3/multipart/S3MultipartUploadAbortResponse.java
 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/response/s3/multipart/S3MultipartUploadAbortResponse.java
index d30608429e..567b28da02 100644
--- 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/response/s3/multipart/S3MultipartUploadAbortResponse.java
+++ 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/response/s3/multipart/S3MultipartUploadAbortResponse.java
@@ -34,8 +34,6 @@ import 
org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos
 import org.apache.hadoop.hdds.utils.db.BatchOperation;
 
 import java.io.IOException;
-import java.util.Map;
-import java.util.TreeMap;
 import javax.annotation.Nonnull;
 
 import static org.apache.hadoop.ozone.om.OmMetadataManagerImpl.BUCKET_TABLE;
@@ -89,11 +87,7 @@ public class S3MultipartUploadAbortResponse extends 
OmKeyResponse {
         multipartKey);
 
     // Move all the parts to delete table
-    TreeMap<Integer, PartKeyInfo > partKeyInfoMap =
-        omMultipartKeyInfo.getPartKeyInfoMap();
-    for (Map.Entry<Integer, PartKeyInfo > partKeyInfoEntry :
-        partKeyInfoMap.entrySet()) {
-      PartKeyInfo partKeyInfo = partKeyInfoEntry.getValue();
+    for (PartKeyInfo partKeyInfo: omMultipartKeyInfo.getPartKeyInfoMap()) {
       OmKeyInfo currentKeyPartInfo =
           OmKeyInfo.getFromProtobuf(partKeyInfo.getPartKeyInfo());
 
diff --git 
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/TestKeyManagerUnit.java
 
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/TestKeyManagerUnit.java
index c6d9dbf13d..0d199eb7f5 100644
--- 
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/TestKeyManagerUnit.java
+++ 
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/TestKeyManagerUnit.java
@@ -67,7 +67,6 @@ import org.apache.hadoop.ozone.om.helpers.OmVolumeArgs;
 import org.apache.hadoop.ozone.om.helpers.OzoneFileStatus;
 import org.apache.hadoop.ozone.om.protocol.OzoneManagerProtocol;
 import org.apache.hadoop.ozone.om.request.OMRequestTestUtils;
-import org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos;
 import org.apache.ozone.test.GenericTestUtils;
 
 import org.apache.hadoop.util.Time;
@@ -323,15 +322,12 @@ public class TestKeyManagerUnit {
 
   private OmMultipartInfo addinitMultipartUploadToCache(
       String volume, String bucket, String key) {
-    Map<Integer, OzoneManagerProtocolProtos.PartKeyInfo > partKeyInfoMap =
-        new HashMap<>();
     String uploadID = UUID.randomUUID().toString();
     OmMultipartKeyInfo multipartKeyInfo = new OmMultipartKeyInfo.Builder()
         .setUploadID(uploadID)
         .setCreationTime(Time.now())
         .setReplicationConfig(
             RatisReplicationConfig.getInstance(ReplicationFactor.THREE))
-        .setPartKeyInfoList(partKeyInfoMap)
         .build();
 
     metadataManager.getMultipartInfoTable().addCacheEntry(
diff --git 
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/response/s3/multipart/TestS3MultipartResponse.java
 
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/response/s3/multipart/TestS3MultipartResponse.java
index a6f90828f3..af96f56590 100644
--- 
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/response/s3/multipart/TestS3MultipartResponse.java
+++ 
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/response/s3/multipart/TestS3MultipartResponse.java
@@ -143,7 +143,7 @@ public class TestS3MultipartResponse {
 
   public void addPart(int partNumber, PartKeyInfo partKeyInfo,
       OmMultipartKeyInfo omMultipartKeyInfo) {
-    omMultipartKeyInfo.addPartKeyInfo(partNumber, partKeyInfo);
+    omMultipartKeyInfo.addPartKeyInfo(partKeyInfo);
   }
 
   public PartKeyInfo createPartKeyInfo(String volumeName, String bucketName,


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to