diff --git a/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/ScanAndCompareGarbageCollector.java b/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/ScanAndCompareGarbageCollector.java index faac25949ec..1d28dd13e6b 100644 --- a/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/ScanAndCompareGarbageCollector.java +++ b/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/ScanAndCompareGarbageCollector.java @@ -73,7 +73,6 @@ public class ScanAndCompareGarbageCollector implements GarbageCollector { static final Logger LOG = LoggerFactory.getLogger(ScanAndCompareGarbageCollector.class); - static final int MAX_CONCURRENT_METADATA_REQUESTS = 1000; private final LedgerManager ledgerManager; private final CompactableLedgerStorage ledgerStorage; @@ -85,6 +84,7 @@ public class ScanAndCompareGarbageCollector implements GarbageCollector { private final boolean verifyMetadataOnGc; private int activeLedgerCounter; private StatsLogger statsLogger; + private final int maxConcurrentRequests; public ScanAndCompareGarbageCollector(LedgerManager ledgerManager, CompactableLedgerStorage ledgerStorage, ServerConfiguration conf, StatsLogger statsLogger) throws IOException { @@ -99,8 +99,9 @@ public ScanAndCompareGarbageCollector(LedgerManager ledgerManager, CompactableLe if (gcOverReplicatedLedgerIntervalMillis > 0) { this.enableGcOverReplicatedLedger = true; } - LOG.info("Over Replicated Ledger Deletion : enabled=" + enableGcOverReplicatedLedger + ", interval=" - + gcOverReplicatedLedgerIntervalMillis); + this.maxConcurrentRequests = conf.getGcOverreplicatedLedgerMaxConcurrentRequests(); + LOG.info("Over Replicated Ledger Deletion : enabled={}, interval={}, maxConcurrentRequests={}", + enableGcOverReplicatedLedger, gcOverReplicatedLedgerIntervalMillis, maxConcurrentRequests); verifyMetadataOnGc = conf.getVerifyMetadataOnGC(); @@ -129,6 +130,8 @@ public void gc(GarbageCleaner garbageCleaner) { boolean checkOverreplicatedLedgers = (enableGcOverReplicatedLedger && curTime - lastOverReplicatedLedgerGcTimeMillis > gcOverReplicatedLedgerIntervalMillis); if (checkOverreplicatedLedgers) { + LOG.info("Start removing over-replicated ledgers. activeLedgerCounter={}", activeLedgerCounter); + // remove all the overreplicated ledgers from the local bookie Set overReplicatedLedgers = removeOverReplicatedledgers(bkActiveLedgers, garbageCleaner); if (overReplicatedLedgers.isEmpty()) { @@ -216,7 +219,7 @@ public void gc(GarbageCleaner garbageCleaner) { private Set removeOverReplicatedledgers(Set bkActiveledgers, final GarbageCleaner garbageCleaner) throws Exception { final Set overReplicatedLedgers = Sets.newHashSet(); - final Semaphore semaphore = new Semaphore(MAX_CONCURRENT_METADATA_REQUESTS); + final Semaphore semaphore = new Semaphore(this.maxConcurrentRequests); final CountDownLatch latch = new CountDownLatch(bkActiveledgers.size()); // instantiate zookeeper client to initialize ledger manager diff --git a/bookkeeper-server/src/main/java/org/apache/bookkeeper/conf/ServerConfiguration.java b/bookkeeper-server/src/main/java/org/apache/bookkeeper/conf/ServerConfiguration.java index 14666550daa..8fffdde0d7e 100644 --- a/bookkeeper-server/src/main/java/org/apache/bookkeeper/conf/ServerConfiguration.java +++ b/bookkeeper-server/src/main/java/org/apache/bookkeeper/conf/ServerConfiguration.java @@ -111,6 +111,8 @@ public class ServerConfiguration extends AbstractConfiguration