HDFS-14396. Failed to load image from FSImageFile when downgrade from 3.x to 2.x. Contributed by Fei Hui.

(cherry picked from commit bd7baea5a5)
This commit is contained in:
Akira Ajisaka 2019-08-23 15:27:32 +09:00
parent d3e5898712
commit e8b93d04c4
No known key found for this signature in database
GPG Key ID: C1EDBB9CA400FD50
1 changed files with 11 additions and 4 deletions

View File

@ -568,6 +568,8 @@ public final class FSImageFormatProtobuf {
FSImageCompression compression, String filePath) throws IOException {
StartupProgress prog = NameNode.getStartupProgress();
MessageDigest digester = MD5Hash.getDigester();
int layoutVersion =
context.getSourceNamesystem().getEffectiveLayoutVersion();
underlyingOutputStream = new DigestOutputStream(new BufferedOutputStream(
fout), digester);
@ -594,11 +596,16 @@ public final class FSImageFormatProtobuf {
// depends on this behavior.
context.checkCancelled();
Step step;
// Erasure coding policies should be saved before inodes
Step step = new Step(StepType.ERASURE_CODING_POLICIES, filePath);
prog.beginStep(Phase.SAVING_CHECKPOINT, step);
saveErasureCodingSection(b);
prog.endStep(Phase.SAVING_CHECKPOINT, step);
if (NameNodeLayoutVersion.supports(
NameNodeLayoutVersion.Feature.ERASURE_CODING, layoutVersion)) {
step = new Step(StepType.ERASURE_CODING_POLICIES, filePath);
prog.beginStep(Phase.SAVING_CHECKPOINT, step);
saveErasureCodingSection(b);
prog.endStep(Phase.SAVING_CHECKPOINT, step);
}
step = new Step(StepType.INODES, filePath);
prog.beginStep(Phase.SAVING_CHECKPOINT, step);