[ 
https://issues.apache.org/jira/browse/HDDS-10395?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Ivan Andika updated HDDS-10395:
-------------------------------
    Description: 
Found an eTag incompatibility in S3 listParts while testing the multipart 
uploads old S3G and new OMs.

First issue is in KeyManagerImpl#listParts
{code:java}
OmPartInfo omPartInfo = new OmPartInfo(partKeyInfo.getPartNumber(),
    partName,
    partKeyInfo.getPartKeyInfo().getModificationTime(),
    partKeyInfo.getPartKeyInfo().getDataSize(),
    partKeyInfo.getPartKeyInfo().getMetadataList().stream()
        .filter(keyValue -> keyValue.getKey().equals(ETAG))
        .findFirst().get().getValue()); {code}
This will throw "java.util.NoSuchElementException: No value present" in case 
where the MPU part does not contain eTag field (before HDDS-9680)

Second issue, is that ObjectEndpoint#listParts is currently only returning the 
MPU part eTag, which might not exist for old MPU parts. This can be resolved by 
falling back to using partName as eTag if the eTag is not specified.

Third issue is the NPE when calling setETag with null (in OmPartInfo#getProto). 
This can be resolved by doing a simple nullity check.

  was:
Found an eTag incompatibility in S3 listParts while testing the multipart 
uploads old S3G and new OMs.

First issue is in KeyManagerImpl#listParts
{code:java}
OmPartInfo omPartInfo = new OmPartInfo(partKeyInfo.getPartNumber(),
    partName,
    partKeyInfo.getPartKeyInfo().getModificationTime(),
    partKeyInfo.getPartKeyInfo().getDataSize(),
    partKeyInfo.getPartKeyInfo().getMetadataList().stream()
        .filter(keyValue -> keyValue.getKey().equals(ETAG))
        .findFirst().get().getValue()); {code}
This will throw "java.util.NoSuchElementException: No value present" in case 
where the MPU part does not contain eTag field (before HDDS-9680)

Second issue, is that ObjectEndpoint#listParts is currently only returning the 
MPU part eTag, which might not exist for old MPU parts. This can be resolved by 
falling back to using partName as eTag if the eTag is not specified.

 


> Fix compatibility issue with eTag during MPU listParts
> ------------------------------------------------------
>
>                 Key: HDDS-10395
>                 URL: https://issues.apache.org/jira/browse/HDDS-10395
>             Project: Apache Ozone
>          Issue Type: Improvement
>          Components: OM, Ozone Manager, S3
>            Reporter: Ivan Andika
>            Assignee: Ivan Andika
>            Priority: Major
>
> Found an eTag incompatibility in S3 listParts while testing the multipart 
> uploads old S3G and new OMs.
> First issue is in KeyManagerImpl#listParts
> {code:java}
> OmPartInfo omPartInfo = new OmPartInfo(partKeyInfo.getPartNumber(),
>     partName,
>     partKeyInfo.getPartKeyInfo().getModificationTime(),
>     partKeyInfo.getPartKeyInfo().getDataSize(),
>     partKeyInfo.getPartKeyInfo().getMetadataList().stream()
>         .filter(keyValue -> keyValue.getKey().equals(ETAG))
>         .findFirst().get().getValue()); {code}
> This will throw "java.util.NoSuchElementException: No value present" in case 
> where the MPU part does not contain eTag field (before HDDS-9680)
> Second issue, is that ObjectEndpoint#listParts is currently only returning 
> the MPU part eTag, which might not exist for old MPU parts. This can be 
> resolved by falling back to using partName as eTag if the eTag is not 
> specified.
> Third issue is the NPE when calling setETag with null (in 
> OmPartInfo#getProto). This can be resolved by doing a simple nullity check.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

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

Reply via email to