This is an automated email from the ASF dual-hosted git repository.
mmerli pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/pulsar.git
The following commit(s) were added to refs/heads/master by this push:
new 7d2fdea7749 Avoid contended synchronized block on topic load (#15883)
7d2fdea7749 is described below
commit 7d2fdea7749d72b58def4045be3f295e0ee4f04d
Author: Matteo Merli <[email protected]>
AuthorDate: Thu Jun 2 08:34:55 2022 -0700
Avoid contended synchronized block on topic load (#15883)
---
.../org/apache/pulsar/broker/PulsarService.java | 41 ++++++++++++----------
1 file changed, 23 insertions(+), 18 deletions(-)
diff --git
a/pulsar-broker/src/main/java/org/apache/pulsar/broker/PulsarService.java
b/pulsar-broker/src/main/java/org/apache/pulsar/broker/PulsarService.java
index 89bc34b32c0..b0a5385f16f 100644
--- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/PulsarService.java
+++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/PulsarService.java
@@ -1278,7 +1278,7 @@ public class PulsarService implements AutoCloseable,
ShutdownService {
});
}
- public synchronized LedgerOffloader
createManagedLedgerOffloader(OffloadPoliciesImpl offloadPolicies)
+ public LedgerOffloader createManagedLedgerOffloader(OffloadPoliciesImpl
offloadPolicies)
throws PulsarServerException {
try {
if
(StringUtils.isNotBlank(offloadPolicies.getManagedLedgerOffloadDriver())) {
@@ -1286,25 +1286,30 @@ public class PulsarService implements AutoCloseable,
ShutdownService {
"Offloader driver is configured to be '%s' but no
offloaders directory is configured.",
offloadPolicies.getManagedLedgerOffloadDriver());
- Offloaders offloaders = offloadersCache.getOrLoadOffloaders(
- offloadPolicies.getOffloadersDirectory(),
config.getNarExtractionDirectory());
-
- LedgerOffloaderFactory offloaderFactory =
offloaders.getOffloaderFactory(
- offloadPolicies.getManagedLedgerOffloadDriver());
- try {
- return offloaderFactory.create(
- offloadPolicies,
- ImmutableMap.of(
-
LedgerOffloader.METADATA_SOFTWARE_VERSION_KEY.toLowerCase(),
PulsarVersion.getVersion(),
-
LedgerOffloader.METADATA_SOFTWARE_GITSHA_KEY.toLowerCase(),
PulsarVersion.getGitSha(),
-
LedgerOffloader.METADATA_PULSAR_CLUSTER_NAME.toLowerCase(),
config.getClusterName()
- ),
- schemaStorage, getOffloaderScheduler(offloadPolicies),
this.offloaderStats);
- } catch (IOException ioe) {
- throw new PulsarServerException(ioe.getMessage(),
ioe.getCause());
+ synchronized (this) {
+ Offloaders offloaders =
offloadersCache.getOrLoadOffloaders(
+ offloadPolicies.getOffloadersDirectory(),
config.getNarExtractionDirectory());
+
+ LedgerOffloaderFactory offloaderFactory =
offloaders.getOffloaderFactory(
+ offloadPolicies.getManagedLedgerOffloadDriver());
+ try {
+ return offloaderFactory.create(
+ offloadPolicies,
+ ImmutableMap.of(
+
LedgerOffloader.METADATA_SOFTWARE_VERSION_KEY.toLowerCase(),
+ PulsarVersion.getVersion(),
+
LedgerOffloader.METADATA_SOFTWARE_GITSHA_KEY.toLowerCase(),
+ PulsarVersion.getGitSha(),
+
LedgerOffloader.METADATA_PULSAR_CLUSTER_NAME.toLowerCase(),
+ config.getClusterName()
+ ),
+ schemaStorage,
getOffloaderScheduler(offloadPolicies), this.offloaderStats);
+ } catch (IOException ioe) {
+ throw new PulsarServerException(ioe.getMessage(),
ioe.getCause());
+ }
}
} else {
- LOG.info("No ledger offloader configured, using NULL
instance");
+ LOG.debug("No ledger offloader configured, using NULL
instance");
return NullLedgerOffloader.INSTANCE;
}
} catch (Throwable t) {