HDFS-9261. Erasure Coding: Skip encoding the data cells if all the parity data streamers are failed for the current block group. (Rakesh R via umamahesh)

This commit is contained in:
Uma Mahesh 2015-10-28 23:33:11 -07:00
parent 588baab160
commit 07ecdb877d
2 changed files with 21 additions and 0 deletions

View File

@ -844,6 +844,11 @@ public class DFSStripedOutputStream extends DFSOutputStream {
void writeParityCells() throws IOException {
final ByteBuffer[] buffers = cellBuffers.getBuffers();
// Skips encoding and writing parity cells if there are no healthy parity
// data streamers
if (!checkAnyParityStreamerIsHealthy()) {
return;
}
//encode the data cells
encode(encoder, numDataBlocks, buffers);
for (int i = numDataBlocks; i < numAllBlocks; i++) {
@ -852,6 +857,19 @@ public class DFSStripedOutputStream extends DFSOutputStream {
cellBuffers.clear();
}
private boolean checkAnyParityStreamerIsHealthy() {
for (int i = numDataBlocks; i < numAllBlocks; i++) {
if (streamers.get(i).isHealthy()) {
return true;
}
}
if (LOG.isDebugEnabled()) {
LOG.debug("Skips encoding and writing parity cells as there are "
+ "no healthy parity data streamers: " + streamers);
}
return false;
}
void writeParity(int index, ByteBuffer buffer, byte[] checksumBuf)
throws IOException {
final StripedDataStreamer current = setCurrentStreamer(index);

View File

@ -184,6 +184,9 @@ Trunk (Unreleased)
HDFS-9070. Allow fsck display pending replica location information for
being-written blocks. (GAO Rui via jing9)
HDFS-9261. Erasure Coding: Skip encoding the data cells if all the parity data
streamers are failed for the current block group. (Rakesh R via umamahesh)
OPTIMIZATIONS
BUG FIXES