druid/integration-tests-ex/image/docker/launch.sh

151 lines
5.0 KiB
Bash

#! /usr/bin/env bash
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#-------------------------------------------------------------------------
# Launch script which runs inside the container to set up configuration
# and then launch Druid itself.
# Fail fast on any error
set -e
# Enable for debugging
#set -x
# Dump the environment for debugging. Also done later to the log.
#env
# Launch Druid within the container.
cd /
# Where things are located
SHARED_DIR=/shared
LOG_DIR=$SHARED_DIR/logs
DRUID_HOME=/usr/local/druid
# Allow test-specific extensions in the /shared/extensions directory.
# If that directory exists (it won't for most tests), add it to the
# extensions path, using a feature in Druid 26 or later.
# For maximum flexibility, don't overwrite the extensions path if
# it is set.
TEST_EXTN_DIR=$SHARED_DIR/extensions
if [ -d $TEST_EXTN_DIR ]; then
if [ -z "$druid_extensions_path" ]; then
export druid_extensions_path="[\"${TEST_EXTN_DIR}\"]"
else
echo "Extension directory $TEST_EXTN_DIR found, and druid_extensions_path={$druid_extensions_path} -- not setting path automatically"
fi
fi
# TODO: enable only for security-related tests?
#/tls/generate-server-certs-and-keystores.sh
# The image contains both the MySQL and MariaDB JDBC drivers.
# The MySQL driver is selected by the Docker Compose file.
# Set druid.metadata.mysql.driver.driverClassName to the preferred
# driver.
if [ -n "$MYSQL_DRIVER_CLASSNAME" ]; then
export druid_metadata_mysql_driver_driverClassName="$MYSQL_DRIVER_CLASSNAME"
fi
# Test-specific way to define extensions. Compose defines two test-specific
# variables. We combine these to create the final form converted to a property.
if [ -n "$druid_extensions_loadList" ]; then
echo "Using the provided druid_extensions_loadList=$druid_extensions_loadList"
else
mkdir -p /tmp/conf
EXTNS_FILE=/tmp/conf/extns
echo $druid_standard_loadList | tr "," "\n" > $EXTNS_FILE
if [ -n "$druid_test_loadList" ]; then
echo $druid_test_loadList | tr "," "\n" >> $EXTNS_FILE
fi
druid_extensions_loadList="["
delim=""
while read -r line; do
druid_extensions_loadList="$druid_extensions_loadList$delim\"$line\""
delim=","
done < $EXTNS_FILE
export druid_extensions_loadList="${druid_extensions_loadList}]"
unset druid_standard_loadList
unset druid_test_loadList
rm $EXTNS_FILE
echo "Effective druid_extensions_loadList=$druid_extensions_loadList"
fi
# Create druid service config files with all the config variables
. /druid.sh
setupConfig
# Export the service config file path to use in supervisord conf file
DRUID_SERVICE_CONF_DIR="$(. /druid.sh; getConfPath ${DRUID_SERVICE})"
# Export the common config file path to use in supervisord conf file
DRUID_COMMON_CONF_DIR="$(. /druid.sh; getConfPath _common)"
# For multiple nodes of the same type to create a unique name
INSTANCE_NAME=$DRUID_SERVICE
if [ -n "$DRUID_INSTANCE" ]; then
INSTANCE_NAME=${DRUID_SERVICE}-$DRUID_INSTANCE
fi
# Assemble Java options
JAVA_OPTS="$DRUID_SERVICE_JAVA_OPTS $DRUID_COMMON_JAVA_OPTS -XX:HeapDumpPath=$LOG_DIR/$INSTANCE_NAME $DEBUG_OPTS"
LOG4J_CONFIG=$SHARED_DIR/resources/log4j2.xml
if [ -f $LOG4J_CONFIG ]; then
JAVA_OPTS="$JAVA_OPTS -Dlog4j.configurationFile=$LOG4J_CONFIG"
fi
# The env-to-config scripts creates a single config file.
# The common one is empty, but Druid still wants to find it,
# so we add it to the class path anyway.
CP=$DRUID_COMMON_CONF_DIR:$DRUID_SERVICE_CONF_DIR:${DRUID_HOME}/lib/\*
if [ -n "$DRUID_CLASSPATH" ]; then
CP=$CP:$DRUID_CLASSPATH
fi
HADOOP_XML=$SHARED_DIR/hadoop-xml
if [ -d $HADOOP_XML ]; then
CP=$HADOOP_XML:$CP
fi
# For jar files
EXTRA_LIBS=$SHARED_DIR/lib
if [ -d $EXTRA_LIBS ]; then
CP=$CP:${EXTRA_LIBS}/\*
fi
# For resources on the class path
EXTRA_RESOURCES=$SHARED_DIR/resources
if [ -d $EXTRA_RESOURCES ]; then
CP=$CP:$EXTRA_RESOURCES
fi
# For easier debugging, dump the environment and runtime.properties
# to the log.
LOG_FILE=$LOG_DIR/${INSTANCE_NAME}.log
echo "" >> $LOG_FILE
echo "--- env ---" >> $LOG_FILE
env >> $LOG_FILE
echo "--- runtime.properties ---" >> $LOG_FILE
cat $DRUID_SERVICE_CONF_DIR/*.properties >> $LOG_FILE
echo "---" >> $LOG_FILE
echo "" >> $LOG_FILE
# Run Druid service
cd $DRUID_HOME
exec bin/run-java $JAVA_OPTS -cp $CP \
org.apache.druid.cli.Main server $DRUID_SERVICE \
>> $LOG_FILE 2>&1