The bug is in the test. TestCheckpoint opens edits files in order to verify its length but does not close it, so the
secondary name-node attempt to delete it (in order to move edits.new into it on Win) fails.
But this revealed 3 more bugs.
- FSEditLog.purgeEditLog() in case of delete / rename failure calls FSEditLog.processIOError(), which should have
failed because all FSEditLog streams are closed by that time. It does not because the condition for throwing the
exception is incorrect.
- In fact purgeEditLog() should call directly FSImage.processIOError() because again all streams are closed.
- FSImage.processIOError() should also throw an exception if number of directories is <=1 rather than when it == 1