diff --git a/Dockerfile b/Dockerfile
index 4f7e295..5c9e272 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -17,7 +17,8 @@
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
-FROM adoptopenjdk/openjdk8-openj9:jre8u322-b06_openj9-0.30.0-ubuntu
+ARG platform=linux/amd64
+FROM --platform=$platform adoptopenjdk/openjdk8-openj9:jre8u322-b06_openj9-0.30.0-ubuntu
ARG revision=latest
ARG repository=ClickHouse/clickhouse-jdbc-bridge
diff --git a/NOTICE b/NOTICE
index 2ba3b45..f7b9e41 100755
--- a/NOTICE
+++ b/NOTICE
@@ -35,10 +35,17 @@ This project includes:
Jackson-core under The Apache Software License, Version 2.0
jackson-databind under The Apache Software License, Version 2.0
Java Native Access under LGPL, version 2.1 or Apache License v2.0
+ JavaBeans Activation Framework (JAF) under Common Development and Distribution License (CDDL) v1.0
+ JavaMail API under CDDL/GPLv2+CE
jcommander under Apache 2.0
JetBrains Java Annotations under The Apache Software License, Version 2.0
JUnit under Eclipse Public License 1.0
LatencyUtils under Public Domain, per Creative Commons CC0
+ Logback Classic Module under Eclipse Public License - v 1.0 or GNU Lesser General Public License
+ Logback Contrib :: Jackson under Eclipse Public License - v 1.0 or GNU Lesser General Public License
+ Logback Contrib :: JSON :: Classic under Eclipse Public License - v 1.0 or GNU Lesser General Public License
+ Logback Contrib :: JSON :: Core under Eclipse Public License - v 1.0 or GNU Lesser General Public License
+ Logback Core Module under Eclipse Public License - v 1.0 or GNU Lesser General Public License
micrometer-core under The Apache Software License, Version 2.0
micrometer-registry-prometheus under The Apache Software License, Version 2.0
Netty/Buffer under Apache License, Version 2.0
@@ -57,7 +64,6 @@ This project includes:
Prometheus Java Simpleclient under The Apache Software License, Version 2.0
Prometheus Java Simpleclient Common under The Apache Software License, Version 2.0
SLF4J API Module under MIT License
- SLF4J JDK14 Binding under MIT License
Testcontainers Core under MIT
testng under Apache 2.0
Vert.x Bridge Common under The Apache Software License, Version 2.0 or Eclipse Public License - v 1.0
diff --git a/README.md b/README.md
index da1fdde..2fca266 100644
--- a/README.md
+++ b/README.md
@@ -286,7 +286,13 @@ Assuming you started a test environment using docker-compose, please refer to ex
* Logging
- You can customize logging configuration in [logging.properties](docker/logging.properties).
+ You can customize logging configuration in [logback.xml](docker/logback.xml). See the [logback documentation](https://logback.qos.ch/manual/configuration.html) for details about the contents of this file.
+
+ Note that the default logging level is `trace` -- you may wish to set this to `info` or `warning` for less verbose logs in production.
+
+ Note also that the default logging format is the default plaintext format suggested by logback. We also provide (by way of example) a structured log appender named `JSON_STDOUT`; to use it you will need to change the `appender-ref` property of the root logger to point to it.
+
+ WARNING: because the shaded jar build process relocates most classes to the `com.clickhouse.jdbcbridge.internal` path, using the default class paths offered in the logback documentation will result in import errors. If building your own logback.xml file, you will need to replace all references to `ch.qos.logback` with `com.clickhouse.jdbcbridge.internal.qos.logback` -- the included logback.xml file does this for you.
* Vert.x
diff --git a/docker/docker-entrypoint.sh b/docker/docker-entrypoint.sh
index cba0ec8..cd8ec28 100644
--- a/docker/docker-entrypoint.sh
+++ b/docker/docker-entrypoint.sh
@@ -3,39 +3,39 @@
set -e
start_server() {
- local base_url="${MAVEN_REPO_URL:="https://repo1.maven.org/maven2"}"
- local driver_dir="$JDBC_BRIDGE_HOME/drivers"
- local jdbc_drivers="${JDBC_DRIVERS:=""}"
+ local base_url="${MAVEN_REPO_URL:="https://repo1.maven.org/maven2"}"
+ local driver_dir="$JDBC_BRIDGE_HOME/drivers"
+ local jdbc_drivers="${JDBC_DRIVERS:=""}"
- # change work directory explicitly
- cd $JDBC_BRIDGE_HOME
+ # change work directory explicitly
+ cd $JDBC_BRIDGE_HOME
- if [ "$jdbc_drivers" != "" ] && [ "$(ls -A $driver_dir)" == "" ]; then
- echo "Downloading JDBC drivers to directory [$driver_dir]..."
- for i in $(echo "$jdbc_drivers" | sed "s/,/ /g"); do
- if [ "$i" != "" ]; then
- echo " => [$base_url/$i]..."
- wget -q -P "$driver_dir" "$base_url/$i"
- fi
- done
- fi
+ if [ "$jdbc_drivers" != "" ] && [ "$(ls -A $driver_dir)" == "" ]; then
+ echo "Downloading JDBC drivers to directory [$driver_dir]..."
+ for i in $(echo "$jdbc_drivers" | sed "s/,/ /g"); do
+ if [ "$i" != "" ]; then
+ echo " => [$base_url/$i]..."
+ wget -q -P "$driver_dir" "$base_url/$i"
+ fi
+ done
+ fi
- if [ "$(echo ${CUSTOM_DRIVER_LOADER:="true"} | tr '[:upper:]' '[:lower:]')" != "true" ]; then
- local classpath="./clickhouse-jdbc-bridge-shaded.jar:$(echo $(ls ${DRIVER_DIR:="drivers"}/*.jar) | tr ' ' ':'):."
- java -XX:+UseContainerSupport -XX:+IdleTuningCompactOnIdle -XX:+IdleTuningGcOnIdle \
- -Xdump:none -Xdump:tool:events=systhrow+throw,filter=*OutOfMemoryError,exec="kill -9 %pid" \
- -Djava.util.logging.config.file=$JDBC_BRIDGE_HOME/logging.properties -Dnashorn.args=--language=es6 \
- ${JDBC_BRIDGE_JVM_OPTS:=""} -cp $classpath com.clickhouse.jdbcbridge.JdbcBridgeVerticle
- else
- java -XX:+UseContainerSupport -XX:+IdleTuningCompactOnIdle -XX:+IdleTuningGcOnIdle \
- -Xdump:none -Xdump:tool:events=systhrow+throw,filter=*OutOfMemoryError,exec="kill -9 %pid" \
- -Djava.util.logging.config.file=$JDBC_BRIDGE_HOME/logging.properties -Dnashorn.args=--language=es6 \
- ${JDBC_BRIDGE_JVM_OPTS:=""} -jar clickhouse-jdbc-bridge-shaded.jar
- fi
+ if [ "$(echo ${CUSTOM_DRIVER_LOADER:="true"} | tr '[:upper:]' '[:lower:]')" != "true" ]; then
+ local classpath="./clickhouse-jdbc-bridge-shaded.jar:$(echo $(ls ${DRIVER_DIR:="drivers"}/*.jar) | tr ' ' ':'):."
+ java -XX:+UseContainerSupport -XX:+IdleTuningCompactOnIdle -XX:+IdleTuningGcOnIdle \
+ -Xdump:none -Xdump:tool:events=systhrow+throw,filter=*OutOfMemoryError,exec="kill -9 %pid" \
+ -Dlogback.configurationFile=$JDBC_BRIDGE_HOME/logback.xml -Dnashorn.args=--language=es6 \
+ ${JDBC_BRIDGE_JVM_OPTS:=""} -cp $classpath com.clickhouse.jdbcbridge.JdbcBridgeVerticle
+ else
+ java -XX:+UseContainerSupport -XX:+IdleTuningCompactOnIdle -XX:+IdleTuningGcOnIdle \
+ -Xdump:none -Xdump:tool:events=systhrow+throw,filter=*OutOfMemoryError,exec="kill -9 %pid" \
+ -Dlogback.configurationFile=$JDBC_BRIDGE_HOME/logback.xml -Dnashorn.args=--language=es6 \
+ ${JDBC_BRIDGE_JVM_OPTS:=""} -jar clickhouse-jdbc-bridge-shaded.jar
+ fi
}
if [ $# -eq 0 ]; then
- start_server
+ start_server
else
- exec "$@"
+ exec "$@"
fi
diff --git a/docker/logback.xml b/docker/logback.xml
new file mode 100644
index 0000000..9939ba9
--- /dev/null
+++ b/docker/logback.xml
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
+
+
+
+
+
+
+ true
+ yyyy-MM-dd'T'HH:mm:ss.SSSX
+ Etc/UTC
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docker/logging.properties b/docker/logging.properties
deleted file mode 100644
index 380dfdf..0000000
--- a/docker/logging.properties
+++ /dev/null
@@ -1,14 +0,0 @@
-handlers=java.util.logging.FileHandler, java.util.logging.ConsoleHandler
-
-java.util.logging.ConsoleHandler.level=DEBUG
-java.util.logging.ConsoleHandler.formatter=java.util.logging.SimpleFormatter
-java.util.logging.SimpleFormatter.format=[%1$tF %1$tT] [%4$-7s] %5$s %n
-
-java.util.logging.FileHandler.level=INFO
-java.util.logging.FileHandler.pattern=/var/log/clickhouse-jdbc-bridge/console.log
-java.util.logging.FileHandler.limit=10000000
-java.util.logging.FileHandler.count=5
-java.util.logging.FileHandler.formatter=java.util.logging.SimpleFormatter
-java.util.logging.SimpleFormatter.format=[%1$tF %1$tT] [%4$-7s] %5$s %n
-
-.level=DEBUG
diff --git a/pom.xml b/pom.xml
index ac76191..ca25dff 100644
--- a/pom.xml
+++ b/pom.xml
@@ -15,7 +15,7 @@
3.5.0
3.9.13
1.1.19
- 1.7.36
+ 2.0.1
3.4.5
2022
UTF-8
@@ -28,6 +28,7 @@
1.6
1.5.3
2.11
+ 1.3.4
1.1.0
3.8.1
3.2.1
@@ -35,6 +36,10 @@
3.2.0
3.0.0-M5
3.0.0-M5
+ 0.1.5
+ 0.1.5
+ 2.13.4
+ 2.13.4.1
3.2.4
com.clickhouse.jdbcbridge.internal
1.0.20
@@ -79,6 +84,12 @@
com.zaxxer
HikariCP
${hikaricp.version}
+
+
+ org.slf4j
+ slf4j-api
+
+
@@ -86,6 +97,12 @@
dnsjava
dnsjava
${dnsjava.version}
+
+
+ org.slf4j
+ slf4j-api
+
+
@@ -93,6 +110,12 @@
io.vertx
vertx-core
${vertx.version}
+
+
+ com.fasterxml.jackson.core
+ jackson-core
+
+
io.vertx
@@ -124,14 +147,29 @@
- org.slf4j
- slf4j-api
- ${slf4j.version}
+ ch.qos.logback
+ logback-classic
+ ${logback.version}
+
+
+ ch.qos.logback.contrib
+ logback-json-classic
+ ${logback-json.version}
+
+
+ ch.qos.logback.contrib
+ logback-jackson
+ ${logback-jackson.version}
+
+
+ com.fasterxml.jackson.core
+ jackson-core
+ ${jackson.version}
- org.slf4j
- slf4j-jdk14
- ${slf4j.version}
+ com.fasterxml.jackson.core
+ jackson-databind
+ ${jackson-databind.version}
@@ -300,7 +338,7 @@
root
- docker/logging.properties
+ docker/logback.xml
docker/set-env.sh.example
@@ -565,6 +603,10 @@
org.LatencyUtils
${shade.base}.LatencyUtils
+
+ ch.qos
+ ${shade.base}.qos
+
diff --git a/src/main/bin/clickhouse-jdbc-bridge b/src/main/bin/clickhouse-jdbc-bridge
index 0c10dd2..9d735b4 100644
--- a/src/main/bin/clickhouse-jdbc-bridge
+++ b/src/main/bin/clickhouse-jdbc-bridge
@@ -25,45 +25,45 @@ INIT_SCRIPT="/etc/clickhouse-jdbc-bridge/set-env.sh"
JAVA_CMD="java"
init_env() {
- if [ -f $INIT_SCRIPT ]; then
- echo "Executing [$INIT_SCRIPT] to set environment variables..."
- . $INIT_SCRIPT
- else
- echo "[$INIT_SCRIPT] is not found, will use default environment variables"
- fi
+ if [ -f $INIT_SCRIPT ]; then
+ echo "Executing [$INIT_SCRIPT] to set environment variables..."
+ . $INIT_SCRIPT
+ else
+ echo "[$INIT_SCRIPT] is not found, will use default environment variables"
+ fi
- # check if we have JRE
- if [ -n "$JAVA_HOME" ] && [ -x "$JAVA_HOME/bin/java" ]; then
- JAVA_CMD="$JAVA_HOME/bin/java"
- elif ! type -p java > /dev/null; then
- echo "ERROR: Java needs to be installed first"
- exit 1
- fi
+ # check if we have JRE
+ if [ -n "$JAVA_HOME" ] && [ -x "$JAVA_HOME/bin/java" ]; then
+ JAVA_CMD="$JAVA_HOME/bin/java"
+ elif ! type -p java >/dev/null; then
+ echo "ERROR: Java needs to be installed first"
+ exit 1
+ fi
}
start_server() {
- # override below environment variables as needed in $INIT_SCRIPT
- : ${APP_PACKAGE:="/usr/local/lib/java/clickhouse-jdbc-bridge-shaded.jar"}
- : ${JVM_ARGS:="-Xmx512m"}
- : ${WORK_DIRECTORY:=$(dirname "$INIT_SCRIPT")}
+ # override below environment variables as needed in $INIT_SCRIPT
+ : ${APP_PACKAGE:="/usr/local/lib/java/clickhouse-jdbc-bridge-shaded.jar"}
+ : ${JVM_ARGS:="-Xmx512m"}
+ : ${WORK_DIRECTORY:=$(dirname "$INIT_SCRIPT")}
- # kill server if it's running
- kill -9 $(ps -ef | grep java | grep "$APP_PACKAGE" | awk '{print $2}') 2>/dev/null || true
+ # kill server if it's running
+ kill -9 $(ps -ef | grep java | grep "$APP_PACKAGE" | awk '{print $2}') 2>/dev/null || true
- if [ ! -f "$APP_PACKAGE" ]; then
- echo "ERROR: ClickHouse JDBC Bridge could not start because [$APP_PACKAGE] is missing"
- exit 1
- fi
+ if [ ! -f "$APP_PACKAGE" ]; then
+ echo "ERROR: ClickHouse JDBC Bridge could not start because [$APP_PACKAGE] is missing"
+ exit 1
+ fi
- if [ ! -d "$WORK_DIRECTORY" ]; then
- echo "WARN: Work directory [$WORK_DIRECTORY] does not exist"
- WORK_DIRECTORY=$(dirname "$INIT_SCRIPT")
- fi
+ if [ ! -d "$WORK_DIRECTORY" ]; then
+ echo "WARN: Work directory [$WORK_DIRECTORY] does not exist"
+ WORK_DIRECTORY=$(dirname "$INIT_SCRIPT")
+ fi
- echo "Work directory is set to [$WORK_DIRECTORY]"
- cd "$WORK_DIRECTORY"
- java $JVM_ARGS -Djava.util.logging.config.file=$WORK_DIRECTORY/logging.properties \
- -Duser.dir="$WORK_DIRECTORY" -jar "$APP_PACKAGE"
+ echo "Work directory is set to [$WORK_DIRECTORY]"
+ cd "$WORK_DIRECTORY"
+ java $JVM_ARGS -Dlogback.configurationFile=$WORK_DIRECTORY/logback.xml \
+ -Duser.dir="$WORK_DIRECTORY" -jar "$APP_PACKAGE"
}
init_env
diff --git a/src/main/resources/logback.xml b/src/main/resources/logback.xml
new file mode 100644
index 0000000..4b007d5
--- /dev/null
+++ b/src/main/resources/logback.xml
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
+
+
+
+
+
+
+ true
+ yyyy-MM-dd'T'HH:mm:ss.SSSX
+ Etc/UTC
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/resources/logging.properties b/src/main/resources/logging.properties
deleted file mode 100644
index 89c5d7f..0000000
--- a/src/main/resources/logging.properties
+++ /dev/null
@@ -1,7 +0,0 @@
-handlers=java.util.logging.ConsoleHandler
-
-java.util.logging.ConsoleHandler.level=DEBUG
-java.util.logging.ConsoleHandler.formatter=java.util.logging.SimpleFormatter
-java.util.logging.SimpleFormatter.format=[%1$tF %1$tT] [%4$-7s] %5$s %n
-
-.level=DEBUG
diff --git a/test.Dockerfile b/test.Dockerfile
new file mode 100644
index 0000000..92daf2e
--- /dev/null
+++ b/test.Dockerfile
@@ -0,0 +1,48 @@
+#
+# This dockerfile will create a deployable docker image out of a locally built jar, e.g.:
+# `mvn -DskipTests clean package && docker build -f test.Dockerfile -t clickhouse-jdbc-bridge:$(git rev-parse --short head) .`
+#
+ARG revision=latest
+ARG platform=linux/amd64
+FROM --platform=$platform adoptopenjdk/openjdk8-openj9:jre8u322-b06_openj9-0.30.0-ubuntu
+
+# Labels
+LABEL app_name="ClickHouse JDBC Bridge"
+
+# Environment variables
+ENV JDBC_BRIDGE_HOME=/app
+WORKDIR $JDBC_BRIDGE_HOME
+
+COPY LICENSE NOTICE pom.xml ${JDBC_BRIDGE_HOME}/
+COPY --chown=root:root docker/ $JDBC_BRIDGE_HOME/
+
+# Update system and install additional packages for troubleshooting
+RUN apt-get update \
+ && DEBIAN_FRONTEND=noninteractive apt-get install -qq --allow-unauthenticated apache2-utils \
+ apt-transport-https curl htop iftop iptraf iputils-ping jq lsof net-tools tzdata wget \
+ && apt-get clean \
+ && wget -P $JDBC_BRIDGE_HOME/drivers \
+ https://repo1.maven.org/maven2/com/clickhouse/clickhouse-jdbc/0.3.2-patch8/clickhouse-jdbc-0.3.2-patch8-all.jar \
+ https://repo1.maven.org/maven2/org/mariadb/jdbc/mariadb-java-client/3.0.4/mariadb-java-client-3.0.4.jar \
+ https://repo1.maven.org/maven2/mysql/mysql-connector-java/8.0.28/mysql-connector-java-8.0.28.jar \
+ https://repo1.maven.org/maven2/org/neo4j/neo4j-jdbc-driver/4.0.5/neo4j-jdbc-driver-4.0.5.jar \
+ https://repo1.maven.org/maven2/com/amazon/opendistroforelasticsearch/client/opendistro-sql-jdbc/1.13.0.0/opendistro-sql-jdbc-1.13.0.0.jar \
+ https://repo1.maven.org/maven2/org/postgresql/postgresql/42.3.4/postgresql-42.3.4.jar \
+ https://repo1.maven.org/maven2/org/xerial/sqlite-jdbc/3.36.0.3/sqlite-jdbc-3.36.0.3.jar \
+ https://repo1.maven.org/maven2/io/trino/trino-jdbc/377/trino-jdbc-377.jar \
+ && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
+
+ARG version=2.1.0-SNAPSHOT
+COPY target/clickhouse-jdbc-bridge-${version}-shaded.jar /app/clickhouse-jdbc-bridge-shaded.jar
+
+RUN chmod +x $JDBC_BRIDGE_HOME/*.sh \
+ && mkdir -p $JDBC_BRIDGE_HOME/logs /usr/local/lib/java \
+ && ln -s $JDBC_BRIDGE_HOME/logs /var/log/clickhouse-jdbc-bridge \
+ && ln -s $JDBC_BRIDGE_HOME /etc/clickhouse-jdbc-bridge \
+ && ln -s $JDBC_BRIDGE_HOME/clickhouse-jdbc-bridge-shaded.jar /usr/local/lib/java/clickhouse-jdbc-bridge-shaded.jar
+
+EXPOSE 9019
+
+VOLUME ["${JDBC_BRIDGE_HOME}/drivers", "${JDBC_BRIDGE_HOME}/extensions", "${JDBC_BRIDGE_HOME}/logs", "${JDBC_BRIDGE_HOME}/scripts"]
+
+CMD "./docker-entrypoint.sh"