From 780437535d06ff632e60e61a9839acc3338fb9b8 Mon Sep 17 00:00:00 2001 From: Masahiro Sakamoto Date: Sat, 27 Nov 2021 12:13:09 +0900 Subject: [PATCH] Reduce the time it takes for namespace bundle unloading to time out --- conf/broker.conf | 3 +++ conf/standalone.conf | 3 +++ .../java/org/apache/pulsar/broker/ServiceConfiguration.java | 5 +++++ .../org/apache/pulsar/broker/namespace/NamespaceService.java | 2 +- .../java/org/apache/pulsar/broker/service/BrokerService.java | 4 +++- site2/docs/reference-configuration.md | 1 + 6 files changed, 16 insertions(+), 2 deletions(-) diff --git a/conf/broker.conf b/conf/broker.conf index 700f9a5adc9b1..9d660c646a9ba 100644 --- a/conf/broker.conf +++ b/conf/broker.conf @@ -1125,6 +1125,9 @@ loadBalancerDirectMemoryResourceWeight=1.0 # It only takes effect in the ThresholdShedder strategy. loadBalancerBundleUnloadMinThroughputThreshold=10 +# Time to wait for the unloading of a namespace bundle +namespaceBundleUnloadingTimeoutMs=60000 + ### --- Replication --- ### # Enable replication metrics diff --git a/conf/standalone.conf b/conf/standalone.conf index 906280c180253..dbf56f0ba38a6 100644 --- a/conf/standalone.conf +++ b/conf/standalone.conf @@ -815,6 +815,9 @@ loadBalancerDirectMemoryResourceWeight=1.0 # It only takes effect in the ThresholdShedder strategy. loadBalancerBundleUnloadMinThroughputThreshold=10 +# Time to wait for the unloading of a namespace bundle +namespaceBundleUnloadingTimeoutMs=60000 + ### --- Replication --- ### # Enable replication metrics diff --git a/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/ServiceConfiguration.java b/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/ServiceConfiguration.java index 4407a9fbaef5c..28a6906640c81 100644 --- a/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/ServiceConfiguration.java +++ b/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/ServiceConfiguration.java @@ -1895,6 +1895,11 @@ public class ServiceConfiguration implements PulsarConfiguration { doc = "Option to override the auto-detected network interfaces max speed" ) private Double loadBalancerOverrideBrokerNicSpeedGbps; + @FieldContext( + category = CATEGORY_LOAD_BALANCER, + doc = "Time to wait for the unloading of a namespace bundle" + ) + private long namespaceBundleUnloadingTimeoutMs = 60000; /**** --- Replication --- ****/ @FieldContext( diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/namespace/NamespaceService.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/namespace/NamespaceService.java index 719c91a7f9c0c..2bf319c011b1e 100644 --- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/namespace/NamespaceService.java +++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/namespace/NamespaceService.java @@ -664,7 +664,7 @@ private Optional getLeastLoadedFromLoadManager(ServiceUnitId serviceUnit public CompletableFuture unloadNamespaceBundle(NamespaceBundle bundle) { // unload namespace bundle - return unloadNamespaceBundle(bundle, 5, TimeUnit.MINUTES); + return unloadNamespaceBundle(bundle, config.getNamespaceBundleUnloadingTimeoutMs(), TimeUnit.MILLISECONDS); } public CompletableFuture unloadNamespaceBundle(NamespaceBundle bundle, long timeout, TimeUnit timeoutUnit) { diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/BrokerService.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/BrokerService.java index e6a25742b8df6..7e2c3801f2670 100644 --- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/BrokerService.java +++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/BrokerService.java @@ -845,7 +845,9 @@ public void unloadNamespaceBundlesGracefully() { serviceUnits.forEach(su -> { if (su instanceof NamespaceBundle) { try { - pulsar.getNamespaceService().unloadNamespaceBundle(su, 1, TimeUnit.MINUTES).get(); + pulsar.getNamespaceService().unloadNamespaceBundle(su, + pulsar.getConfiguration().getNamespaceBundleUnloadingTimeoutMs(), TimeUnit.MILLISECONDS) + .get(); } catch (Exception e) { log.warn("Failed to unload namespace bundle {}", su, e); } diff --git a/site2/docs/reference-configuration.md b/site2/docs/reference-configuration.md index 8fba7a9f88af4..14a36e2cd8491 100644 --- a/site2/docs/reference-configuration.md +++ b/site2/docs/reference-configuration.md @@ -643,6 +643,7 @@ You can set the log level and configuration in the [log4j2.yaml](https://github | loadBalancerMemoryResourceWeight | The heap memory usage weight when calculating new resource usage. It only takes effect in the ThresholdShedder strategy. | 1.0 | | loadBalancerDirectMemoryResourceWeight | The direct memory usage weight when calculating new resource usage. It only takes effect in the ThresholdShedder strategy. | 1.0 | | loadBalancerBundleUnloadMinThroughputThreshold | Bundle unload minimum throughput threshold. Avoid bundle unload frequently. It only takes effect in the ThresholdShedder strategy. | 10 | +| namespaceBundleUnloadingTimeoutMs | Time to wait for the unloading of a namespace bundle in milliseconds. | 60000 | |replicationMetricsEnabled| |true| |replicationConnectionsPerBroker| |16| |replicationProducerQueueSize| |1000|