#!/bin/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. set -e getConfPath() { cluster_conf_base=/tmp/conf/druid/cluster case "$1" in _common) echo $cluster_conf_base/_common ;; historical) echo $cluster_conf_base/data/historical ;; historical-for-query-error-test) echo $cluster_conf_base/data/historical ;; middleManager) echo $cluster_conf_base/data/middleManager ;; indexer) echo $cluster_conf_base/data/indexer ;; coordinator) echo $cluster_conf_base/master/coordinator ;; broker) echo $cluster_conf_base/query/broker ;; router) echo $cluster_conf_base/query/router ;; overlord) echo $cluster_conf_base/master/overlord ;; *) echo $cluster_conf_base/misc/$1 ;; esac } # Delete the old key (if existing) and append new key=value setKey() { service="$1" key="$2" value="$3" service_conf=$(getConfPath $service)/runtime.properties # Delete from all sed -ri "/$key=/d" $COMMON_CONF_DIR/common.runtime.properties [ -f $service_conf ] && sed -ri "/$key=/d" $service_conf [ -f $service_conf ] && echo "$key=$value" >>$service_conf [ -f $service_conf ] || echo "$key=$value" >>$COMMON_CONF_DIR/common.runtime.properties echo "Setting $key=$value in $service_conf" } setupConfig() { echo "$(date -Is) configuring service $DRUID_SERVICE" # We put all the config in /tmp/conf to allow for a # read-only root filesystem mkdir -p /tmp/conf/druid COMMON_CONF_DIR=$(getConfPath _common) SERVICE_CONF_DIR=$(getConfPath ${DRUID_SERVICE}) mkdir -p $COMMON_CONF_DIR mkdir -p $SERVICE_CONF_DIR touch $COMMON_CONF_DIR/common.runtime.properties touch $SERVICE_CONF_DIR/runtime.properties setKey $DRUID_SERVICE druid.host $(resolveip -s $HOSTNAME) setKey $DRUID_SERVICE druid.worker.ip $(resolveip -s $HOSTNAME) # Write out all the environment variables starting with druid_ to druid service config file # This will replace _ with . in the key env | grep ^druid_ | while read evar; do # Can't use IFS='=' to parse since var might have = in it (e.g. password) val=$(echo "$evar" | sed -e 's?[^=]*=??') var=$(echo "$evar" | sed -e 's?^\([^=]*\)=.*?\1?g' -e 's?_?.?g') setKey $DRUID_SERVICE "$var" "$val" done } setupData() { # The "query" and "security" test groups require data to be setup before running the tests. # In particular, they requires segments to be download from a pre-existing s3 bucket. # This is done by using the loadSpec put into metadatastore and s3 credientials set below. if [ "$DRUID_INTEGRATION_TEST_GROUP" = "query" ] || [ "$DRUID_INTEGRATION_TEST_GROUP" = "query-retry" ] || [ "$DRUID_INTEGRATION_TEST_GROUP" = "query-error" ] || [ "$DRUID_INTEGRATION_TEST_GROUP" = "high-availability" ] || [ "$DRUID_INTEGRATION_TEST_GROUP" = "security" ] || [ "$DRUID_INTEGRATION_TEST_GROUP" = "ldap-security" ] || [ "$DRUID_INTEGRATION_TEST_GROUP" = "upgrade" ]; then # touch is needed because OverlayFS's copy-up operation breaks POSIX standards. See https://github.com/docker/for-linux/issues/72. find /var/lib/mysql -type f -exec touch {} \; && service mysql start \ && cat /test-data/${DRUID_INTEGRATION_TEST_GROUP}-sample-data.sql | mysql -u root druid && /etc/init.d/mysql stop # below s3 credentials needed to access the pre-existing s3 bucket setKey $DRUID_SERVICE druid.s3.accessKey AKIAT2GGLKKJQCMG64V4 setKey $DRUID_SERVICE druid.s3.secretKey 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 if [ "$DRUID_INTEGRATION_TEST_GROUP" = "query-retry" ] || [ "$DRUID_INTEGRATION_TEST_GROUP" = "query-error" ] || [ "$DRUID_INTEGRATION_TEST_GROUP" = "high-availability" ]; then setKey $DRUID_SERVICE druid.extensions.loadList [\"druid-s3-extensions\",\"druid-integration-tests\"] else setKey $DRUID_SERVICE druid.extensions.loadList [\"druid-s3-extensions\"] fi # The region of the sample data s3 blobs needed for these test groups export AWS_REGION=us-east-1 fi if [ "$MYSQL_DRIVER_CLASSNAME" != "com.mysql.jdbc.Driver" ] ; then setKey $DRUID_SERVICE druid.metadata.mysql.driver.driverClassName $MYSQL_DRIVER_CLASSNAME fi # The SqlInputSource tests in the "input-source" test group require data to be setup in MySQL before running the tests. if [ "$DRUID_INTEGRATION_TEST_GROUP" = "input-source" ] ; then # touch is needed because OverlayFS's copy-up operation breaks POSIX standards. See https://github.com/docker/for-linux/issues/72. find /var/lib/mysql -type f -exec touch {} \; && service mysql start \ && echo "GRANT ALL ON sqlinputsource.* TO 'druid'@'%'; CREATE database sqlinputsource DEFAULT CHARACTER SET utf8mb4;" | mysql -u root druid \ && cat /test-data/sql-input-source-sample-data.sql | mysql -u root druid \ && /etc/init.d/mysql stop fi }