You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@ozone.apache.org by "Wei-Chiu Chuang (Jira)" <ji...@apache.org> on 2023/01/08 00:17:00 UTC

[jira] [Created] (HDDS-7749) Review and fix all incorrect use of openKeyTable and openFileTable

Wei-Chiu Chuang created HDDS-7749:
-------------------------------------

             Summary: Review and fix all incorrect use of openKeyTable and openFileTable
                 Key: HDDS-7749
                 URL: https://issues.apache.org/jira/browse/HDDS-7749
             Project: Apache Ozone
          Issue Type: Bug
          Components: Ozone Manager
            Reporter: Wei-Chiu Chuang


The current open key/open file design is _very_ brittle_. I found several places where incorrect key name are used.

Review these and fix them asap.

 

[ozone/KeyManagerImpl.java at 2ba8bb71f128ec619c5bed9b6303394e8677bf53 · apache/ozone|https://github.com/apache/ozone/blob/2ba8bb71f128ec619c5bed9b6303394e8677bf53/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/KeyManagerImpl.java#L1056]

{{String objectKey = metadataManager.getOzoneKey(volume, bucket, keyName);}}

{{metadataManager.getOpenKeyTable(bucketLayout).get(objectKey);}}

*objectKey* is not in the the format of an open key name.

[ozone/S3MultipartUploadCommitPartRequest.java at ca2d59bde4614a8fde5beabd2e81ebf022bed2ac · apache/ozone|https://github.com/apache/ozone/blob/ca2d59bde4614a8fde5beabd2e81ebf022bed2ac/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/multipart/S3MultipartUploadCommitPartRequest.java#L225-L227]

 

{{omMetadataManager.getOpenKeyTable(getBucketLayout()).addCacheEntry(
    new CacheKey<>(openKey),
    new CacheValue<>(Optional.absent(), trxnLogIndex));}}

multipart upload request does not add *openKey* to open key table. Instead, it uses multipartkey.

[ozone/S3MultipartUploadCommitPartRequest.java at ca2d59bde4614a8fde5beabd2e81ebf022bed2ac · apache/ozone|https://github.com/apache/ozone/blob/ca2d59bde4614a8fde5beabd2e81ebf022bed2ac/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/multipart/S3MultipartUploadCommitPartRequest.java#L291]

 

{{protected OmKeyInfo getOmKeyInfo(OMMetadataManager omMetadataManager,
    String openKey, String keyName) throws IOException \{

  return omMetadataManager.getOpenKeyTable(getBucketLayout()).get(openKey);
}}}

this code looks suspicious. Again, multipart upload request does not use openKey in the open table. So why is this needed at all?

[ozone/TestS3MultipartUploadCommitPartResponseWithFSO.java at 576a3ebc0ae180bf96e05e1b0ee829f5cb000b45 · apache/ozone|https://github.com/apache/ozone/blob/576a3ebc0ae180bf96e05e1b0ee829f5cb000b45/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/response/s3/multipart/TestS3MultipartUploadCommitPartResponseWithFSO.java#L217]

 

{{Assert.assertNull(
    omMetadataManager.getOpenKeyTable(getBucketLayout()).get(openKey));}}

looks suspicious. Again, openKey are supposedly not used and shouldn’t need to check.

[ozone/TestS3MultipartUploadCompleteResponseWithFSO.java at 576a3ebc0ae180bf96e05e1b0ee829f5cb000b45 · apache/ozone|https://github.com/apache/ozone/blob/576a3ebc0ae180bf96e05e1b0ee829f5cb000b45/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/response/s3/multipart/TestS3MultipartUploadCompleteResponseWithFSO.java#L290]

 

{{Assert.assertNull(
    omMetadataManager.getOpenKeyTable(getBucketLayout()).get(multipartKey));}}

Again, a “multiplartOpenKey” should be used instead.

[ozone/OMFileRequest.java at 179755eab0913ffa8fe32f3ccb3316f8bfc19486 · apache/ozone|https://github.com/apache/ozone/blob/179755eab0913ffa8fe32f3ccb3316f8bfc19486/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/file/OMFileRequest.java#L560]

 

{{/**
 * Adding multipart omKeyInfo to open file table.
 *
 *@paramomMetadataMgrOM Metadata Manager
 *@parambatchOpbatch of db operations
 *@paramomFileInfoomKeyInfo
 *@paramuploadIDuploadID
 *@returnmultipartFileKey
 *@throwsIOException DB failure
 */
public static String addToOpenFileTable(OMMetadataManager omMetadataMgr,
    BatchOperation batchOp, OmKeyInfo omFileInfo, String uploadID,
    long volumeId, long bucketId) throws IOException {}}

[ozone/OMMetadataManager.java at 5eead92666b374c4bb912f332488acb23f9a81df · apache/ozone|https://github.com/apache/ozone/blob/5eead92666b374c4bb912f332488acb23f9a81df/hadoop-ozone/interface-storage/src/main/java/org/apache/hadoop/ozone/om/OMMetadataManager.java#L475-L487]

 

{{/**
 * Returns the DB key name of a multipart upload key in OM metadata store.
 *
 *@paramvolumeId- ID of the volume
 *@parambucketId- ID of the bucket
 *@paramparentObjectId- parent object Id
 *@paramfileName- file name
 *@paramuploadId- the upload id for this key
 *@returnbytes of DB key.
 */
String getMultipartKey(long volumeId, long bucketId,
                       long parentObjectId, String fileName,
                       String uploadId);}}

This API is used by FSO only. Need to make it clear.



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

---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscribe@ozone.apache.org
For additional commands, e-mail: issues-help@ozone.apache.org