From 9ee886f74cab198b4e530af22c05535e2227cdfc Mon Sep 17 00:00:00 2001 From: Ritesh H Shukla Date: Fri, 14 Apr 2023 15:53:32 -0700 Subject: [PATCH] HDDS-8424: Preserve legacy bucket getKeyInfo behavior Change-Id: Ic67b7751ba8b60261892bbcbf7e845c3c7c490ad --- hadoop-ozone/dist/src/main/smoketest/s3/commonawslib.robot | 5 +++++ hadoop-ozone/dist/src/main/smoketest/s3/objecthead.robot | 6 ++++++ .../java/org/apache/hadoop/ozone/om/KeyManagerImpl.java | 3 +++ 3 files changed, 14 insertions(+) diff --git a/hadoop-ozone/dist/src/main/smoketest/s3/commonawslib.robot b/hadoop-ozone/dist/src/main/smoketest/s3/commonawslib.robot index b9622fbcf3f5..86ac9d5ebe25 100644 --- a/hadoop-ozone/dist/src/main/smoketest/s3/commonawslib.robot +++ b/hadoop-ozone/dist/src/main/smoketest/s3/commonawslib.robot @@ -112,6 +112,11 @@ Create bucket with name ${result} = Execute AWSS3APICli create-bucket --bucket ${bucket} Should contain ${result} Location Should contain ${result} ${bucket} +Create legacy bucket + ${postfix} = Generate Ozone String + ${legacy_bucket} = Set Variable legacy-bucket-${postfix} + ${result} = Execute and checkrc ozone sh bucket create -l LEGACY s3v/${legacy_bucket} 0 + [Return] ${legacy_bucket} Setup s3 tests Return From Keyword if ${OZONE_S3_TESTS_SET_UP} diff --git a/hadoop-ozone/dist/src/main/smoketest/s3/objecthead.robot b/hadoop-ozone/dist/src/main/smoketest/s3/objecthead.robot index 90d07ed94267..1d63bed73d79 100644 --- a/hadoop-ozone/dist/src/main/smoketest/s3/objecthead.robot +++ b/hadoop-ozone/dist/src/main/smoketest/s3/objecthead.robot @@ -40,6 +40,12 @@ Head object in non existing bucket ${result} = Execute AWSS3APICli and checkrc head-object --bucket ${BUCKET}-non-existent --key ${PREFIX}/headobject/key=value/f1 255 Should contain ${result} 404 Should contain ${result} Not Found +Head object where path is a directory + ${legacy-bucket} = Create legacy bucket + ${result} = Execute AWSS3APICli and checkrc put-object --bucket ${legacy-bucket} --key ${PREFIX}/headobject/keyvalue/f1 --body /tmp/testfile 0 + ${result} = Execute AWSS3APICli and checkrc head-object --bucket ${legacy-bucket} --key ${PREFIX}/headobject/keyvalue/ 255 + Should contain ${result} 404 + Should contain ${result} Not Found Head non existing key ${result} = Execute AWSS3APICli and checkrc head-object --bucket ${BUCKET} --key ${PREFIX}/non-existent 255 diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/KeyManagerImpl.java b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/KeyManagerImpl.java index c2929fefd321..75e7500429a8 100644 --- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/KeyManagerImpl.java +++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/KeyManagerImpl.java @@ -405,6 +405,9 @@ private OmKeyInfo readKeyInfo(OmKeyArgs args) throws IOException { value = getOmKeyInfoFSO(volumeName, bucketName, keyName); } else { value = getOmKeyInfoDirectoryAware(volumeName, bucketName, keyName); + if (bucketLayout.isLegacy() && value != null && !value.isFile()) { + value = null; // Legacy buckets do not report key info for directories + } } } catch (IOException ex) { if (ex instanceof OMException) {