You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@bookkeeper.apache.org by iv...@apache.org on 2018/11/28 15:31:19 UTC

[bookkeeper] branch master updated: Only publish suspect ledgers if they have missing fragments

This is an automated email from the ASF dual-hosted git repository.

ivank pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/bookkeeper.git


The following commit(s) were added to refs/heads/master by this push:
     new dfbfa8d  Only publish suspect ledgers if they have missing fragments
dfbfa8d is described below

commit dfbfa8d22844956be599c62f12ed13d8abe52696
Author: Ivan Kelly <iv...@apache.org>
AuthorDate: Wed Nov 28 16:31:13 2018 +0100

    Only publish suspect ledgers if they have missing fragments
    
    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 <si...@apache.org>
    
    This closes #1834 from ivankelly/auditor-periodic-flake
---
 .../src/main/java/org/apache/bookkeeper/replication/Auditor.java     | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/bookkeeper-server/src/main/java/org/apache/bookkeeper/replication/Auditor.java b/bookkeeper-server/src/main/java/org/apache/bookkeeper/replication/Auditor.java
index 1fcd0f8..acf0c09 100644
--- a/bookkeeper-server/src/main/java/org/apache/bookkeeper/replication/Auditor.java
+++ b/bookkeeper-server/src/main/java/org/apache/bookkeeper/replication/Auditor.java
@@ -647,6 +647,11 @@ public class Auditor implements AutoCloseable {
                 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())