blob: cbc610f4628cb12ae50e36685f52a2ea0704ab15 [file] [log] [blame]
#!/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.
# This script executes all hive metastore upgrade scripts on an specific
# database server in order to verify that upgrade scripts are working
# properly.
set -e
cd $(dirname $0)
usage() {
echo "Usage: "
echo " $0 --db DB_SERVER"
echo
echo "Options"
echo " --db DB_SERVER Specifies a database server where to run the"
echo " upgrade tests."
echo
}
if [ $# != 2 ]; then
usage && exit 1
fi
if [ $1 != "--db" ]; then
echo "Error: unrecognized $1 option."
echo
usage && exit 1
fi
#
# These tests work by calling special commands from specific
# servers that are stored as scripts in a directory name
# related to the server to test.
#
OUT_LOG="/tmp/$(basename $0).log"
rm -f $OUT_LOG
log() {
echo $@
echo $@ >> $OUT_LOG
}
DB_SERVER="$2"
if [ ! -d "dbs/$DB_SERVER" ]; then
log "Error: $DB_SERVER upgrade tests is not supported yet."
echo
echo "You must select from any of the following tests:"
ls dbs/
exit 1
fi
SCRIPT_PREPARE="$(pwd)/dbs/$DB_SERVER/prepare.sh"
SCRIPT_EXECUTE="$(pwd)/dbs/$DB_SERVER/execute.sh"
SCRIPT_VALIDATE="$(pwd)/metastore-validation-test.sh"
DATA_VALIDATE="$(pwd)/dbs/$DB_SERVER/validate.sh"
[ ! -e "$SCRIPT_PREPARE" ] && log "Error: $SCRIPT_PREPARE does not exist." && exit 1
[ ! -e "$SCRIPT_EXECUTE" ] && log "Error: $SCRIPT_EXECUTE does not exist." && exit 1
[ ! -e "$SCRIPT_VALIDATE" ] && log "Error: $SCRIPT_VALIDATE does not exist." && exit 1
[ ! -e "$DATA_VALIDATE" ] && log "Error: $DATA_VALIDATE does not exist." && exit 1
HMS_UPGRADE_DIR="$(pwd)/../../metastore/scripts/upgrade"
if [ ! -d "$HMS_UPGRADE_DIR/$DB_SERVER" ]; then
log "Error: $DB_SERVER upgrade scripts are not found on $HMS_UPGRADE_DIR."
exit 1
fi
#
# Before running any test, we need to prepare the environment.
# This is done by calling the prepare script. This script must
# install, configure and start the database server where to run
# the upgrade script.
#
log "Calling $SCRIPT_PREPARE ..."
if ! bash -e -x $SCRIPT_PREPARE; then
log "Error: $SCRIPT_PREPARE failed. (see logs)"
exit 1
fi
log "Server prepared."
log "Calling metastore data generation script ..."
if ! bash -e $SCRIPT_VALIDATE --db $DB_SERVER; then
log "Error: $SCRIPT_VALIDATE failed. (see logs)"
exit 1
fi
log "Test scripts generated."
#
# Now we execute each of the .sql scripts on the database server.
#
execute_test() {
log "Executing sql test: $DB_SERVER/$(basename $1)"
if ! bash -x -e $SCRIPT_EXECUTE $1; then
log "Test failed: $DB_SERVER/$(basename $1)"
return 1
fi
}
VERSION_BASE="0.10.0"
HIVE_SCHEMA_BASE="$HMS_UPGRADE_DIR/$DB_SERVER/hive-schema-$VERSION_BASE.$DB_SERVER.sql"
if [ ! -f $HIVE_SCHEMA_BASE ]; then
log "Error: $HIVE_SCHEMA_BASE is not found."
exit 1
fi
log "Calling $SCRIPT_EXECUTE ..."
if ! execute_test $HIVE_SCHEMA_BASE; then
echo "Error: Cannot execute SQL file: $HIVE_SCHEMA_BASE"
fi
bash -e $DATA_VALIDATE $HIVE_SCHEMA_BASE
success=$?
if [[ "$success" != 0 ]];
then
echo "Data verification failed!!!"
exit $success;
else
echo "Data verification successful!!!"
fi
begin_upgrade_test="false"
while read script
do
if [ $begin_upgrade_test = "true" ] || echo upgrade-$script | grep "upgrade-$VERSION_BASE"; then
begin_upgrade_test="true"
if ! execute_test $HMS_UPGRADE_DIR/$DB_SERVER/upgrade-$script.$DB_SERVER.sql; then
echo "Error: Cannot execute SQL file: $HMS_UPGRADE_DIR/$DB_SERVER/upgrade-$script.$DB_SERVER.sql"
fi
bash -e $DATA_VALIDATE $HMS_UPGRADE_DIR/$DB_SERVER/upgrade-$script.$DB_SERVER.sql
success=$?;
if [[ $success != 0 ]];
then
echo "Data verification failed!!!"
exit $success;
fi
fi
done < $HMS_UPGRADE_DIR/$DB_SERVER/upgrade.order.$DB_SERVER
log "Tests executed."