You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ozone.apache.org by fe...@apache.org on 2023/03/17 03:58:02 UTC

[ozone] branch master updated: HDDS-8183. Fix edge case where delimiter is empty string in BucketEndpoint#get (#4410)

This is an automated email from the ASF dual-hosted git repository.

ferhui pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ozone.git


The following commit(s) were added to refs/heads/master by this push:
     new 864ec707b7 HDDS-8183. Fix edge case where delimiter is empty string in BucketEndpoint#get (#4410)
864ec707b7 is described below

commit 864ec707b71ceac974d88127ec7faa0c09996b77
Author: Ivan Andika <36...@users.noreply.github.com>
AuthorDate: Fri Mar 17 11:57:54 2023 +0800

    HDDS-8183. Fix edge case where delimiter is empty string in BucketEndpoint#get (#4410)
---
 .../ozone/s3/commontypes/EncodingTypeObject.java   |  4 ++-
 .../hadoop/ozone/s3/endpoint/BucketEndpoint.java   |  2 +-
 .../hadoop/ozone/s3/endpoint/TestBucketList.java   | 29 ++++++++++++++++++++++
 3 files changed, 33 insertions(+), 2 deletions(-)

diff --git a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/commontypes/EncodingTypeObject.java b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/commontypes/EncodingTypeObject.java
index 02540ff57c..e55eb37a38 100644
--- a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/commontypes/EncodingTypeObject.java
+++ b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/commontypes/EncodingTypeObject.java
@@ -17,6 +17,8 @@
  */
 package org.apache.hadoop.ozone.s3.commontypes;
 
+import org.apache.commons.lang3.StringUtils;
+
 import javax.annotation.Nullable;
 
 /**
@@ -45,7 +47,7 @@ public final class EncodingTypeObject {
    */
   @Nullable public static EncodingTypeObject createNullable(
       @Nullable String name, @Nullable String encodingType) {
-    if (name == null) {
+    if (StringUtils.isEmpty(name)) {
       return null;
     }
     return new EncodingTypeObject(name, encodingType);
diff --git a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/BucketEndpoint.java b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/BucketEndpoint.java
index bb1fb95275..81a1cea265 100644
--- a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/BucketEndpoint.java
+++ b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/BucketEndpoint.java
@@ -196,7 +196,7 @@ public class BucketEndpoint extends EndpointBase {
       String relativeKeyName = next.getName().substring(prefix.length());
 
       int depth = StringUtils.countMatches(relativeKeyName, delimiter);
-      if (delimiter != null) {
+      if (!StringUtils.isEmpty(delimiter)) {
         if (depth > 0) {
           // means key has multiple delimiters in its value.
           // ex: dir/dir1/dir2, where delimiter is "/" and prefix is dir/
diff --git a/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestBucketList.java b/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestBucketList.java
index a597233f2e..f77c970f5f 100644
--- a/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestBucketList.java
+++ b/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestBucketList.java
@@ -171,6 +171,35 @@ public class TestBucketList {
 
   }
 
+  @Test
+  public void listWithPrefixAndEmptyStrDelimiter()
+      throws OS3Exception, IOException {
+    BucketEndpoint getBucket = new BucketEndpoint();
+
+    OzoneClient ozoneClient =
+        createClientWithKeys("dir1/", "dir1/dir2/", "dir1/dir2/file1",
+          "dir1/dir2/file2");
+
+    getBucket.setClient(ozoneClient);
+
+    // Should behave the same if delimiter is null
+    ListObjectResponse getBucketResponse =
+        (ListObjectResponse) getBucket.get("b1", "", null, null, 100, "dir1/",
+          null, null, null, null, null).getEntity();
+
+    Assert.assertEquals(0, getBucketResponse.getCommonPrefixes().size());
+    Assert.assertEquals(4, getBucketResponse.getContents().size());
+    Assert.assertEquals("dir1/",
+        getBucketResponse.getContents().get(0).getKey().getName());
+    Assert.assertEquals("dir1/dir2/",
+        getBucketResponse.getContents().get(1).getKey().getName());
+    Assert.assertEquals("dir1/dir2/file1",
+        getBucketResponse.getContents().get(2).getKey().getName());
+    Assert.assertEquals("dir1/dir2/file2",
+        getBucketResponse.getContents().get(3).getKey().getName());
+
+  }
+
   @Test
   public void listWithContinuationToken() throws OS3Exception, IOException {
 


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