e instanceof ChecksumException) && codec.isDirRaid) {
if (retry <= 0) {
throw e;
}
redo = true;
CorruptBlockReconstructor constructor =
new CorruptBlockReconstructor(conf);
Set<Path> srcPaths = new HashSet<Path>();
for (int idx : errorLocations) {
Path srcPath = stripeInputInfo.getSrcPaths()[idx];
if (srcPath != null) {
srcPaths.add(srcPath);
}
}
for (Path srcPath : srcPaths) {
Decoder decoder = new Decoder(conf, codec);
decoder.connectToStore(srcPath);
LOG.info("In Encoding: try to reconstruct the file: " + srcPath);
// will throw exception if it fails to reconstruct the lost
// blocks.
constructor.processFile(srcPath, null, decoder, true, null);
LOG.info("In Encoding: finished to reconstruct the file: " + srcPath);
}
} else {
throw e;
}