You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@knox.apache.org by am...@apache.org on 2023/04/28 10:17:43 UTC

[knox] branch master updated: KNOX-2905 - GatewayDescriptorImporter is not thread safe (#753)

This is an automated email from the ASF dual-hosted git repository.

amagyar pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/knox.git


The following commit(s) were added to refs/heads/master by this push:
     new 7dba8c01b KNOX-2905 - GatewayDescriptorImporter is not thread safe (#753)
7dba8c01b is described below

commit 7dba8c01bc3a966c7cabdcad26195d169026ac9a
Author: Attila Magyar <m....@gmail.com>
AuthorDate: Fri Apr 28 12:17:38 2023 +0200

    KNOX-2905 - GatewayDescriptorImporter is not thread safe (#753)
---
 .../java/org/apache/knox/gateway/GatewayServlet.java    | 17 ++++++++++-------
 1 file changed, 10 insertions(+), 7 deletions(-)

diff --git a/gateway-server/src/main/java/org/apache/knox/gateway/GatewayServlet.java b/gateway-server/src/main/java/org/apache/knox/gateway/GatewayServlet.java
index 3621bb66b..a1109d850 100644
--- a/gateway-server/src/main/java/org/apache/knox/gateway/GatewayServlet.java
+++ b/gateway-server/src/main/java/org/apache/knox/gateway/GatewayServlet.java
@@ -185,13 +185,8 @@ public class GatewayServlet implements Servlet, Filter {
   private static GatewayFilter createFilter( InputStream stream, ServletContext servletContext ) throws ServletException {
     try {
       GatewayFilter filter = null;
-      if( stream != null ) {
-        try (InputStreamReader reader = new InputStreamReader(stream, StandardCharsets.UTF_8)){
-          GatewayDescriptor descriptor = GatewayDescriptorFactory.load("xml", reader);
-          filter = GatewayFactory.create( descriptor );
-        } finally {
-          stream.close();
-        }
+      if (stream != null) {
+        filter = GatewayFactory.create(createGatewayDescriptor(stream));
       }
       GatewayConfig gatewayConfig = (GatewayConfig) servletContext.getAttribute(GatewayConfig.GATEWAY_CONFIG_ATTRIBUTE);
       if (gatewayConfig.isMetricsEnabled()) {
@@ -210,6 +205,14 @@ public class GatewayServlet implements Servlet, Filter {
     }
   }
 
+  private static synchronized GatewayDescriptor createGatewayDescriptor(InputStream stream) throws IOException {
+    try (InputStreamReader reader = new InputStreamReader(stream, StandardCharsets.UTF_8)){
+      return GatewayDescriptorFactory.load("xml", reader);
+    } finally {
+      stream.close();
+    }
+  }
+
   private static GatewayFilter createFilter( FilterConfig filterConfig ) throws ServletException {
     GatewayFilter filter;
     InputStream stream;