[ 
https://issues.apache.org/jira/browse/HDDS-5005?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17305378#comment-17305378
 ] 

Janus Chow commented on HDDS-5005:
----------------------------------

[~kmizumar] Could you help to provide the way to reproduce this issue? 
According to the description, it will always happen with some specific 
chunksize.

> Multipart Upload fails due to partName mismatch
> -----------------------------------------------
>
>                 Key: HDDS-5005
>                 URL: https://issues.apache.org/jira/browse/HDDS-5005
>             Project: Apache Ozone
>          Issue Type: Bug
>          Components: OM, S3
>    Affects Versions: 1.0.0
>         Environment: h4. {color:#172b4d}Ozone 1.0.0{color}
>  * version = 1.0.0
>  *  build = 
> https://github.com/apache/hadoop-ozone.git/28d372ca903b4741131bace09e0339e9161257bb
>  ; compiled by 'sammi' on 2020-08-25T13:05Z
>  * java = 1.8.0_162
> h4. OS
>  * Ubuntu 18.04.5 LTS
>  * Linux kernel 5.4.0-64-generic
>            Reporter: Kiyoshi Mizumaru
>            Priority: Major
>         Attachments: om-audit-HOSTNAME-2021-03-14-19-53-09-1.log.gz
>
>
> We're running the official Ozone 1.0.0 release and facing S3 Multipart Upload 
> failures with large files. The error message looks similar to that is 
> reported in HDDS-3554 but we'd like to report what we've found so far to help 
> the further investigation of this issue.
> h1. The error message recorded in OM log
> Please find the following error message excerpted from our OM. Forgive us we 
> redacted some sensitive information such as username and keyname which imply 
> our project's topic.
> {code:java}
> 2021-03-14 07:48:41,947 [IPC Server handler 88 on default port 9862] ERROR 
> org.apache.hadoop.ozone.om.request.s3.multipart.S3MultipartUploadCompleteRequest:
>  MultipartUpload Complete request failed for Key: <REDACTED_KEYNAME> in 
> Volume/Bucket s3v/<BUCKETNAME>
> INVALID_PART org.apache.hadoop.ozone.om.exceptions.OMException: Complete 
> Multipart Upload Failed: volume: s3v bucket: <BUCKETNAME> key: 
> <REDACTED_KEYNAME>. Provided Part info is { 
> /s3v/<BUCKETNAME>/<REDACTED_KEYNAME>105884795658268282, 4}, whereas OM has 
> partName /s3v/<BUCKETNAME>/<REDACTED_KEYNAME>105884791629180406
>         at 
> org.apache.hadoop.ozone.om.request.s3.multipart.S3MultipartUploadCompleteRequest.validateAndUpdateCache(S3MultipartUploadCompleteRequest.java:199)
>         at 
> org.apache.hadoop.ozone.protocolPB.OzoneManagerRequestHandler.handleWriteRequest(OzoneManagerRequestHandler.java:227)
>         at 
> org.apache.hadoop.ozone.protocolPB.OzoneManagerProtocolServerSideTranslatorPB.submitRequestDirectlyToOM(OzoneManagerProtocolServerSideTranslatorPB.java:224)
>         at 
> org.apache.hadoop.ozone.protocolPB.OzoneManagerProtocolServerSideTranslatorPB.processRequest(OzoneManagerProtocolServerSideTranslatorPB.java:145)
>         at 
> org.apache.hadoop.hdds.server.OzoneProtocolMessageDispatcher.processRequest(OzoneProtocolMessageDispatcher.java:74)
>         at 
> org.apache.hadoop.ozone.protocolPB.OzoneManagerProtocolServerSideTranslatorPB.submitRequest(OzoneManagerProtocolServerSideTranslatorPB.java:113)
>         at 
> org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos$OzoneManagerService$2.callBlockingMethod(OzoneManagerProtocolProtos.java)
>         at 
> org.apache.hadoop.ipc.ProtobufRpcEngine$Server$ProtoBufRpcInvoker.call(ProtobufRpcEngine.java:528)
>         at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:1070)
>         at org.apache.hadoop.ipc.Server$RpcCall.run(Server.java:999)
>         at org.apache.hadoop.ipc.Server$RpcCall.run(Server.java:927)
>         at java.security.AccessController.doPrivileged(Native Method)
>         at javax.security.auth.Subject.doAs(Subject.java:422)
>         at 
> org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1730)
>         at org.apache.hadoop.ipc.Server$Handler.run(Server.java:2915){code}
> Anyway, OM thinks the partName for the partNumber 4 is 
> /s3v/<BUCKETNAME>/<REDACTED_KEYNAME>105884791629180406 but 
> COMPLETE_MULTIPART_UPLOAD request think it must be 
> /s3v/<BUCKETNAME>/<REDACTED_KEYNAME>105884795658268282. This discrepancy is 
> the immediate cause for this error.
> h1. OM audit log says both are correct
> Please find attached om-audit-HOSTNAME-2021-03-14-19-53-09-1.log.gz (also 
> redacted, sorry), it contains filtered output of our OM audit log, the lines 
> which include <REDACTED_KEYNAME> and multipartList entry are remain.
> Interestingly, according to the OM audit log, there're two 
> COMMIT_MULTIPART_UPLOAD_PARTKEY operations exist for partNumber=4 and both 
> operations were succeeded:
>  
> {code:java}
> % zgrep partNumber=4, om-audit-HOSTNAME-2021-03-14-19-53-09-1.log.gz
> 2021-03-14 07:16:04,992 | INFO  | OMAudit | user=<REDACTED_UPN> | 
> ip=10.192.17.172 | op=COMMIT_MULTIPART_UPLOAD_PARTKEY {volume=s3v, 
> bucket=<BUCKETNAME>, key=<REDACTED_KEYNAME>, dataSize=8388608, 
> replicationType=RATIS, replicationFactor=ONE, partNumber=4, 
> partName=/s3v/<BUCKETNAME>/<REDACTED_KEYNAME>105884795658268282} | 
> ret=SUCCESS | 
> 2021-03-14 07:18:11,828 | INFO  | OMAudit | user=<REDACTED_UPN> | 
> ip=10.192.17.172 | op=COMMIT_MULTIPART_UPLOAD_PARTKEY {volume=s3v, 
> bucket=<BUCKETNAME>, key=<REDACTED_KEYNAME>, dataSize=8388608, 
> replicationType=RATIS, replicationFactor=ONE, partNumber=4, 
> partName=/s3v/<BUCKETNAME>/<REDACTED_KEYNAME>105884791629180406} | 
> ret=SUCCESS | 
> %
> {code}
>  
> OM seemed to have accepted both partName ending with 105884795658268282 and  
> 105884791629180406 for partNumber 4. And COMPLETE_MULTIPART_UPLOAD operation 
> was called with the prior partName but OM believed it had the latter partName 
> for partNumber 4.
>  
> {code:java}
> 2021-03-14 07:48:41,947 | ERROR | OMAudit | user=<REDACTED_UPN> | 
> ip=10.192.17.172 | op=COMPLETE_MULTIPART_UPLOAD {volume=s3v, 
> bucket=<BUCKETNAME>, key=<REDACTED_KEYNAME>, dataSize=0, replicationType=
> RATIS, replicationFactor=ONE, multipartList=[partNumber: 1
> partName: "/s3v/<BUCKETNAME>/<REDACTED_KEYNAME>105884791631605244"
> , partNumber: 2
> partName: "/s3v/<BUCKETNAME>/<REDACTED_KEYNAME>105884791631539707"
> , partNumber: 3
> partName: "/s3v/<BUCKETNAME>/<REDACTED_KEYNAME>105884791628262900"
> , partNumber: 4
> partName: "/s3v/<BUCKETNAME>/<REDACTED_KEYNAME>105884795658268282"
> , partNumber: 5
> partName: "/s3v/<BUCKETNAME>/<REDACTED_KEYNAME>105884791629245944"
> , partNumber: 6
> partName: "/s3v/<BUCKETNAME>/<REDACTED_KEYNAME>105884791629245943"
> {code}
> We can also find there're multiple COMMIT_MULTIPART_UPLOAD_PARTKEY operations 
> for several partNumbers, such as partNumber 4, 13, 20, 45, 57, 67, 73, ... 
> some partNumbers like 172 have more than three 
> COMMIT_MULTIPART_UPLOAD_PARTKEY operations they're all succeeded.
>  
> h1. How to solve this issue?
> At first we thought this issue is caused by race condition, but noticed that 
> there're enough time between each COMMIT_MULTIPART_UPLOAD_PARKEY operation. 
> We're not sure but noticed that write operations to OmMetadataManager are 
> isolated with omMetadataManager.getLock().acquireWriteLock(BUCKET_LOCK, 
> volumeName, bucketName);
>  
> {code:java}
>      multipartKey = omMetadataManager.getMultipartKey(volumeName,
>          bucketName, keyName, uploadID);
>      // TODO to support S3 ACL later.
>      acquiredLock = omMetadataManager.getLock().acquireWriteLock(BUCKET_LOCK,
>          volumeName, bucketName);
>      validateBucketAndVolume(omMetadataManager, volumeName, bucketName);
>      String ozoneKey = omMetadataManager.getOzoneKey(
>          volumeName, bucketName, keyName);
>      OmMultipartKeyInfo multipartKeyInfo = omMetadataManager
>          .getMultipartInfoTable().get(multipartKey);
> {code}
>  
> So our question is, is it normal to have multiple 
> COMMIT_MULTIPART_UPLOAD_PARTKEY operations for a partNumber, with different 
> partNames?
> h1. Other findings
> This issue occurs less frequently with aws configure set 
> default.s3.multipart_chunksize 256MB. Almost always fails with 
> multipart_chunksize 8MB, 1GB in our environment.
>  
>  



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

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

Reply via email to