diff --git a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/server/JsonUtils.java b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/server/JsonUtils.java index 79c3b4e67938..1cc7e821b9a2 100644 --- a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/server/JsonUtils.java +++ b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/server/JsonUtils.java @@ -21,6 +21,7 @@ import java.io.IOException; import java.util.List; +import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectWriter; import com.fasterxml.jackson.databind.SerializationFeature; @@ -39,6 +40,7 @@ public final class JsonUtils { private static final ObjectWriter WRITTER; static { MAPPER = new ObjectMapper() + .setSerializationInclusion(JsonInclude.Include.NON_NULL) .registerModule(new JavaTimeModule()) .configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false); WRITTER = MAPPER.writerWithDefaultPrettyPrinter(); diff --git a/hadoop-ozone/dist/src/main/smoketest/basic/links.robot b/hadoop-ozone/dist/src/main/smoketest/basic/links.robot index 847c4b1afd1b..9b07af159071 100644 --- a/hadoop-ozone/dist/src/main/smoketest/basic/links.robot +++ b/hadoop-ozone/dist/src/main/smoketest/basic/links.robot @@ -103,8 +103,14 @@ Bucket list contains links Should Contain ${result} dangling-link Bucket info shows source - ${result} = Execute ozone sh bucket info ${target}/link1 | jq -r '.sourceVolume, .sourceBucket' | xargs - Should Be Equal ${result} ${source} bucket1 + ${result} = Execute ozone sh bucket info ${target}/link1 + Should Contain ${result} ${source} + Should Contain ${result} bucket1 + Should Contain ${result} ${target} + Should Contain ${result} link1 + Should Contain ${result} modificationTime + Should Contain ${result} creationTime + Should Not contain ${result} metadata Source and target have separate ACLs Execute ozone sh bucket addacl --acl user:user1:rwxy ${target}/link1 diff --git a/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/shell/bucket/InfoBucketHandler.java b/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/shell/bucket/InfoBucketHandler.java index e9ae5f97965f..6c6948c8ad05 100644 --- a/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/shell/bucket/InfoBucketHandler.java +++ b/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/shell/bucket/InfoBucketHandler.java @@ -24,6 +24,7 @@ import picocli.CommandLine.Command; import java.io.IOException; +import java.time.Instant; /** * Executes Info bucket. @@ -40,7 +41,56 @@ public void execute(OzoneClient client, OzoneAddress address) .getVolume(address.getVolumeName()) .getBucket(address.getBucketName()); - printObjectAsJson(bucket); + if (bucket.getSourceBucket() != null && bucket.getSourceVolume() != null) { + printObjectAsJson(new LinkBucket(bucket)); + } else { + printObjectAsJson(bucket); + } + } + + /** + * Class used for link buckets. + */ + private static class LinkBucket { + private String volumeName; + private String bucketName; + private String sourceVolume; + private String sourceBucket; + private Instant creationTime; + private Instant modificationTime; + + LinkBucket(OzoneBucket ozoneBucket) { + this.volumeName = ozoneBucket.getVolumeName(); + this.bucketName = ozoneBucket.getName(); + this.sourceVolume = ozoneBucket.getSourceVolume(); + this.sourceBucket = ozoneBucket.getSourceBucket(); + this.creationTime = ozoneBucket.getCreationTime(); + this.modificationTime = ozoneBucket.getModificationTime(); + } + + public String getVolumeName() { + return volumeName; + } + + public String getBucketName() { + return bucketName; + } + + public String getSourceVolume() { + return sourceVolume; + } + + public String getSourceBucket() { + return sourceBucket; + } + + public Instant getCreationTime() { + return creationTime; + } + + public Instant getModificationTime() { + return modificationTime; + } } }