You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@asterixdb.apache.org by dl...@apache.org on 2021/10/08 21:04:36 UTC

[asterixdb] branch master updated: [NO ISSUE][API] Make QueryServiceServlet return 'server' header

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

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


The following commit(s) were added to refs/heads/master by this push:
     new b65e682  [NO ISSUE][API] Make QueryServiceServlet return 'server' header
b65e682 is described below

commit b65e68243efc77911eeb66b0ff4c0fbd605da978
Author: Dmitry Lychagin <dm...@couchbase.com>
AuthorDate: Wed Oct 6 11:20:28 2021 -0700

    [NO ISSUE][API] Make QueryServiceServlet return 'server' header
    
    - user model changes: no
    - storage format changes: no
    - interface changes: yes
    
    Details:
    - Add 'server' header to QueryServiceServlet's
      'options' method response
    
    Change-Id: If2e465f1f48235d5bd036ed0da8b0100a9ec7612
    Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/13585
    Integration-Tests: Jenkins <je...@fulliautomatix.ics.uci.edu>
    Tested-by: Jenkins <je...@fulliautomatix.ics.uci.edu>
    Reviewed-by: Michael Blow <mb...@apache.org>
---
 .../api/http/server/QueryServiceServlet.java       | 22 ++++++++++++++++++++++
 .../hyracks/bootstrap/ApplicationConfigurator.java |  9 ++++++++-
 .../apache/hyracks/http/server/utils/HttpUtil.java |  4 ++++
 3 files changed, 34 insertions(+), 1 deletion(-)

diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryServiceServlet.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryServiceServlet.java
index 74682cf..26e4b96 100644
--- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryServiceServlet.java
+++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryServiceServlet.java
@@ -63,6 +63,7 @@ import org.apache.asterix.common.exceptions.CompilationException;
 import org.apache.asterix.common.exceptions.ErrorCode;
 import org.apache.asterix.common.exceptions.RuntimeDataException;
 import org.apache.asterix.compiler.provider.ILangCompilationProvider;
+import org.apache.asterix.hyracks.bootstrap.ApplicationConfigurator;
 import org.apache.asterix.lang.common.base.IParser;
 import org.apache.asterix.lang.common.base.IParserFactory;
 import org.apache.asterix.lang.common.base.Statement;
@@ -145,6 +146,10 @@ public class QueryServiceServlet extends AbstractQueryApiServlet {
             response.setHeader("Access-Control-Allow-Origin", request.getHeader("Origin"));
         }
         response.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
+        String server = getServerHeaderValue();
+        if (server != null) {
+            HttpUtil.setServerHeader(response, server);
+        }
         response.setStatus(HttpResponseStatus.OK);
     }
 
@@ -520,4 +525,21 @@ public class QueryServiceServlet extends AbstractQueryApiServlet {
     protected static boolean isPrintingProfile(IStatementExecutor.Stats stats) {
         return stats.getProfileType() == Stats.ProfileType.FULL && stats.getJobProfile() != null;
     }
+
+    protected final String getServerHeaderValue() {
+        String name = getApplicationName();
+        if (name == null) {
+            return null;
+        }
+        String version = getApplicationVersion();
+        return version != null ? name + "/" + version : name;
+    }
+
+    protected String getApplicationName() {
+        return ApplicationConfigurator.APPLICATION_NAME;
+    }
+
+    protected String getApplicationVersion() {
+        return ApplicationConfigurator.getApplicationVersion(appCtx.getBuildProperties());
+    }
 }
diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/hyracks/bootstrap/ApplicationConfigurator.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/hyracks/bootstrap/ApplicationConfigurator.java
index c76d9b8..98a1820 100644
--- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/hyracks/bootstrap/ApplicationConfigurator.java
+++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/hyracks/bootstrap/ApplicationConfigurator.java
@@ -24,6 +24,7 @@ import java.io.StringWriter;
 import java.util.Properties;
 
 import org.apache.asterix.common.config.AsterixProperties;
+import org.apache.asterix.common.config.BuildProperties;
 import org.apache.asterix.common.exceptions.ErrorCode;
 import org.apache.asterix.common.exceptions.RuntimeDataException;
 import org.apache.hyracks.api.config.IConfigManager;
@@ -36,9 +37,11 @@ import org.apache.hyracks.util.file.FileUtil;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 
-class ApplicationConfigurator {
+public class ApplicationConfigurator {
     private static final Logger LOGGER = LogManager.getLogger();
 
+    public static final String APPLICATION_NAME = "Apache AsterixDB";
+
     private ApplicationConfigurator() {
     }
 
@@ -83,4 +86,8 @@ class ApplicationConfigurator {
             LOGGER.warn("JRE version \"" + javaVersion + "\" is untested");
         }
     }
+
+    public static String getApplicationVersion(BuildProperties buildProperties) {
+        return buildProperties.getAllProps().get("git.build.version");
+    }
 }
diff --git a/hyracks-fullstack/hyracks/hyracks-http/src/main/java/org/apache/hyracks/http/server/utils/HttpUtil.java b/hyracks-fullstack/hyracks/hyracks-http/src/main/java/org/apache/hyracks/http/server/utils/HttpUtil.java
index 835cd54..1d5df5c 100644
--- a/hyracks-fullstack/hyracks/hyracks-http/src/main/java/org/apache/hyracks/http/server/utils/HttpUtil.java
+++ b/hyracks-fullstack/hyracks/hyracks-http/src/main/java/org/apache/hyracks/http/server/utils/HttpUtil.java
@@ -110,6 +110,10 @@ public class HttpUtil {
         response.setHeader(HttpHeaderNames.CONTENT_TYPE, type);
     }
 
+    public static void setServerHeader(IServletResponse response, String value) throws IOException {
+        response.setHeader(HttpHeaderNames.SERVER, value);
+    }
+
     public static Map<String, String> getRequestHeaders(IServletRequest request) {
         Map<String, String> headers = new HashMap<>();
         request.getHttpRequest().headers().forEach(entry -> headers.put(entry.getKey(), entry.getValue()));