hadoop-common-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From waltersu4...@apache.org
Subject hadoop git commit: HDFS-10182. Hedged read might overwrite user's buf. Contributed by zhouyingchao.
Date Mon, 28 Mar 2016 07:48:54 GMT
Repository: hadoop
Updated Branches:
  refs/heads/branch-2.7 17dbf82f5 -> ec459e396


HDFS-10182. Hedged read might overwrite user's buf. Contributed by zhouyingchao.

(cherry picked from commit d8383c687c95dbb37effa307ab2d41497da1cfc2)


Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo
Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/ec459e39
Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/ec459e39
Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/ec459e39

Branch: refs/heads/branch-2.7
Commit: ec459e396661cbef27d43dd8e818680b0fd3631c
Parents: 17dbf82
Author: Walter Su <waltersu4549@apache.org>
Authored: Mon Mar 28 15:44:25 2016 +0800
Committer: Walter Su <waltersu4549@apache.org>
Committed: Mon Mar 28 15:46:15 2016 +0800

----------------------------------------------------------------------
 .../java/org/apache/hadoop/hdfs/DFSInputStream.java | 16 +++++++---------
 1 file changed, 7 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hadoop/blob/ec459e39/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/DFSInputStream.java
----------------------------------------------------------------------
diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/DFSInputStream.java
b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/DFSInputStream.java
index 19dde1f..2940f35 100644
--- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/DFSInputStream.java
+++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/DFSInputStream.java
@@ -1249,7 +1249,7 @@ implements ByteBufferReadable, CanSetDropBehind, CanSetReadahead,
         // chooseDataNode is a commitment. If no node, we go to
         // the NN to reget block locations. Only go here on first read.
         chosenNode = chooseDataNode(block, ignored);
-        bb = ByteBuffer.wrap(buf, offset, len);
+        bb = ByteBuffer.allocate(len);
         Callable<ByteBuffer> getFromDataNodeCallable = getFromOneDataNode(
             chosenNode, block, start, end, bb, corruptedBlockMap,
             hedgedReadId++);
@@ -1260,7 +1260,9 @@ implements ByteBufferReadable, CanSetDropBehind, CanSetReadahead,
           Future<ByteBuffer> future = hedgedService.poll(
               dfsClient.getHedgedReadTimeout(), TimeUnit.MILLISECONDS);
           if (future != null) {
-            future.get();
+            ByteBuffer result = future.get();
+            System.arraycopy(result.array(), result.position(), buf, offset,
+                len);
             return;
           }
           if (DFSClient.LOG.isDebugEnabled()) {
@@ -1306,13 +1308,9 @@ implements ByteBufferReadable, CanSetDropBehind, CanSetReadahead,
           ByteBuffer result = getFirstToComplete(hedgedService, futures);
           // cancel the rest.
           cancelAll(futures);
-          if (result.array() != buf) { // compare the array pointers
-            dfsClient.getHedgedReadMetrics().incHedgedReadWins();
-            System.arraycopy(result.array(), result.position(), buf, offset,
-                len);
-          } else {
-            dfsClient.getHedgedReadMetrics().incHedgedReadOps();
-          }
+          dfsClient.getHedgedReadMetrics().incHedgedReadWins();
+          System.arraycopy(result.array(), result.position(), buf, offset,
+              len);
           return;
         } catch (InterruptedException ie) {
           // Ignore and retry


Mime
View raw message