diff --git a/tajo-common/src/main/java/org/apache/tajo/conf/TajoConf.java b/tajo-common/src/main/java/org/apache/tajo/conf/TajoConf.java index c36f43bcae..73378bbfae 100644 --- a/tajo-common/src/main/java/org/apache/tajo/conf/TajoConf.java +++ b/tajo-common/src/main/java/org/apache/tajo/conf/TajoConf.java @@ -138,6 +138,7 @@ public static enum ConfVars implements ConfigKey { TAJO_MASTER_CLIENT_RPC_ADDRESS("tajo.master.client-rpc.address", "localhost:26002", Validators.networkAddr()), TAJO_MASTER_INFO_ADDRESS("tajo.master.info-http.address", "0.0.0.0:26080", Validators.networkAddr()), + TAJO_MASTER_INFO_ADDRESS_CONTEXT_PATH("tajo.master.info-http.address.context.path", "/", Validators.javaString()), // Tajo Rest Service REST_SERVICE_ADDRESS("tajo.rest.service.address", "0.0.0.0:26880", Validators.networkAddr()), diff --git a/tajo-core/src/main/java/org/apache/tajo/util/JSPUtil.java b/tajo-core/src/main/java/org/apache/tajo/util/JSPUtil.java index f7928ea6a8..0de0b4f870 100644 --- a/tajo-core/src/main/java/org/apache/tajo/util/JSPUtil.java +++ b/tajo-core/src/main/java/org/apache/tajo/util/JSPUtil.java @@ -393,4 +393,25 @@ public static List getPageNavigationList(List originLis return originList; } + + public static String getTajoMasterHttpAddrContextPath(Configuration config) { + if (!(config instanceof TajoConf)) { + throw new IllegalArgumentException("config should be a TajoConf type."); + } + try { + TajoConf conf = (TajoConf) config; + String tajoMasterHttpAddrContextPath = conf.getVar(ConfVars.TAJO_MASTER_INFO_ADDRESS_CONTEXT_PATH); + if (tajoMasterHttpAddrContextPath == null || tajoMasterHttpAddrContextPath.length() == 0 || "/".equals(tajoMasterHttpAddrContextPath)) { + tajoMasterHttpAddrContextPath = ""; + } else { + if(!tajoMasterHttpAddrContextPath.startsWith("/") && tajoMasterHttpAddrContextPath.length() > 0) { + tajoMasterHttpAddrContextPath = "/" + tajoMasterHttpAddrContextPath; + } + } + return tajoMasterHttpAddrContextPath; + } catch (Exception e) { + e.printStackTrace(); + return e.getMessage(); + } + } } diff --git a/tajo-core/src/main/java/org/apache/tajo/webapp/HttpServer.java b/tajo-core/src/main/java/org/apache/tajo/webapp/HttpServer.java index 7a6b603104..8e967634b1 100644 --- a/tajo-core/src/main/java/org/apache/tajo/webapp/HttpServer.java +++ b/tajo-core/src/main/java/org/apache/tajo/webapp/HttpServer.java @@ -22,6 +22,8 @@ import org.apache.commons.logging.LogFactory; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.security.UserGroupInformation; +import org.apache.tajo.conf.TajoConf; +import org.apache.tajo.util.TUtil; import org.mortbay.jetty.Connector; import org.mortbay.jetty.Handler; import org.mortbay.jetty.Server; @@ -65,6 +67,8 @@ public HttpServer(String name, String bindAddress, int port, this.webServer = new Server(); this.findPort = findPort; + TajoConf tajoConf = TUtil.checkTypeAndGet(conf, TajoConf.class); + if (connector == null) { listenerStartedExternally = false; listener = createBaseListener(conf); @@ -92,7 +96,7 @@ public HttpServer(String name, String bindAddress, int port, webAppContext = new WebAppContext(); webAppContext.setDisplayName(name); - webAppContext.setContextPath("/"); + webAppContext.setContextPath(tajoConf.getVar(TajoConf.ConfVars.TAJO_MASTER_INFO_ADDRESS_CONTEXT_PATH)); webAppContext.setResourceBase(appDir + "/" + name); webAppContext.setDescriptor(appDir + "/" + name + "/WEB-INF/web.xml"); diff --git a/tajo-core/src/main/resources/webapps/admin/cluster.jsp b/tajo-core/src/main/resources/webapps/admin/cluster.jsp index bc81ff971d..f4c864d0e7 100644 --- a/tajo-core/src/main/resources/webapps/admin/cluster.jsp +++ b/tajo-core/src/main/resources/webapps/admin/cluster.jsp @@ -30,6 +30,7 @@ <%@ page import="org.apache.tajo.webapp.StaticHttpServer" %> <%@ page import="java.util.*" %> <%@ page import="java.net.InetSocketAddress" %> +<%@ page import="org.apache.tajo.conf.TajoConf" %> <% TajoMaster master = (TajoMaster) StaticHttpServer.getInstance().getAttribute("tajo.info.server.object"); @@ -38,6 +39,8 @@ InetSocketAddress socketAddress = new InetSocketAddress(masterName[0], Integer.parseInt(masterName[1])); String masterLabel = socketAddress.getAddress().getHostName()+ ":" + socketAddress.getPort(); + String tajoMasterInfoAddressContextPath = JSPUtil.getTajoMasterHttpAddrContextPath(master.getConfig()); + Map nodes = master.getContext().getResourceManager().getNodes(); List wokerKeys = new ArrayList<>(nodes.keySet()); Collections.sort(wokerKeys); @@ -126,7 +129,7 @@ for(TajoMasterInfo eachMaster : masters) { String tajoMasterHttp = "http://" + eachMaster.getWebServerAddress().getHostName() + ":" + - eachMaster.getWebServerAddress().getPort() + "/index.jsp"; + eachMaster.getWebServerAddress().getPort() + tajoMasterInfoAddressContextPath + "/index.jsp"; String isActive = eachMaster.isActive() == true ? "ACTIVE" : "BACKUP"; String isAvailable = eachMaster.isAvailable() == true ? "RUNNING" : "FAILED"; %> @@ -174,7 +177,7 @@ for(NodeStatus queryMaster: liveQueryMasters) { WorkerConnectionInfo connectionInfo = queryMaster.getConnectionInfo(); String queryMasterHttp = "http://" + connectionInfo.getHost() - + ":" + connectionInfo.getHttpInfoPort() + "/index.jsp"; + + ":" + connectionInfo.getHttpInfoPort() + tajoMasterInfoAddressContextPath + "/index.jsp"; %> <%=no++%> @@ -234,7 +237,7 @@ int no = 1; for(NodeStatus node: liveNodes) { WorkerConnectionInfo connectionInfo = node.getConnectionInfo(); - String nodeHttp = "http://" + connectionInfo.getHost() + ":" + connectionInfo.getHttpInfoPort() + "/index.jsp"; + String nodeHttp = "http://" + connectionInfo.getHost() + ":" + connectionInfo.getHttpInfoPort() + tajoMasterInfoAddressContextPath + "/index.jsp"; %> <%=no++%> diff --git a/tajo-core/src/main/resources/webapps/admin/query.jsp b/tajo-core/src/main/resources/webapps/admin/query.jsp index e44ac8cf5f..334c1c4bc6 100644 --- a/tajo-core/src/main/resources/webapps/admin/query.jsp +++ b/tajo-core/src/main/resources/webapps/admin/query.jsp @@ -38,6 +38,8 @@ InetSocketAddress socketAddress = new InetSocketAddress(masterName[0], Integer.parseInt(masterName[1])); String masterLabel = socketAddress.getAddress().getHostName()+ ":" + socketAddress.getPort(); + String tajoMasterInfoAddressContextPath = JSPUtil.getTajoMasterHttpAddrContextPath(master.getConfig()); + List submittedQueries = new ArrayList<>(master.getContext().getQueryJobManager().getSubmittedQueries()); JSPUtil.sortQueryInProgress(submittedQueries, true); @@ -158,7 +160,7 @@ for(QueryInProgress eachQuery: runningQueries) { long time = System.currentTimeMillis() - eachQuery.getQueryInfo().getStartTime(); String detailView = "http://" + eachQuery.getQueryInfo().getQueryMasterHost() + ":" + portMap.get(eachQuery.getQueryInfo().getQueryMasterHost()) + - "/querydetail.jsp?queryId=" + eachQuery.getQueryId() + "&startTime=" + eachQuery.getQueryInfo().getStartTime(); + tajoMasterInfoAddressContextPath + "/querydetail.jsp?queryId=" + eachQuery.getQueryId() + "&startTime=" + eachQuery.getQueryInfo().getStartTime(); %> <%=eachQuery.getQueryId()%> diff --git a/tajo-core/src/main/resources/webapps/admin/querytasks.jsp b/tajo-core/src/main/resources/webapps/admin/querytasks.jsp index 695e30474a..2a634213c3 100644 --- a/tajo-core/src/main/resources/webapps/admin/querytasks.jsp +++ b/tajo-core/src/main/resources/webapps/admin/querytasks.jsp @@ -36,6 +36,8 @@ TajoMaster master = (TajoMaster) StaticHttpServer.getInstance().getAttribute("tajo.info.server.object"); HistoryReader reader = master.getContext().getHistoryReader(); + String tajoMasterInfoAddressContextPath = JSPUtil.getTajoMasterHttpAddrContextPath(master.getConfig()); + String queryId = request.getParameter("queryId"); String startTime = request.getParameter("startTime"); String ebId = request.getParameter("ebid"); @@ -221,7 +223,7 @@ NodeStatus nodeStatus = nodeMap.get(eachTask.getHostAndPort()); if (nodeStatus != null) { String[] hostTokens = eachTask.getHostAndPort().split(":"); - taskHost = "" + eachTask.getHostAndPort() + ""; } diff --git a/tajo-core/src/main/resources/webapps/worker/header.jsp b/tajo-core/src/main/resources/webapps/worker/header.jsp index 93f7612366..5d074bd20b 100644 --- a/tajo-core/src/main/resources/webapps/worker/header.jsp +++ b/tajo-core/src/main/resources/webapps/worker/header.jsp @@ -20,10 +20,12 @@ <%@ page import="org.apache.tajo.util.JSPUtil" %> <%@ page import="org.apache.tajo.webapp.StaticHttpServer" %> <%@ page import="org.apache.tajo.worker.TajoWorker" %> +<%@ page import="org.apache.tajo.conf.TajoConf" %> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <% TajoWorker tmpTajoWorker = (TajoWorker) StaticHttpServer.getInstance().getAttribute("tajo.info.server.object"); - String tajoMasterHttp = "http://" + JSPUtil.getTajoMasterHttpAddr(tmpTajoWorker.getConfig()); + String tajoMasterInfoAddressContextPath = JSPUtil.getTajoMasterHttpAddrContextPath(tmpTajoWorker.getConfig()); + String tajoMasterHttp = "http://" + JSPUtil.getTajoMasterHttpAddr(tmpTajoWorker.getConfig()) + tajoMasterInfoAddressContextPath; %>