CLDSRV-986: Pass overhead fields when abortMPU cleans up after completeMPU - #6268
Conversation
…teMPU The cleanup deletes the object or version an earlier CompleteMultipartUpload created; without the overhead fields the resulting oplog entry carries no owner id, which makes SUR hit an assert.
Hello dvasilas,My role is to assist you with the merge of this Available options
Available commands
Status report is not available. |
Incorrect fix versionThe
Considering where you are trying to merge, I ignored possible hotfix versions and I expected to find:
Please check the |
Request integration branchesWaiting for integration branch creation to be requested by the user. To request integration branches, please comment on this pull request with the following command: Alternatively, the |
82078d2 to
3a93a5e
Compare
|
/create_integration_branches |
ConflictA conflict has been raised during the creation of I have not created the integration branch. Here are the steps to resolve this conflict: git fetch
git checkout -B w/9.4/bugfix/CLDSRV-986-abortmpu-delete-overhead-fields origin/development/9.4
git merge origin/bugfix/CLDSRV-986-abortmpu-delete-overhead-fields
# <intense conflict resolution>
git commit
git push -u origin w/9.4/bugfix/CLDSRV-986-abortmpu-delete-overhead-fieldsThe following options are set: create_integration_branches |
Codecov Report❌ Patch coverage is
Additional details and impacted files
... and 3 files with indirect coverage changes @@ Coverage Diff @@
## development/9.3 #6268 +/- ##
================================================
Coverage 85.30% 85.31%
================================================
Files 206 206
Lines 13434 13435 +1
================================================
+ Hits 11460 11462 +2
+ Misses 1974 1973 -1
Flags with carried forward coverage won't be shown. Click here to find out more. 🚀 New features to boost your workflow:
|
25480a6 to
4628dd2
Compare
|
/reset |
Reset completeI have successfully deleted this pull request's integration branches. The following options are set: create_integration_branches |
ConflictA conflict has been raised during the creation of I have not created the integration branch. Here are the steps to resolve this conflict: git fetch
git checkout -B w/9.4/bugfix/CLDSRV-986-abortmpu-delete-overhead-fields origin/development/9.4
git merge origin/bugfix/CLDSRV-986-abortmpu-delete-overhead-fields
# <intense conflict resolution>
git commit
git push -u origin w/9.4/bugfix/CLDSRV-986-abortmpu-delete-overhead-fieldsThe following options are set: create_integration_branches |
|
🤖 |
Integration data createdI have created the integration data for the additional destination branches.
The following branches will NOT be impacted:
You can set option The following options are set: create_integration_branches |
Waiting for approvalThe following approvals are needed before I can proceed with the merge:
The following options are set: create_integration_branches |
Build failedThe build for commit did not succeed in branch w/9.4/bugfix/CLDSRV-986-abortmpu-delete-overhead-fields The following options are set: approve, create_integration_branches |
|
/status |
Status
The following options are set: approve, create_integration_branches |
Build failedThe build for commit did not succeed in branch w/9.4/bugfix/CLDSRV-986-abortmpu-delete-overhead-fields The following options are set: approve, create_integration_branches |
|
/approve |
Waiting for approvalThe following approvals are needed before I can proceed with the merge:
The following options are set: create_integration_branches |
Build failedThe build for commit did not succeed in branch w/9.4/bugfix/CLDSRV-986-abortmpu-delete-overhead-fields The following options are set: approve, create_integration_branches |
|
I have successfully merged the changeset of this pull request
The following branches have NOT changed:
This pull request did not target the following hotfix branch(es) so they
Please check the status of the associated issue CLDSRV-986. Goodbye dvasilas. The following options are set: approve, create_integration_branches |
When
AbortMultipartUploadfinds an object created by an MPU whose upload ID is still addressable, it cleans up the created object.It issues the
deleteObjectMDrequest to delete the object without passing theoverheadFieldparameter, which instructs Metadata to copy the overhead fields into the oplog entry.So the resulting oplog entry has an
overheadthat includes only theoriginOpfield (does not include theowner idfield required by SUR).This state can arise from
CompleteMultipartUpload's ordering.The shadow bucket holds one overview key per MPU. That key is what makes an upload ID addressable (
metadataValidateMultipartfetches it and returnsNoSuchUploadwhen it is missing).CompleteMultipartUploadwrites the resulting object first, and then deletes the MPU part keys and the overview key.There are two cases in which an
AbortMultipartUploadfinds both the overview key in the shadow bucket and the object created by the MPU, and cleans up the object:AbortMultipartUploadarrives in the window where the resulting object has been created but the MPU state has not yet been cleaned up from the shadow bucket.SUR cannot count an entry with no owner ID. It asserts on the existence of the owner ID field in
overhead.An oplog entry without the owner ID field completely blocks the SUR ingestor for the corresponding raft session.
Testing
A test that reproduces this scenario already exists:
'should delete the correct orphaned object version'intests/unit/api/apiUtils/object/abortMultipartUpload.spec.js