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:
parent
588baab160
commit
07ecdb877d
|
@ -844,6 +844,11 @@ public class DFSStripedOutputStream extends DFSOutputStream {
|
||||||
|
|
||||||
void writeParityCells() throws IOException {
|
void writeParityCells() throws IOException {
|
||||||
final ByteBuffer[] buffers = cellBuffers.getBuffers();
|
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 the data cells
|
||||||
encode(encoder, numDataBlocks, buffers);
|
encode(encoder, numDataBlocks, buffers);
|
||||||
for (int i = numDataBlocks; i < numAllBlocks; i++) {
|
for (int i = numDataBlocks; i < numAllBlocks; i++) {
|
||||||
|
@ -852,6 +857,19 @@ public class DFSStripedOutputStream extends DFSOutputStream {
|
||||||
cellBuffers.clear();
|
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)
|
void writeParity(int index, ByteBuffer buffer, byte[] checksumBuf)
|
||||||
throws IOException {
|
throws IOException {
|
||||||
final StripedDataStreamer current = setCurrentStreamer(index);
|
final StripedDataStreamer current = setCurrentStreamer(index);
|
||||||
|
|
|
@ -184,6 +184,9 @@ Trunk (Unreleased)
|
||||||
HDFS-9070. Allow fsck display pending replica location information for
|
HDFS-9070. Allow fsck display pending replica location information for
|
||||||
being-written blocks. (GAO Rui via jing9)
|
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
|
OPTIMIZATIONS
|
||||||
|
|
||||||
BUG FIXES
|
BUG FIXES
|
||||||
|
|
Loading…
Reference in New Issue