This is an automated email from the ASF dual-hosted git repository. yong pushed a commit to branch branch-2.8 in repository https://gitbox.apache.org/repos/asf/pulsar.git
commit b047e8f97797f18c9f18ab271e16551fab1b0ab4 Author: Matteo Merli <[email protected]> AuthorDate: Thu Jun 2 08:34:55 2022 -0700 Avoid contended synchronized block on topic load (#15883) (cherry picked from commit 7d2fdea7749d72b58def4045be3f295e0ee4f04d) --- .../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 49440be5452..760cc83b5d6 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 @@ -1222,33 +1222,38 @@ public class PulsarService implements AutoCloseable { }); } - public synchronized LedgerOffloader createManagedLedgerOffloader(OffloadPoliciesImpl offloadPolicies) + public LedgerOffloader createManagedLedgerOffloader(OffloadPoliciesImpl offloadPolicies) throws PulsarServerException { try { if (StringUtils.isNotBlank(offloadPolicies.getManagedLedgerOffloadDriver())) { checkNotNull(offloadPolicies.getOffloadersDirectory(), "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)); - } 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) {
