diff --git a/hadoop-ozone/client/src/main/java/org/apache/hadoop/ozone/client/OzoneKeyLocation.java b/hadoop-ozone/client/src/main/java/org/apache/hadoop/ozone/client/OzoneKeyLocation.java index 0ff8ba749b62..7f1df7cf2089 100644 --- a/hadoop-ozone/client/src/main/java/org/apache/hadoop/ozone/client/OzoneKeyLocation.java +++ b/hadoop-ozone/client/src/main/java/org/apache/hadoop/ozone/client/OzoneKeyLocation.java @@ -39,16 +39,20 @@ public class OzoneKeyLocation { * Offset of this key. */ private final long offset; - + /** + * KeyOffset of this key. + */ + private final long keyOffset; /** * Constructs OzoneKeyLocation. */ public OzoneKeyLocation(long containerID, long localID, - long length, long offset) { + long length, long offset, long keyOffset) { this.containerID = containerID; this.localID = localID; this.length = length; this.offset = offset; + this.keyOffset = keyOffset; } /** @@ -79,4 +83,11 @@ public long getOffset() { return offset; } + /** + * Returns the KeyOffset of this Key. + */ + public long getKeyOffset() { + return keyOffset; + } + } diff --git a/hadoop-ozone/client/src/main/java/org/apache/hadoop/ozone/client/rpc/RpcClient.java b/hadoop-ozone/client/src/main/java/org/apache/hadoop/ozone/client/rpc/RpcClient.java index ed85a32adb13..e95227ce214a 100644 --- a/hadoop-ozone/client/src/main/java/org/apache/hadoop/ozone/client/rpc/RpcClient.java +++ b/hadoop-ozone/client/src/main/java/org/apache/hadoop/ozone/client/rpc/RpcClient.java @@ -80,6 +80,7 @@ import org.apache.hadoop.ozone.om.helpers.OmDeleteKeys; import org.apache.hadoop.ozone.om.helpers.OmKeyArgs; import org.apache.hadoop.ozone.om.helpers.OmKeyInfo; +import org.apache.hadoop.ozone.om.helpers.OmKeyLocationInfo; import org.apache.hadoop.ozone.om.helpers.OmMultipartInfo; import org.apache.hadoop.ozone.om.helpers.OmMultipartUploadCompleteInfo; import org.apache.hadoop.ozone.om.helpers.OmMultipartUploadCompleteList; @@ -858,9 +859,15 @@ public OzoneKeyDetails getKeyDetails( OmKeyInfo keyInfo = ozoneManagerClient.lookupKey(keyArgs); List ozoneKeyLocations = new ArrayList<>(); - keyInfo.getLatestVersionLocations().getBlocksLatestVersionOnly().forEach( - (a) -> ozoneKeyLocations.add(new OzoneKeyLocation(a.getContainerID(), - a.getLocalID(), a.getLength(), a.getOffset()))); + long lastKeyOffset = 0L; + List omKeyLocationInfos = keyInfo + .getLatestVersionLocations().getBlocksLatestVersionOnly(); + for (OmKeyLocationInfo info: omKeyLocationInfos) { + ozoneKeyLocations.add(new OzoneKeyLocation(info.getContainerID(), + info.getLocalID(), info.getLength(), info.getOffset(), + lastKeyOffset)); + lastKeyOffset += info.getLength(); + } return new OzoneKeyDetails(keyInfo.getVolumeName(), keyInfo.getBucketName(), keyInfo.getKeyName(), keyInfo.getDataSize(), keyInfo.getCreationTime(), keyInfo.getModificationTime(), ozoneKeyLocations, ReplicationType