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]