HDFS-11112. Journal Nodes should refuse to format non-empty directories. Contributed by Yiqun Lin.
This commit is contained in:
parent
b6f290d5b6
commit
6aa09dc28a
@ -180,7 +180,14 @@ private static void purgeMatching(File dir, List<Pattern> patterns,
|
||||
}
|
||||
|
||||
void format(NamespaceInfo nsInfo) throws IOException {
|
||||
unlockAll();
|
||||
try {
|
||||
sd.analyzeStorage(StartupOption.FORMAT, this, true);
|
||||
} finally {
|
||||
sd.unlock();
|
||||
}
|
||||
setStorageInfo(nsInfo);
|
||||
|
||||
LOG.info("Formatting journal " + sd + " with nsid: " + getNamespaceID());
|
||||
// Unlock the directory before formatting, because we will
|
||||
// re-analyze it after format(). The analyzeStorage() call
|
||||
|
@ -550,7 +550,7 @@ private void checkEmptyCurrent() throws InconsistentFSStateException,
|
||||
Files.newDirectoryStream(currentDir.toPath())) {
|
||||
if (dirStream.iterator().hasNext()) {
|
||||
throw new InconsistentFSStateException(root,
|
||||
"Can't format the storage directory because the current/ "
|
||||
"Can't format the storage directory because the current "
|
||||
+ "directory is not empty.");
|
||||
}
|
||||
}
|
||||
|
@ -204,6 +204,9 @@ public void testFormatResetsCachedValues() throws Exception {
|
||||
|
||||
// Close the journal in preparation for reformatting it.
|
||||
journal.close();
|
||||
// Clear the storage directory before reformatting it
|
||||
journal.getStorage().getJournalManager()
|
||||
.getStorageDirectory().clearDirectory();
|
||||
journal.format(FAKE_NSINFO_2);
|
||||
|
||||
assertEquals(0, journal.getLastPromisedEpoch());
|
||||
@ -417,4 +420,18 @@ public void testNamespaceVerification() throws Exception {
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testFormatNonEmptyStorageDirectories() throws Exception {
|
||||
try {
|
||||
// Format again here and to format the non-empty directories in
|
||||
// journal node.
|
||||
journal.format(FAKE_NSINFO);
|
||||
fail("Did not fail to format non-empty directories in journal node.");
|
||||
} catch (IOException ioe) {
|
||||
GenericTestUtils.assertExceptionContains(
|
||||
"Can't format the storage directory because the current "
|
||||
+ "directory is not empty.", ioe);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user