-
Notifications
You must be signed in to change notification settings - Fork 509
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
HDDS-10630. Add missing parent directories deleted between initiate and complete MPU #6496
Changes from 5 commits
322035f
7c102bb
a1d7755
4a0bbb6
bff4553
c200cf1
a1c5c53
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
@@ -18,12 +18,15 @@ | |||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
package org.apache.hadoop.ozone.om.request.s3.multipart; | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
import org.apache.hadoop.hdds.utils.db.BatchOperation; | ||||||||||||||||||||||||||||||||||||||||||||||||||
import org.apache.hadoop.ozone.om.OMMetadataManager; | ||||||||||||||||||||||||||||||||||||||||||||||||||
import org.apache.hadoop.ozone.om.OzoneManager; | ||||||||||||||||||||||||||||||||||||||||||||||||||
import org.apache.hadoop.ozone.om.exceptions.OMException; | ||||||||||||||||||||||||||||||||||||||||||||||||||
import org.apache.hadoop.ozone.om.helpers.BucketLayout; | ||||||||||||||||||||||||||||||||||||||||||||||||||
import org.apache.hadoop.ozone.om.helpers.OmBucketInfo; | ||||||||||||||||||||||||||||||||||||||||||||||||||
import org.apache.hadoop.ozone.om.helpers.OmDirectoryInfo; | ||||||||||||||||||||||||||||||||||||||||||||||||||
import org.apache.hadoop.ozone.om.helpers.OmKeyInfo; | ||||||||||||||||||||||||||||||||||||||||||||||||||
import org.apache.hadoop.ozone.om.helpers.OmMultipartKeyInfo; | ||||||||||||||||||||||||||||||||||||||||||||||||||
import org.apache.hadoop.ozone.om.request.file.OMFileRequest; | ||||||||||||||||||||||||||||||||||||||||||||||||||
import org.apache.hadoop.ozone.om.response.OMClientResponse; | ||||||||||||||||||||||||||||||||||||||||||||||||||
import org.apache.hadoop.ozone.om.response.s3.multipart.S3MultipartUploadCompleteResponse; | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
@@ -74,6 +77,70 @@ protected void checkDirectoryAlreadyExists(OzoneManager ozoneManager, | |||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
@Override | ||||||||||||||||||||||||||||||||||||||||||||||||||
protected void addMissingParentsToTable(OmBucketInfo omBucketInfo, | ||||||||||||||||||||||||||||||||||||||||||||||||||
List<OmDirectoryInfo> missingParentInfos, | ||||||||||||||||||||||||||||||||||||||||||||||||||
OMMetadataManager omMetadataManager, long volumeId, long bucketId, | ||||||||||||||||||||||||||||||||||||||||||||||||||
long transactionLogIndex) throws IOException { | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
// validate and update namespace for missing parent directory. | ||||||||||||||||||||||||||||||||||||||||||||||||||
checkBucketQuotaInNamespace(omBucketInfo, missingParentInfos.size()); | ||||||||||||||||||||||||||||||||||||||||||||||||||
omBucketInfo.incrUsedNamespace(missingParentInfos.size()); | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
// Add cache entries for the missing parent directories. | ||||||||||||||||||||||||||||||||||||||||||||||||||
OMFileRequest.addDirectoryTableCacheEntries(omMetadataManager, | ||||||||||||||||||||||||||||||||||||||||||||||||||
volumeId, bucketId, transactionLogIndex, | ||||||||||||||||||||||||||||||||||||||||||||||||||
missingParentInfos, null); | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
// Create missing parent directory entries. | ||||||||||||||||||||||||||||||||||||||||||||||||||
try (BatchOperation batchOperation = omMetadataManager.getStore() | ||||||||||||||||||||||||||||||||||||||||||||||||||
.initBatchOperation()) { | ||||||||||||||||||||||||||||||||||||||||||||||||||
for (OmDirectoryInfo parentDirInfo : missingParentInfos) { | ||||||||||||||||||||||||||||||||||||||||||||||||||
final String parentKey = omMetadataManager.getOzonePathKey( | ||||||||||||||||||||||||||||||||||||||||||||||||||
volumeId, bucketId, parentDirInfo.getParentObjectID(), | ||||||||||||||||||||||||||||||||||||||||||||||||||
parentDirInfo.getName()); | ||||||||||||||||||||||||||||||||||||||||||||||||||
omMetadataManager.getDirectoryTable().putWithBatch(batchOperation, | ||||||||||||||||||||||||||||||||||||||||||||||||||
parentKey, parentDirInfo); | ||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
// namespace quota changes for parent directory | ||||||||||||||||||||||||||||||||||||||||||||||||||
String bucketKey = omMetadataManager.getBucketKey( | ||||||||||||||||||||||||||||||||||||||||||||||||||
omBucketInfo.getVolumeName(), | ||||||||||||||||||||||||||||||||||||||||||||||||||
omBucketInfo.getBucketName()); | ||||||||||||||||||||||||||||||||||||||||||||||||||
omMetadataManager.getBucketTable().putWithBatch(batchOperation, | ||||||||||||||||||||||||||||||||||||||||||||||||||
bucketKey, omBucketInfo); | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
omMetadataManager.getStore().commitBatchOperation(batchOperation); | ||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I think adding to DB batch should be handled in the response object by design. It uses an existing batch and commits only if the response is OK. Lines 79 to 102 in 06c0d81
|
||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
@Override | ||||||||||||||||||||||||||||||||||||||||||||||||||
protected void addMultiParttoOpenTable( | ||||||||||||||||||||||||||||||||||||||||||||||||||
OMMetadataManager omMetadataManager, String multipartOpenKey, | ||||||||||||||||||||||||||||||||||||||||||||||||||
OmMultipartKeyInfo multipartKeyInfo, | ||||||||||||||||||||||||||||||||||||||||||||||||||
OMFileRequest.OMPathInfoWithFSO pathInfoFSO, OmKeyInfo omKeyInfo, | ||||||||||||||||||||||||||||||||||||||||||||||||||
long volumeId, long bucketId, long transactionLogIndex | ||||||||||||||||||||||||||||||||||||||||||||||||||
) throws IOException { | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
// Add multi part to cache | ||||||||||||||||||||||||||||||||||||||||||||||||||
OMFileRequest.addOpenFileTableCacheEntry(omMetadataManager, | ||||||||||||||||||||||||||||||||||||||||||||||||||
multipartOpenKey, omKeyInfo, pathInfoFSO.getLeafNodeName(), | ||||||||||||||||||||||||||||||||||||||||||||||||||
transactionLogIndex); | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
// Add multi part to open key table. | ||||||||||||||||||||||||||||||||||||||||||||||||||
try (BatchOperation batchOperation = omMetadataManager.getStore() | ||||||||||||||||||||||||||||||||||||||||||||||||||
.initBatchOperation()) { | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
OMFileRequest.addToOpenFileTableForMultipart(omMetadataManager, | ||||||||||||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Even this should be done in S3MultipartUploadCompleteResponseWithFSO instead here. |
||||||||||||||||||||||||||||||||||||||||||||||||||
batchOperation, | ||||||||||||||||||||||||||||||||||||||||||||||||||
omKeyInfo, multipartKeyInfo.getUploadID(), volumeId, | ||||||||||||||||||||||||||||||||||||||||||||||||||
bucketId); | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
omMetadataManager.getStore().commitBatchOperation(batchOperation); | ||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
@Override | ||||||||||||||||||||||||||||||||||||||||||||||||||
protected OmKeyInfo getOmKeyInfoFromKeyTable(String dbOzoneFileKey, | ||||||||||||||||||||||||||||||||||||||||||||||||||
String keyName, OMMetadataManager omMetadataManager) throws IOException { | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think this should be done in S3MultipartUploadCompleteResponseWithFSO instead here or else db entry will be added only on the leader OM.