diff --git a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/ObjectEndpoint.java b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/ObjectEndpoint.java index 1eac008365c7..7b0085c7657b 100644 --- a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/ObjectEndpoint.java +++ b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/ObjectEndpoint.java @@ -184,6 +184,18 @@ public Response put( // Normal put object OzoneBucket bucket = getBucket(bucketName); + // S3A Filesystem when create directory creates a put object with 0 bytes. + // So, we can safely call create directory. + // And also in S3 world, there is no such API to create a directory. + // If some one is passing key with trailing "/" and length 0, Ozone S3 + // can create directory. + + if (length == 0 && keyPath.endsWith("/")) { + bucket.createDirectory(keyPath); + return Response.ok().status(HttpStatus.SC_OK) + .build(); + } + output = bucket.createKey(keyPath, length, replicationType, replicationFactor, new HashMap<>());