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

avijayan pushed a commit to branch HDDS-3698-upgrade
in repository https://gitbox.apache.org/repos/asf/hadoop-ozone.git

commit 6ffd933388688d227470438a6aece9c98cc673f3
Author: maobaolong <[email protected]>
AuthorDate: Sat Aug 29 03:31:09 2020 +0800

    HDDS-4151. Skip the inputstream while offset larger than zero in s3g (#1354)
---
 .../apache/hadoop/ozone/client/io/OzoneInputStream.java    |  5 +++++
 .../apache/hadoop/ozone/s3/endpoint/ObjectEndpoint.java    | 14 +++++++++++---
 2 files changed, 16 insertions(+), 3 deletions(-)

diff --git 
a/hadoop-ozone/client/src/main/java/org/apache/hadoop/ozone/client/io/OzoneInputStream.java
 
b/hadoop-ozone/client/src/main/java/org/apache/hadoop/ozone/client/io/OzoneInputStream.java
index a69740f..14b2866 100644
--- 
a/hadoop-ozone/client/src/main/java/org/apache/hadoop/ozone/client/io/OzoneInputStream.java
+++ 
b/hadoop-ozone/client/src/main/java/org/apache/hadoop/ozone/client/io/OzoneInputStream.java
@@ -57,6 +57,11 @@ public class OzoneInputStream extends InputStream {
     return inputStream.available();
   }
 
+  @Override
+  public long skip(long n) throws IOException {
+    return inputStream.skip(n);
+  }
+
   public InputStream getInputStream() {
     return inputStream;
   }
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 5502173..f665560 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
@@ -38,6 +38,7 @@ import javax.ws.rs.core.Response;
 import javax.ws.rs.core.Response.ResponseBuilder;
 import javax.ws.rs.core.Response.Status;
 import javax.ws.rs.core.StreamingOutput;
+import java.io.EOFException;
 import java.io.IOException;
 import java.io.InputStream;
 import java.time.Instant;
@@ -277,7 +278,8 @@ public class ObjectEndpoint extends EndpointBase {
           try (S3WrapperInputStream s3WrapperInputStream =
               new S3WrapperInputStream(
                   key.getInputStream())) {
-            IOUtils.copyLarge(s3WrapperInputStream, dest, startOffset,
+            s3WrapperInputStream.seek(startOffset);
+            IOUtils.copyLarge(s3WrapperInputStream, dest, 0,
                 copyLength, new byte[bufferSize]);
           }
         };
@@ -557,8 +559,14 @@ public class ObjectEndpoint extends EndpointBase {
             if (range != null) {
               RangeHeader rangeHeader =
                   RangeHeaderParserUtil.parseRangeHeader(range, 0);
-              IOUtils.copyLarge(sourceObject, ozoneOutputStream,
-                  rangeHeader.getStartOffset(),
+              final long skipped =
+                  sourceObject.skip(rangeHeader.getStartOffset());
+              if (skipped != rangeHeader.getStartOffset()) {
+                throw new EOFException(
+                    "Bytes to skip: "
+                        + rangeHeader.getStartOffset() + " actual: " + 
skipped);
+              }
+              IOUtils.copyLarge(sourceObject, ozoneOutputStream, 0,
                   rangeHeader.getEndOffset() - rangeHeader.getStartOffset());
             } else {
               IOUtils.copy(sourceObject, ozoneOutputStream);


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to