فهرست منبع

HDFS-11964. Decoding inputs should be correctly prepared in pread. Contributed by Takanobu Asanuma

Kai Zheng 7 سال پیش
والد
کامیت
7a96033b15

+ 5 - 1
hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/PositionStripeReader.java

@@ -57,6 +57,10 @@ class PositionStripeReader extends StripeReader {
     Preconditions.checkState(index >= dataBlkNum &&
         alignedStripe.chunks[index] == null);
 
+    int bufLen = (int) alignedStripe.getSpanInBlock();
+    decodeInputs[index] = new ECChunk(codingBuffer.duplicate(), index * bufLen,
+        bufLen);
+
     alignedStripe.chunks[index] =
         new StripingChunk(decodeInputs[index].getBuffer());
 
@@ -75,7 +79,7 @@ class PositionStripeReader extends StripeReader {
     codingBuffer = dfsStripedInputStream.getBufferPool().
         getBuffer(useDirectBuffer(), bufLen * bufCount);
     ByteBuffer buffer;
-    for (int i = 0; i < decodeInputs.length; i++) {
+    for (int i = 0; i < dataBlkNum; i++) {
       buffer = codingBuffer.duplicate();
       decodeInputs[i] = new ECChunk(buffer, i * bufLen, bufLen);
     }