You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by wa...@apache.org on 2016/03/28 09:47:41 UTC
hadoop git commit: HDFS-10182. Hedged read might overwrite user's
buf. Contributed by zhouyingchao.
Repository: hadoop
Updated Branches:
refs/heads/trunk 115be193d -> d8383c687
HDFS-10182. Hedged read might overwrite user's buf. Contributed by zhouyingchao.
Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo
Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/d8383c68
Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/d8383c68
Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/d8383c68
Branch: refs/heads/trunk
Commit: d8383c687c95dbb37effa307ab2d41497da1cfc2
Parents: 115be19
Author: Walter Su <wa...@apache.org>
Authored: Mon Mar 28 15:44:25 2016 +0800
Committer: Walter Su <wa...@apache.org>
Committed: Mon Mar 28 15:44:25 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/d8383c68/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/DFSInputStream.java
----------------------------------------------------------------------
diff --git a/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/DFSInputStream.java b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/DFSInputStream.java
index 7661e82..2689841 100644
--- a/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/DFSInputStream.java
+++ b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/DFSInputStream.java
@@ -1279,7 +1279,7 @@ public class DFSInputStream extends FSInputStream
// 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,
corruptedBlocks, hedgedReadId++);
@@ -1290,7 +1290,9 @@ public class DFSInputStream extends FSInputStream
Future<ByteBuffer> future = hedgedService.poll(
conf.getHedgedReadThresholdMillis(), TimeUnit.MILLISECONDS);
if (future != null) {
- future.get();
+ ByteBuffer result = future.get();
+ System.arraycopy(result.array(), result.position(), buf, offset,
+ len);
return;
}
DFSClient.LOG.debug("Waited {}ms to read from {}; spawning hedged "
@@ -1328,13 +1330,9 @@ public class DFSInputStream extends FSInputStream
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