You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@bookkeeper.apache.org by eo...@apache.org on 2021/11/11 07:31:47 UTC

[bookkeeper] branch master updated: Make maxConcurrentZkRequests for gc configurable (#2797)

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

eolivelli 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 4124f1d  Make maxConcurrentZkRequests for gc configurable (#2797)
4124f1d is described below

commit 4124f1dd3509cd81092163e9def964019e7389ea
Author: hrsakai <hs...@yahoo-corp.jp>
AuthorDate: Thu Nov 11 16:31:40 2021 +0900

    Make maxConcurrentZkRequests for gc configurable (#2797)
---
 .../bookie/ScanAndCompareGarbageCollector.java     | 11 ++++++----
 .../bookkeeper/conf/ServerConfiguration.java       | 24 ++++++++++++++++++++++
 conf/bk_server.conf                                |  3 +++
 site/_data/config/bk_server.yaml                   |  3 +++
 4 files changed, 37 insertions(+), 4 deletions(-)

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 faac259..1d28dd1 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 @@ import org.slf4j.LoggerFactory;
 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 class ScanAndCompareGarbageCollector implements GarbageCollector {
         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 class ScanAndCompareGarbageCollector implements GarbageCollector {
             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<Long> overReplicatedLedgers = removeOverReplicatedledgers(bkActiveLedgers, garbageCleaner);
                 if (overReplicatedLedgers.isEmpty()) {
@@ -216,7 +219,7 @@ public class ScanAndCompareGarbageCollector implements GarbageCollector {
     private Set<Long> removeOverReplicatedledgers(Set<Long> bkActiveledgers, final GarbageCleaner garbageCleaner)
             throws Exception {
         final Set<Long> 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 1466655..8fffdde 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<ServerConfigurati
     protected static final String GC_WAIT_TIME = "gcWaitTime";
     protected static final String IS_FORCE_GC_ALLOW_WHEN_NO_SPACE = "isForceGCAllowWhenNoSpace";
     protected static final String GC_OVERREPLICATED_LEDGER_WAIT_TIME = "gcOverreplicatedLedgerWaitTime";
+    protected static final String GC_OVERREPLICATED_LEDGER_MAX_CONCURRENT_REQUESTS =
+            "gcOverreplicatedLedgerMaxConcurrentRequests";
     protected static final String USE_TRANSACTIONAL_COMPACTION = "useTransactionalCompaction";
     protected static final String VERIFY_METADATA_ON_GC = "verifyMetadataOnGC";
     // Scrub Parameters
@@ -419,6 +421,28 @@ public class ServerConfiguration extends AbstractConfiguration<ServerConfigurati
     }
 
     /**
+     * Max number of concurrent requests in garbage collection of overreplicated ledgers.
+     *
+     * @return max number of concurrent requests
+     */
+    public int getGcOverreplicatedLedgerMaxConcurrentRequests() {
+        return this.getInt(GC_OVERREPLICATED_LEDGER_MAX_CONCURRENT_REQUESTS, 1000);
+    }
+
+    /**
+     * Max number of concurrent requests in garbage collection of overreplicated ledgers. Default: 1000
+     *
+     * @param gcOverreplicatedLedgerMaxConcurrentRequests
+     * @return server configuration
+     */
+    public ServerConfiguration setGcOverreplicatedLedgerMaxConcurrentRequests(
+            int gcOverreplicatedLedgerMaxConcurrentRequests) {
+        this.setProperty(GC_OVERREPLICATED_LEDGER_MAX_CONCURRENT_REQUESTS,
+                Integer.toString(gcOverreplicatedLedgerMaxConcurrentRequests));
+        return this;
+    }
+
+    /**
      * Get whether to use transactional compaction and using a separate log for compaction or not.
      *
      * @return use transactional compaction
diff --git a/conf/bk_server.conf b/conf/bk_server.conf
index 3941fe1..e2abc5f 100755
--- a/conf/bk_server.conf
+++ b/conf/bk_server.conf
@@ -576,6 +576,9 @@ ledgerDirectories=/tmp/bk-data
 # since we read the metadata for all the ledgers on the bookie from zk
 # gcOverreplicatedLedgerWaitTime=86400000
 
+# Max number of concurrent requests in garbage collection of overreplicated ledgers.
+# gcOverreplicatedLedgerMaxConcurrentRequests=1000
+
 # Whether force compaction is allowed when the disk is full or almost full.
 # Forcing GC may get some space back, but may also fill up disk space more quickly.
 # This is because new log files are created before GC, while old garbage
diff --git a/site/_data/config/bk_server.yaml b/site/_data/config/bk_server.yaml
index fd4c9ea..1176f34 100644
--- a/site/_data/config/bk_server.yaml
+++ b/site/_data/config/bk_server.yaml
@@ -380,6 +380,9 @@ groups:
   - param: gcOverreplicatedLedgerWaitTime
     description: How long the interval to trigger next garbage collection of overreplicated ledgers, in milliseconds. This should not be run very frequently since we read the metadata for all the ledgers on the bookie from zk.
     default: 86400000
+  - param: gcOverreplicatedLedgerMaxConcurrentRequests
+    description: Max number of concurrent requests in garbage collection of overreplicated ledgers.
+    default: 1000
   - param: isForceGCAllowWhenNoSpace
     description: Whether force compaction is allowed when the disk is full or almost full. Forcing GC may get some space back, but may also fill up disk space more quickly. This is because new log files are created before GC, while old garbage log files are deleted after GC.
     default: 'false'