This is an automated email from the ASF dual-hosted git repository. penghui pushed a commit to branch branch-2.8 in repository https://gitbox.apache.org/repos/asf/pulsar.git
commit 9242aa18465e8187e28ac3b40d584336db1b5199 Author: Kai Wang <[email protected]> AuthorDate: Thu Nov 4 21:01:24 2021 +0800 Fix additional servlets nar might extract to null directory (#12585) ### Motivation The additional servlets use NAR package to implantation plugin mechanism, it need extract to specific directory. However, the `narExtractionDirectory` is from `Properties`, but the properties has only the configuration in the configuration file. The default value of `narExtractionDirectory ` in `ServiceConfiguration` can't be use. ### Modifications When `narExtractionDirectory ` configuration is not set, use `NarClassLoader.DEFAULT_NAR_EXTRACTION_DIR` as default directory. (cherry picked from commit 9ecd613c0fdaf7f5306fc7f633a4d12218a7a4d2) --- .../web/plugin/servlet/AdditionalServlets.java | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/web/plugin/servlet/AdditionalServlets.java b/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/web/plugin/servlet/AdditionalServlets.java index 2451cf5..080e1c7 100644 --- a/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/web/plugin/servlet/AdditionalServlets.java +++ b/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/web/plugin/servlet/AdditionalServlets.java @@ -21,13 +21,12 @@ package org.apache.pulsar.broker.web.plugin.servlet; import com.google.common.collect.ImmutableMap; import java.io.IOException; -import java.util.Arrays; -import java.util.List; import java.util.Map; import lombok.Getter; import lombok.extern.slf4j.Slf4j; import org.apache.pulsar.common.configuration.PulsarConfiguration; +import org.apache.pulsar.common.nar.NarClassLoader; /** * A collection of loaded additional servlets. @@ -71,18 +70,23 @@ public class AdditionalServlets implements AutoCloseable { if (additionalServlets == null) { additionalServlets = conf.getProperties().getProperty(PROXY_ADDITIONAL_SERVLETS); } + + String narExtractionDirectory = conf.getProperties().getProperty(NAR_EXTRACTION_DIRECTORY); + if(narExtractionDirectory == null) { + narExtractionDirectory = NarClassLoader.DEFAULT_NAR_EXTRACTION_DIR; + } + if (additionalServletDirectory == null || additionalServlets == null) { return null; } AdditionalServletDefinitions definitions = AdditionalServletUtils.searchForServlets(additionalServletDirectory - , null); + , narExtractionDirectory); ImmutableMap.Builder<String, AdditionalServletWithClassLoader> builder = ImmutableMap.builder(); - List<String> additionalServletsList = Arrays.asList(additionalServlets.split(",")); - additionalServletsList.forEach(servletName -> { - + String[] additionalServletsList = additionalServlets.split(","); + for (String servletName : additionalServletsList) { AdditionalServletMetadata definition = definitions.servlets().get(servletName); if (null == definition) { throw new RuntimeException("No additional servlet is found for name `" + servletName @@ -91,8 +95,7 @@ public class AdditionalServlets implements AutoCloseable { AdditionalServletWithClassLoader servletWithClassLoader; try { - servletWithClassLoader = AdditionalServletUtils.load(definition, - conf.getProperties().getProperty(NAR_EXTRACTION_DIRECTORY)); + servletWithClassLoader = AdditionalServletUtils.load(definition, narExtractionDirectory); if (servletWithClassLoader != null) { builder.put(servletName, servletWithClassLoader); } @@ -101,7 +104,7 @@ public class AdditionalServlets implements AutoCloseable { log.error("Failed to load the additional servlet for name `" + servletName + "`", e); throw new RuntimeException("Failed to load the additional servlet for name `" + servletName + "`"); } - }); + } Map<String, AdditionalServletWithClassLoader> servlets = builder.build(); if (servlets != null && !servlets.isEmpty()) {
