Skip to content

Commit

Permalink
HDFS-15643. EC: Fix checksum computation in case of native encoders. (#…
Browse files Browse the repository at this point in the history
…2424). Contributed by Ayush Saxena.
  • Loading branch information
ayushtkn authored and Hexiaoqiao committed Nov 6, 2020
1 parent a314873 commit 6bee816
Showing 1 changed file with 18 additions and 3 deletions.
Expand Up @@ -87,7 +87,7 @@ public void reconstruct() throws IOException {

// step3: calculate checksum
checksumDataLen += checksumWithTargetOutput(
targetBuffer.array(), toReconstructLen);
getBufferArray(targetBuffer), toReconstructLen);

updatePositionInBlock(toReconstructLen);
requestedLen -= toReconstructLen;
Expand Down Expand Up @@ -140,7 +140,7 @@ private long checksumWithTargetOutput(byte[] outputData, int toReconstructLen)
// case-2) length of data bytes which is less than bytesPerCRC
if (requestedLen <= toReconstructLen) {
int remainingLen = Math.toIntExact(requestedLen);
outputData = Arrays.copyOf(targetBuffer.array(), remainingLen);
outputData = Arrays.copyOf(outputData, remainingLen);

int partialLength = remainingLen % getChecksum().getBytesPerChecksum();

Expand Down Expand Up @@ -207,4 +207,19 @@ private void clearBuffers() {
public long getChecksumDataLen() {
return checksumDataLen;
}
}

/**
* Gets an array corresponding the buffer.
* @param buffer the input buffer.
* @return the array with content of the buffer.
*/
private static byte[] getBufferArray(ByteBuffer buffer) {
byte[] buff = new byte[buffer.remaining()];
if (buffer.hasArray()) {
buff = buffer.array();
} else {
buffer.slice().get(buff);
}
return buff;
}
}

0 comments on commit 6bee816

Please sign in to comment.