> The case you described here is "almost correct". But there is an key here: > B2 can't startup itself if journal disk is wiped out, because the cookie is > missed. This is what I expected to see, but isn't the case. <snip> List<Cookie> journalCookies = Lists.newArrayList(); // try to read cookie from journal directory. for (File journalDirectory : journalDirectories) { try { Cookie journalCookie = Cookie.readFromDirectory(journalDirectory); journalCookies.add(journalCookie); if (journalCookie.isBookieHostCreatedFromIp()) { conf.setUseHostNameAsBookieID(false); } else { conf.setUseHostNameAsBookieID(true); } } catch (FileNotFoundException fnf) { newEnv = true; missedCookieDirs.add(journalDirectory); } } </snip>
So if a journal is missing the cookie, newEnv is set to true. This disabled the later checks. > Hower it can still happen in a different case: bit flap. In your case, if > fence bit in b2 is already persisted on disk, but it got corrupted. Then it > will cause the issue you described. One problem is we don't have checksum > on the index file header when it stores those fence bits. Yes, this is also an issue. -Ivan