You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pulsar.apache.org by pe...@apache.org on 2021/11/05 12:21:32 UTC

[pulsar] 01/04: Fix additional servlets nar might extract to null directory (#12585)

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 <kw...@streamnative.io>
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()) {