diff --git a/.github/scripts/start-submarine.sh b/.github/scripts/start-submarine.sh
index c1cb9bd9f..831fd1fca 100644
--- a/.github/scripts/start-submarine.sh
+++ b/.github/scripts/start-submarine.sh
@@ -32,6 +32,7 @@ kubectl label namespace submarine istio-injection=enabled
kubectl label namespace "$submarine_user_namespace" istio-injection=enabled
helm install --wait --set storageClass.provisioner=rancher.io/local-path --set storageClass.volumeBindingMode=WaitForFirstConsumer submarine ./helm-charts/submarine -n submarine
kubectl apply -f ./submarine-cloud-v2/artifacts/examples/example-submarine.yaml -n "$submarine_user_namespace"
+kubectl apply -f ./submarine-cloud-v2/artifacts/submarine/submarine-server.yaml -n "$submarine_user_namespace"
# Polling waiting for the submarine to be in the RUNNING state
for ((i=0;i<$wait_times;++i)); do
diff --git a/conf/submarine-site.xml b/conf/submarine-site.xml
deleted file mode 100755
index d26262ed2..000000000
--- a/conf/submarine-site.xml
+++ /dev/null
@@ -1,170 +0,0 @@
-
-
-
-
-
-
-
- submarine.cluster.addr
-
- submarine cluster address list, e.g. ip1:port1;ip2:port2;ip3:port3
-
-
-
- submarine.server.addr
- 0.0.0.0
- Server address
-
-
-
- submarine.server.port
- 8080
- Server port.
-
-
-
- submarine.server.ssl
- false
- Should SSL be used by the submarine server?
-
-
-
- submarine.server.ssl.port
- 8443
- Server ssl port. (used when ssl property is set to true)
-
-
-
- submarine.server.ssl.client.auth
- false
- Should client authentication be used for SSL connections?
-
-
-
- submarine.server.ssl.keystore.path
- keystore
- Path to keystore relative to submarine configuration directory
-
-
-
- submarine.server.ssl.keystore.type
- JKS
- The format of the given keystore (e.g. JKS or PKCS12)
-
-
-
- submarine.server.ssl.keystore.password
- change me
- Keystore password. Can be obfuscated by the Jetty Password tool
-
-
-
-
-
- submarine.server.ssl.truststore.path
- truststore
- Path to truststore relative to submarine configuration directory. Defaults to the keystore path
-
-
-
- submarine.server.ssl.truststore.type
- JKS
- The format of the given truststore (e.g. JKS or PKCS12). Defaults to the same type as the keystore type
-
-
-
-
-
- workbench.web.war
- ../submarine-workbench-web.war
- Submarine workbench web war file path.
-
-
-
- jdbc.driverClassName
- com.mysql.jdbc.Driver
-
-
- jdbc.url
- jdbc:mysql://127.0.0.1:3306/submarine?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&failOverReadOnly=false&zeroDateTimeBehavior=convertToNull&useSSL=false&allowMultiQueries=true
-
-
- jdbc.username
- submarine
-
-
- jdbc.password
- password
-
-
-
- metastore.jdbc.url
- jdbc:mysql://127.0.0.1:3306/metastore?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&failOverReadOnly=false&zeroDateTimeBehavior=convertToNull&useSSL=false
-
-
- metastore.jdbc.username
- metastore
-
-
- metastore.jdbc.password
- password
-
-
-
- submarine.runtime.class
- org.apache.submarine.server.submitter.yarn.YarnRuntimeFactory
- RuntimeFactory for Submarine jobs
-
-
-
- submarine.server.rpc.enabled
- false
- Run jobs using rpc server.
-
-
-
- submarine.server.rpc.port
- 8980
- Rpc server port
-
-
-
- submarine.submitter
- k8s
- The submitter which you want used in the server. Build-in k8s
-
-
-
- submarine.server.service.name
- submarine-server
- The name of submarine server deployment
-
-
-
diff --git a/conf/submarine-site.xml.template b/conf/submarine-site.xml.template
deleted file mode 100755
index e234d53a9..000000000
--- a/conf/submarine-site.xml.template
+++ /dev/null
@@ -1,163 +0,0 @@
-
-
-
-
-
-
-
- submarine.cluster.addr
-
- submarine cluster address list, e.g. ip1:port1;ip2:port2;ip3:port3
-
-
-
- submarine.server.addr
- 0.0.0.0
- Server address
-
-
-
- submarine.server.port
- 8080
- Server port.
-
-
-
- submarine.server.ssl
- false
- Should SSL be used by the submarine server?
-
-
-
- submarine.server.ssl.port
- 8443
- Server ssl port. (used when ssl property is set to true)
-
-
-
- submarine.server.ssl.client.auth
- false
- Should client authentication be used for SSL connections?
-
-
-
- submarine.server.ssl.keystore.path
- keystore
- Path to keystore relative to submarine configuration directory
-
-
-
- submarine.server.ssl.keystore.type
- JKS
- The format of the given keystore (e.g. JKS or PKCS12)
-
-
-
- submarine.server.ssl.keystore.password
- change me
- Keystore password. Can be obfuscated by the Jetty Password tool
-
-
-
-
-
- submarine.server.ssl.truststore.path
- truststore
- Path to truststore relative to submarine configuration directory. Defaults to the keystore path
-
-
-
- submarine.server.ssl.truststore.type
- JKS
- The format of the given truststore (e.g. JKS or PKCS12). Defaults to the same type as the keystore type
-
-
-
-
-
- workbench.web.war
- ../submarine-workbench-web.war
- Submarine workbench web war file path.
-
-
-
- jdbc.driverClassName
- com.mysql.jdbc.Driver
-
-
- jdbc.url
- jdbc:mysql://127.0.0.1:3306/submarine?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&failOverReadOnly=false&zeroDateTimeBehavior=convertToNull&useSSL=false&allowMultiQueries=true
-
-
- jdbc.username
- submarine
-
-
- jdbc.password
- password
-
-
-
- metastore.jdbc.url
- jdbc:mysql://127.0.0.1:3306/metastore?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&failOverReadOnly=false&zeroDateTimeBehavior=convertToNull&useSSL=false
-
-
- metastore.jdbc.username
- metastore
-
-
- metastore.jdbc.password
- password
-
-
-
- submarine.runtime.class
- org.apache.submarine.server.submitter.yarn.YarnRuntimeFactory
- RuntimeFactory for Submarine jobs
-
-
-
- submarine.server.rpc.enabled
- false
- Run jobs using rpc server.
-
-
-
- submarine.server.rpc.port
- 8980
- Rpc server port
-
-
-
- submarine.submitter
- k8s
- The submitter which you want used in the server. Build-in k8s
-
-
diff --git a/dev-support/docker-images/agent/Dockerfile b/dev-support/docker-images/agent/Dockerfile
index 34fd4b4b8..56a2aa33c 100644
--- a/dev-support/docker-images/agent/Dockerfile
+++ b/dev-support/docker-images/agent/Dockerfile
@@ -34,7 +34,6 @@ ENV JAVA_HOME /usr/lib/jvm/java-1.8-openjdk/jre
# Install Submarine
ADD ./tmp/submarine-k8s-agent-*.tar.gz /opt/
RUN ln -s /opt/submarine-k8s-agent-* "/opt/submarine-current"
-ADD ./tmp/submarine-site.xml "/opt/submarine-current/conf/"
WORKDIR /opt/submarine-current
diff --git a/dev-support/docker-images/agent/build.sh b/dev-support/docker-images/agent/build.sh
index a519b0244..afc84a02f 100755
--- a/dev-support/docker-images/agent/build.sh
+++ b/dev-support/docker-images/agent/build.sh
@@ -40,10 +40,6 @@ fi
mkdir -p "${CURRENT_PATH}/tmp"
cp ${SUBMARINE_HOME}/submarine-server/server-submitter/submarine-k8s-agent/target/submarine-k8s-agent-${SUBMARINE_VERSION}.tar.gz "${CURRENT_PATH}/tmp"
-# Replace the submarine.server.addr in the submarine-site.xml file with the link name of the submarine container
-# `submarine-server` is submarine server container name
-cp ${SUBMARINE_HOME}/conf/submarine-site.xml "${CURRENT_PATH}/tmp/"
-
# build image
cd ${CURRENT_PATH}
diff --git a/dev-support/docker-images/submarine/Dockerfile b/dev-support/docker-images/submarine/Dockerfile
index eb77fa778..3b6171e11 100644
--- a/dev-support/docker-images/submarine/Dockerfile
+++ b/dev-support/docker-images/submarine/Dockerfile
@@ -34,7 +34,6 @@ ENV JAVA_HOME /usr/lib/jvm/java-1.8-openjdk/jre
# Install Submarine
ADD ./tmp/submarine-dist-*.tar.gz /opt/
RUN ln -s /opt/submarine-dist-* "/opt/submarine-current"
-ADD ./tmp/submarine-site.xml "/opt/submarine-current/conf/"
ADD ./tmp/submarine.sh "/opt/submarine-current/bin/"
ADD ./tmp/mysql-connector-java-5.1.39.jar "/opt/submarine-current/lib/"
diff --git a/dev-support/docker-images/submarine/build.sh b/dev-support/docker-images/submarine/build.sh
index 56b6720e3..164bbf501 100755
--- a/dev-support/docker-images/submarine/build.sh
+++ b/dev-support/docker-images/submarine/build.sh
@@ -48,11 +48,6 @@ trap "test -f $tmpfile && rm $tmpfile" RETURN
curl -L -o $tmpfile ${MYSQL_JAR_URL}
mv $tmpfile ${CURRENT_PATH}/tmp/mysql-connector-java-${MYSQL_VERSION}.jar
-# Replace the mysql jdbc.url in the submarine-site.xml file with the link name of the submarine container
-# `submarine-database` is submarine database container name
-cp ${SUBMARINE_HOME}/conf/submarine-site.xml "${CURRENT_PATH}/tmp/"
-sed -i.bak 's/127.0.0.1:3306/submarine-database:3306/g' "${CURRENT_PATH}/tmp/submarine-site.xml"
-
cp ${SUBMARINE_HOME}/bin/submarine.sh "${CURRENT_PATH}/tmp/"
# build image
diff --git a/dev-support/mini-submarine/conf/bootstrap.sh b/dev-support/mini-submarine/conf/bootstrap.sh
index 3152c6af3..1424fae21 100755
--- a/dev-support/mini-submarine/conf/bootstrap.sh
+++ b/dev-support/mini-submarine/conf/bootstrap.sh
@@ -36,15 +36,15 @@ for f in slaves core-site.xml hdfs-site.xml mapred-site.xml yarn-site.xml contai
fi
done
-# Copy submarine config
-for f in slaves submarine-site.xml submarine-env.sh; do
- if [[ -e ${CONFIG_DIR}/$f ]]; then
- cp ${CONFIG_DIR}/$f /opt/submarine-current/conf/$f
- else
- echo "ERROR: Could not find $f in $CONFIG_DIR"
- exit 1
- fi
-done
+# # Copy submarine config
+# for f in slaves submarine-site.xml submarine-env.sh; do
+# if [[ -e ${CONFIG_DIR}/$f ]]; then
+# cp ${CONFIG_DIR}/$f /opt/submarine-current/conf/$f
+# else
+# echo "ERROR: Could not find $f in $CONFIG_DIR"
+# exit 1
+# fi
+# done
# create cgroups
mkdir -p /sys/fs/cgroup/cpu/hadoop-yarn
diff --git a/submarine-cloud-v2/artifacts/submarine/submarine-server.yaml b/submarine-cloud-v2/artifacts/submarine/submarine-server.yaml
index 50cb0137f..d10f16322 100644
--- a/submarine-cloud-v2/artifacts/submarine/submarine-server.yaml
+++ b/submarine-cloud-v2/artifacts/submarine/submarine-server.yaml
@@ -44,6 +44,53 @@ spec:
selector:
app: "submarine-server"
---
+apiVersion: v1
+kind: ConfigMap
+metadata:
+ name: submarine-config
+data:
+ SUBMARINE_SERVER_PORT: "8080"
+ SUBMARINE_SERVER_PORT_8080_TCP: "8080"
+ K8S_APISERVER_URL: "kubernetes.default.svc"
+ submarine.conf.dir: "conf"
+ submarine.localization.max-allowed-file-size-mb: "2048"
+ submarine.server.addr: "0.0.0.0"
+ submarine.server.port: "8080"
+ submarine.server.ssl: "false"
+ submarine.server.ssl.port: "8443"
+ submarine.server.jetty.thread.pool.max: "400"
+ submarine.server.jetty.thread.pool.min: "8"
+ submarine.server.jetty.thread.pool.timeout: "30"
+ submarine.server.jetty.request.header.size: "8192"
+ submarine.server.ssl.client.auth: "false"
+ submarine.server.ssl.keystore.path: "keystore"
+ submarine.server.ssl.keystore.type: "JKS"
+ submarine.server.ssl.keystore.password: ""
+ submarine.server.ssl.key.manager.password: "" # Saved as null in SubmarineConfVars.java
+ submarine.server.ssl.truststore.path: "" # Saved as null in SubmarineConfVars.java
+ submarine.server.ssl.truststore.type: "" # Saved as null in SubmarineConfVars.java
+ submarine.server.ssl.truststore.password: "" # Saved as null in SubmarineConfVars.java
+ submarine.cluster.addr: ""
+ ubmarine.server.rpc.enabled: "false"
+ submarine.server.rpc.port: "8980"
+ cluster.heartbeat.interval: "3000"
+ cluster.heartbeat.timeout: "9000"
+ jdbc.driverClassName: "com.mysql.jdbc.Driver"
+ jdbc.url: "jdbc:mysql://127.0.0.1:3306/submarine?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&allowMultiQueries=true&failOverReadOnly=false&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=UTC&useTimezone=true&useLegacyDatetimeCode=true"
+ jdbc.username: "submarine"
+ jdbc.password: "password"
+ metastore.jdbc.url: "jdbc:mysql://127.0.0.1:3306/metastore?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&failOverReadOnly=false&zeroDateTimeBehavior=convertToNull&useSSL=false"
+ metastore.jdbc.username: "metastore"
+ metastore.jdbc.password: "password"
+ submarine.notebook.default.overwrite_json: ""
+ workbench.websocket.max.text.message.size: "1024000"
+ workbench.web.war: "../submarine-workbench-web.war" # latest: "submarine-workbench/workbench-web/dist"
+ submarine.runtime.class: "org.apache.submarine.server.submitter.yarn.YarnRuntimeFactory"
+ submarine.submitter: "k8s"
+ submarine.server.service.name: "submarine-server"
+ environment.conda.min.version: "4.0.1"
+ environment.conda.max.version: "4.11.10"
+---
# Source: submarine/templates/submarine-server.yaml
apiVersion: apps/v1
kind: Deployment
@@ -89,15 +136,11 @@ spec:
emptyDir: { }
containers:
- name: "submarine-server"
- env:
- - name: SUBMARINE_SERVER_PORT
- value: "8080"
- - name: SUBMARINE_SERVER_PORT_8080_TCP
- value: "8080"
- - name: K8S_APISERVER_URL
- value: "kubernetes.default.svc"
image: "apache/submarine:server-0.8.0-SNAPSHOT"
imagePullPolicy: IfNotPresent
ports:
- containerPort: 8080
+ envFrom:
+ - configMapRef:
+ name: submarine-config
diff --git a/submarine-commons/commons-utils/src/main/java/org/apache/submarine/commons/utils/SubmarineConfVars.java b/submarine-commons/commons-utils/src/main/java/org/apache/submarine/commons/utils/SubmarineConfVars.java
index a96a88596..28c4ceffd 100644
--- a/submarine-commons/commons-utils/src/main/java/org/apache/submarine/commons/utils/SubmarineConfVars.java
+++ b/submarine-commons/commons-utils/src/main/java/org/apache/submarine/commons/utils/SubmarineConfVars.java
@@ -24,59 +24,52 @@
public class SubmarineConfVars {
private static final Logger LOG = LoggerFactory.getLogger(SubmarineConfVars.class);
public enum ConfVars {
- SUBMARINE_CONF_DIR("submarine.conf.dir", "conf"),
+
+ SUBMARINE_CONF_DIR("submarine.conf.dir", VarType.STRING),
SUBMARINE_LOCALIZATION_MAX_ALLOWED_FILE_SIZE_MB(
- "submarine.localization.max-allowed-file-size-mb", 2048L),
- SUBMARINE_SERVER_ADDR("submarine.server.addr", "0.0.0.0"),
- SUBMARINE_SERVER_PORT("submarine.server.port", 8080),
- SUBMARINE_SERVER_SSL("submarine.server.ssl", false),
- SUBMARINE_SERVER_SSL_PORT("submarine.server.ssl.port", 8443),
- SUBMARINE_SERVER_JETTY_THREAD_POOL_MAX("submarine.server.jetty.thread.pool.max", 400),
- SUBMARINE_SERVER_JETTY_THREAD_POOL_MIN("submarine.server.jetty.thread.pool.min", 8),
- SUBMARINE_SERVER_JETTY_THREAD_POOL_TIMEOUT("submarine.server.jetty.thread.pool.timeout", 30),
- SUBMARINE_SERVER_JETTY_REQUEST_HEADER_SIZE("submarine.server.jetty.request.header.size", 8192),
- SUBMARINE_SERVER_SSL_CLIENT_AUTH("submarine.server.ssl.client.auth", false),
- SUBMARINE_SERVER_SSL_KEYSTORE_PATH("submarine.server.ssl.keystore.path", "keystore"),
- SUBMARINE_SERVER_SSL_KEYSTORE_TYPE("submarine.server.ssl.keystore.type", "JKS"),
- SUBMARINE_SERVER_SSL_KEYSTORE_PASSWORD("submarine.server.ssl.keystore.password", ""),
- SUBMARINE_SERVER_SSL_KEY_MANAGER_PASSWORD("submarine.server.ssl.key.manager.password", null),
- SUBMARINE_SERVER_SSL_TRUSTSTORE_PATH("submarine.server.ssl.truststore.path", null),
- SUBMARINE_SERVER_SSL_TRUSTSTORE_TYPE("submarine.server.ssl.truststore.type", null),
- SUBMARINE_SERVER_SSL_TRUSTSTORE_PASSWORD("submarine.server.ssl.truststore.password", null),
- SUBMARINE_CLUSTER_ADDR("submarine.cluster.addr", ""),
+ "submarine.localization.max-allowed-file-size-mb", VarType.LONG),
+ SUBMARINE_SERVER_ADDR("submarine.server.addr", VarType.STRING),
+ SUBMARINE_SERVER_PORT("submarine.server.port", VarType.INT),
+ SUBMARINE_SERVER_SSL("submarine.server.ssl", VarType.BOOLEAN),
+ SUBMARINE_SERVER_SSL_PORT("submarine.server.ssl.port", VarType.INT),
+ SUBMARINE_SERVER_JETTY_THREAD_POOL_MAX("submarine.server.jetty.thread.pool.max", VarType.INT),
+ SUBMARINE_SERVER_JETTY_THREAD_POOL_MIN("submarine.server.jetty.thread.pool.min", VarType.INT),
+ SUBMARINE_SERVER_JETTY_THREAD_POOL_TIMEOUT("submarine.server.jetty.thread.pool.timeout", VarType.INT),
+ SUBMARINE_SERVER_JETTY_REQUEST_HEADER_SIZE("submarine.server.jetty.request.header.size", VarType.INT),
+ SUBMARINE_SERVER_SSL_CLIENT_AUTH("submarine.server.ssl.client.auth", VarType.BOOLEAN),
+ SUBMARINE_SERVER_SSL_KEYSTORE_PATH("submarine.server.ssl.keystore.path", VarType.STRING),
+ SUBMARINE_SERVER_SSL_KEYSTORE_TYPE("submarine.server.ssl.keystore.type", VarType.STRING),
+ SUBMARINE_SERVER_SSL_KEYSTORE_PASSWORD("submarine.server.ssl.keystore.password", VarType.STRING),
+ SUBMARINE_SERVER_SSL_KEY_MANAGER_PASSWORD("submarine.server.ssl.key.manager.password", VarType.STRING),
+ SUBMARINE_SERVER_SSL_TRUSTSTORE_PATH("submarine.server.ssl.truststore.path", VarType.STRING),
+ SUBMARINE_SERVER_SSL_TRUSTSTORE_TYPE("submarine.server.ssl.truststore.type", VarType.STRING),
+ SUBMARINE_SERVER_SSL_TRUSTSTORE_PASSWORD("submarine.server.ssl.truststore.password", VarType.STRING),
+ SUBMARINE_CLUSTER_ADDR("submarine.cluster.addr", VarType.STRING),
SUBMARINE_SERVER_RPC_ENABLED(
- "submarine.server.rpc.enabled", false),
+ "submarine.server.rpc.enabled", VarType.BOOLEAN),
SUBMARINE_SERVER_RPC_PORT(
- "submarine.server.rpc.port", 8980),
- CLUSTER_HEARTBEAT_INTERVAL("cluster.heartbeat.interval", 3000),
- CLUSTER_HEARTBEAT_TIMEOUT("cluster.heartbeat.timeout", 9000),
-
- JDBC_DRIVERCLASSNAME("jdbc.driverClassName", "com.mysql.jdbc.Driver"),
- JDBC_URL("jdbc.url", "jdbc:mysql://127.0.0.1:3306/submarine" +
- "?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&allowMultiQueries=true&" +
- "failOverReadOnly=false&zeroDateTimeBehavior=convertToNull&useSSL=false&" +
- // use timezone for dateformat, current default database timezone is utc
- "serverTimezone=UTC&useTimezone=true&useLegacyDatetimeCode=true"),
- JDBC_USERNAME("jdbc.username", "submarine"),
- JDBC_PASSWORD("jdbc.password", "password"),
- METASTORE_JDBC_URL("metastore.jdbc.url", "jdbc:mysql://127.0.0.1:3306/metastore" +
- "?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&" +
- "failOverReadOnly=false&zeroDateTimeBehavior=convertToNull&useSSL=false"),
- METASTORE_JDBC_USERNAME("metastore.jdbc.username", "metastore"),
- METASTORE_JDBC_PASSWORD("metastore.jdbc.password", "password"),
-
- SUBMARINE_NOTEBOOK_DEFAULT_OVERWRITE_JSON("submarine.notebook.default.overwrite_json", ""),
+ "submarine.server.rpc.port", VarType.INT),
+ CLUSTER_HEARTBEAT_INTERVAL("cluster.heartbeat.interval", VarType.INT),
+ CLUSTER_HEARTBEAT_TIMEOUT("cluster.heartbeat.timeout", VarType.INT),
- WORKBENCH_WEBSOCKET_MAX_TEXT_MESSAGE_SIZE(
- "workbench.websocket.max.text.message.size", "1024000"),
- WORKBENCH_WEB_WAR("workbench.web.war", "submarine-workbench/workbench-web/dist"),
- SUBMARINE_RUNTIME_CLASS("submarine.runtime.class",
- "org.apache.submarine.server.submitter.yarn.YarnRuntimeFactory"),
- SUBMARINE_SUBMITTER("submarine.submitter", "k8s"),
- SUBMARINE_SERVER_SERVICE_NAME("submarine.server.service.name", "submarine-server"),
- ENVIRONMENT_CONDA_MIN_VERSION("environment.conda.min.version", "4.0.1"),
- ENVIRONMENT_CONDA_MAX_VERSION("environment.conda.max.version", "4.11.10");
+ JDBC_DRIVERCLASSNAME("jdbc.driverClassName", VarType.STRING),
+ JDBC_URL("jdbc.url", VarType.STRING),
+ JDBC_USERNAME("jdbc.username", VarType.STRING),
+ JDBC_PASSWORD("jdbc.password", VarType.STRING),
+ METASTORE_JDBC_URL("metastore.jdbc.url", VarType.STRING),
+ METASTORE_JDBC_USERNAME("metastore.jdbc.username", VarType.STRING),
+ METASTORE_JDBC_PASSWORD("metastore.jdbc.password", VarType.STRING),
+
+ SUBMARINE_NOTEBOOK_DEFAULT_OVERWRITE_JSON("submarine.notebook.default.overwrite_json", VarType.STRING),
+ WORKBENCH_WEBSOCKET_MAX_TEXT_MESSAGE_SIZE(
+ "workbench.websocket.max.text.message.size", VarType.STRING),
+ WORKBENCH_WEB_WAR("workbench.web.war", VarType.STRING),
+ SUBMARINE_SUBMITTER("submarine.submitter", VarType.STRING),
+ SUBMARINE_SERVER_SERVICE_NAME("submarine.server.service.name", VarType.STRING),
+ ENVIRONMENT_CONDA_MIN_VERSION("environment.conda.min.version", VarType.STRING),
+ ENVIRONMENT_CONDA_MAX_VERSION("environment.conda.max.version", VarType.STRING);
+
private String varName;
@SuppressWarnings("rawtypes")
private Class varClass;
@@ -87,60 +80,69 @@ public enum ConfVars {
private boolean booleanValue;
private long longValue;
-
- ConfVars(String varName, String varValue) {
- this.varName = varName;
- this.varClass = String.class;
- this.stringValue = varValue;
- this.intValue = -1;
- this.floatValue = -1;
- this.longValue = -1;
- this.booleanValue = false;
- this.type = VarType.STRING;
- }
-
- ConfVars(String varName, int intValue) {
- this.varName = varName;
- this.varClass = Integer.class;
- this.stringValue = null;
- this.intValue = intValue;
- this.floatValue = -1;
- this.longValue = -1;
- this.booleanValue = false;
- this.type = VarType.INT;
- }
-
- ConfVars(String varName, long longValue) {
- this.varName = varName;
- this.varClass = Integer.class;
- this.stringValue = null;
- this.intValue = -1;
- this.floatValue = -1;
- this.longValue = longValue;
- this.booleanValue = false;
- this.type = VarType.LONG;
- }
-
- ConfVars(String varName, float floatValue) {
- this.varName = varName;
- this.varClass = Float.class;
- this.stringValue = null;
- this.intValue = -1;
- this.longValue = -1;
- this.floatValue = floatValue;
- this.booleanValue = false;
- this.type = VarType.FLOAT;
- }
-
- ConfVars(String varName, boolean booleanValue) {
- this.varName = varName;
- this.varClass = Boolean.class;
- this.stringValue = null;
- this.intValue = -1;
- this.longValue = -1;
- this.floatValue = -1;
- this.booleanValue = booleanValue;
- this.type = VarType.BOOLEAN;
+
+ ConfVars(String varName, VarType type) {
+ switch(type) {
+ case STRING:
+ this.varName = varName;
+ this.varClass = String.class;
+ if (varName == "submarine.server.ssl.key.manager.password" ||
+ varName == "submarine.server.ssl.truststore.path" ||
+ varName == "submarine.server.ssl.truststore.type" ||
+ varName == "submarine.server.ssl.truststore.password"
+ ) {
+ this.stringValue = null;
+ } else {
+ this.stringValue = System.getenv(varName);
+ }
+ this.intValue = -1;
+ this.floatValue = -1;
+ this.longValue = -1;
+ this.booleanValue = false;
+ break;
+
+ case INT:
+ this.varName = varName;
+ this.varClass = Integer.class;
+ this.stringValue = null;
+ this.intValue = Integer.valueOf(System.getenv(varName));
+ this.floatValue = -1;
+ this.longValue = -1;
+ this.booleanValue = false;
+ break;
+
+ case LONG:
+ this.varName = varName;
+ this.varClass = Integer.class;
+ this.stringValue = null;
+ this.intValue = -1;
+ this.floatValue = -1;
+ this.longValue = Long.parseLong(System.getenv(varName), 10);
+ this.booleanValue = false;
+ break;
+
+ case FLOAT:
+ this.varName = varName;
+ this.varClass = Float.class;
+ this.stringValue = null;
+ this.intValue = -1;
+ this.longValue = -1;
+ this.floatValue = Float.parseFloat(System.getenv(varName));
+ this.booleanValue = false;
+ break;
+
+ case BOOLEAN:
+ this.varName = varName;
+ this.varClass = Boolean.class;
+ this.stringValue = null;
+ this.intValue = -1;
+ this.longValue = -1;
+ this.floatValue = -1;
+ this.booleanValue = Boolean.parseBoolean(System.getenv(varName));
+ break;
+ }
+ this.type = type;
+ LOG.info(varName + ": Using new constructor!!!");
}
public String getVarName() {
diff --git a/submarine-commons/commons-utils/src/main/java/org/apache/submarine/commons/utils/SubmarineConfiguration.java b/submarine-commons/commons-utils/src/main/java/org/apache/submarine/commons/utils/SubmarineConfiguration.java
index 325906215..1e8ddcc12 100644
--- a/submarine-commons/commons-utils/src/main/java/org/apache/submarine/commons/utils/SubmarineConfiguration.java
+++ b/submarine-commons/commons-utils/src/main/java/org/apache/submarine/commons/utils/SubmarineConfiguration.java
@@ -19,51 +19,25 @@
package org.apache.submarine.commons.utils;
import com.google.common.annotations.VisibleForTesting;
-import org.apache.commons.configuration.ConfigurationException;
import org.apache.commons.configuration.XMLConfiguration;
-import org.apache.commons.configuration.tree.ConfigurationNode;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.File;
-import java.net.URL;
import java.util.HashMap;
-import java.util.List;
import java.util.Map;
public class SubmarineConfiguration extends XMLConfiguration {
private static final Logger LOG = LoggerFactory.getLogger(SubmarineConfiguration.class);
private static final long serialVersionUID = 4749303235693848035L;
- private static final String SUBMARINE_SITE_XML = "submarine-site.xml";
-
public static final String SUBMARINE_RUNTIME_APP_TYPE = "SUBMARINE";
private static volatile SubmarineConfiguration conf;
private Map properties = new HashMap<>();
- private SubmarineConfiguration(URL url) throws ConfigurationException {
- setDelimiterParsingDisabled(true);
- load(url);
- initProperties();
- }
-
- private void initProperties() {
- List nodes = getRootNode().getChildren();
- if (nodes == null || nodes.isEmpty()) {
- return;
- }
- for (ConfigurationNode p : nodes) {
- String name = (String) p.getChildren("name").get(0).getValue();
- String value = (String) p.getChildren("value").get(0).getValue();
- if (!StringUtils.isEmpty(name)) {
- properties.put(name, value);
- }
- }
- }
-
private SubmarineConfiguration() {
SubmarineConfVars.ConfVars[] vars = SubmarineConfVars.ConfVars.values();
for (SubmarineConfVars.ConfVars v : vars) {
@@ -89,47 +63,14 @@ public static SubmarineConfiguration getInstance() {
if (conf == null) {
synchronized (SubmarineConfiguration.class) {
if (conf == null) {
- conf = newInstance();
+ // conf = newInstance();
+ conf = new SubmarineConfiguration();
}
}
}
return conf;
}
- // Create a new instance
- // Note: Cannot be mixed with getInstance()
- public static SubmarineConfiguration newInstance() {
- SubmarineConfiguration submarineConfig;
- ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
- URL url;
-
- url = SubmarineConfiguration.class.getResource(SUBMARINE_SITE_XML);
- if (url == null) {
- ClassLoader cl = SubmarineConfiguration.class.getClassLoader();
- if (cl != null) {
- url = cl.getResource(SUBMARINE_SITE_XML);
- }
- }
- if (url == null) {
- url = classLoader.getResource(SUBMARINE_SITE_XML);
- }
-
- if (url == null) {
- LOG.warn("Failed to load configuration, proceeding with a default");
- submarineConfig = new SubmarineConfiguration();
- } else {
- try {
- LOG.info("Load configuration from " + url);
- submarineConfig = new SubmarineConfiguration(url);
- } catch (ConfigurationException e) {
- LOG.warn("Failed to load configuration from " + url + " proceeding with a default", e);
- submarineConfig = new SubmarineConfiguration();
- }
- }
-
- return submarineConfig;
- }
-
public String getServerAddress() {
return getString(SubmarineConfVars.ConfVars.SUBMARINE_SERVER_ADDR);
}
diff --git a/submarine-server/server-core/src/main/java/org/apache/submarine/server/SubmarineServer.java b/submarine-server/server-core/src/main/java/org/apache/submarine/server/SubmarineServer.java
index 92ce425ad..f18fd3e07 100644
--- a/submarine-server/server-core/src/main/java/org/apache/submarine/server/SubmarineServer.java
+++ b/submarine-server/server-core/src/main/java/org/apache/submarine/server/SubmarineServer.java
@@ -212,6 +212,15 @@ private static Server setupJettyServer(SubmarineConfiguration conf) {
new QueuedThreadPool(conf.getInt(SubmarineConfVars.ConfVars.SUBMARINE_SERVER_JETTY_THREAD_POOL_MAX),
conf.getInt(SubmarineConfVars.ConfVars.SUBMARINE_SERVER_JETTY_THREAD_POOL_MIN),
conf.getInt(SubmarineConfVars.ConfVars.SUBMARINE_SERVER_JETTY_THREAD_POOL_TIMEOUT));
+ // Debug
+ LOG.info("//////////////////// setupJettyServer Debug //////////////////");
+ LOG.info("SUBMARINE_SERVER_JETTY_THREAD_POOL_MAX: " +
+ Integer.toString(conf.getInt(SubmarineConfVars.ConfVars.SUBMARINE_SERVER_JETTY_THREAD_POOL_MAX)));
+ LOG.info("SUBMARINE_SERVER_JETTY_THREAD_POOL_MIN: " +
+ Integer.toString(conf.getInt(SubmarineConfVars.ConfVars.SUBMARINE_SERVER_JETTY_THREAD_POOL_MIN)));
+ LOG.info("SUBMARINE_SERVER_JETTY_THREAD_POOL_TIMEOUT: " +
+ Integer.toString(conf.getInt(SubmarineConfVars.ConfVars.SUBMARINE_SERVER_JETTY_THREAD_POOL_TIMEOUT)));
+
final Server server = new Server(threadPool);
ServerConnector connector;
@@ -235,8 +244,12 @@ private static Server setupJettyServer(SubmarineConfiguration conf) {
} else {
connector = new ServerConnector(server);
}
+ // Debug
+ LOG.info("useSsl: " + Boolean.toString(conf.useSsl()));
configureRequestHeaderSize(conf, connector);
+ // Debug
+ LOG.info("getJettyRequestHeaderSize: " + Integer.toString(conf.getJettyRequestHeaderSize()));
// Set some timeout options to make debugging easier.
int timeout = 1000 * 30;
connector.setIdleTimeout(timeout);
@@ -246,6 +259,12 @@ private static Server setupJettyServer(SubmarineConfiguration conf) {
} else {
connector.setPort(conf.getServerPort());
}
+ // Debug
+ LOG.info("getServerAddress: " + conf.getServerAddress());
+ LOG.info("getServerSslPort: " + conf.getServerSslPort());
+ LOG.info("getServerPort: " + conf.getServerPort());
+
+ LOG.info("////////////////////////////////////////////////////////////////////");
server.addConnector(connector);
return server;