Skip to content

Commit

Permalink
Only publish suspect ledgers if they have missing fragments
Browse files Browse the repository at this point in the history
This is a fix for a flake in
AuditorPeriodicCheckTest#testIndexCorruption. Auditor#checkAllLedgers()
runs a check on all ledgers, passing ProcessLostFragmentsCb as a
callback to LedgerChecker#checkLedger for each one.

LedgerChecker#checkLedger triggers the callback on completion,
regardless of whether there are fragments missing on not. Previously,
ProcessLostFragments was not checking if there were lost fragments
before publishing the ledger as suspected in zookeeper.

The flake triggered as there were always two ledgers that existed when
the check occurred, both would be reported as suspected, and it was
random which would be returned while polling for underreplicated
ledgers.

The fix is to check that something is actually underreplicated before
publishing.


Reviewers: Sijie Guo <[email protected]>

This closes apache#1834 from ivankelly/auditor-periodic-flake
  • Loading branch information
ivankelly authored Nov 28, 2018
1 parent 6d4e5c8 commit dfbfa8d
Showing 1 changed file with 5 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -647,6 +647,11 @@ public void operationComplete(int rc, Set<LedgerFragment> fragments) {
for (LedgerFragment f : fragments) {
bookies.addAll(f.getAddresses());
}
if (bookies.isEmpty()) {
// no missing fragments
callback.processResult(Code.OK, null, null);
return;
}
publishSuspectedLedgersAsync(
bookies.stream().map(BookieSocketAddress::toString).collect(Collectors.toList()),
Sets.newHashSet(lh.getId())
Expand Down

0 comments on commit dfbfa8d

Please sign in to comment.