mirror of https://github.com/apache/druid.git
151 lines
5.0 KiB
Bash
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
|