blob: c244b57eae6cc0de8f793ad8b2a5b1671143422b [file] [log] [blame]
#!/bin/bash
#
# @@@ START COPYRIGHT @@@
#
# 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.
#
# @@@ END COPYRIGHT @@@
#
# update_sql - SQ Script to update sql/sqlmx (or a supplied directory) to all nodes.
# $TRAF_HOME should be sourced from sqenv.sh prior to running this script.
#
function Usage {
echo
echo "Usage: $0 {-q | -i <directory> }"
echo
echo "-q Perform some operations quietly"
echo "-i Directory to copy/update from the current node to the same location on all nodes"
echo
exit 1
}
function GetOpts {
while getopts "qhi:" arg
do
case $arg in
q)
SQ_QUIET=1;
;;
i)
SQ_COPY_FROM=${OPTARG};
;;
h)
Usage;
exit 1;
;;
*)
Usage;
exit 1;
;;
esac
done
}
######################################
### MAIN portion of script begins here
######################################
# Set default values
declare -i SQ_QUIET=0
TMPDIR=/hptc_cluster/$USER/TmpSQLCopyDir
MY_NODES_PRM=" -a "
if [ -n "$MY_NODES" ];then
MY_NODES_PRM=$MY_NODES
fi
# Parse command line options
GetOpts $@
# Default is to copy SQL files from current nodes sql/sqlmx if a -i dir isn't supplied
if [ -z $SQ_COPY_FROM ]; then
SQ_COPY_FROM=$TRAF_HOME/sql/sqlmx
if [ -e $TRAF_HOME ]; then
SQ_COPY_TO=$TRAF_HOME/sql/sqlmx
else
echo
echo "Error - TRAF_HOME env variable does not exist."
echo " Source sqenv.sh and retry $0. Exiting..."
echo
exit 2
fi
else
SQ_COPY_TO=$SQ_COPY_FROM
fi
# Validate from path
if [ ! -d $SQ_COPY_FROM ]; then
echo
echo "Error - Copy directory $SQ_COPY_FROM (-i) does not exist. Exiting..."
echo
exit 3
fi
if [ $SQ_QUIET '==' 0 ]; then
echo
echo "Updating $SQ_COPY_TO on all nodes"
echo "with files from $SQ_COPY_FROM on the current node (`uname -n`)."
echo
echo -n "Do you want to continue with the update (Enter n to quit, Any other key to update)?: "
read ans
else
ans="y"
fi
if [[ $ans == "n" ]]; then
echo
echo "Not updating the SQ installation on the nodes of the cluster."
exit 4
fi
if [ ! -d $TMPDIR ]; then
echo
echo "Creating $TMPDIR temp copy location..."
mkdir -p $TMPDIR
if [[ $? != 0 ]]; then
echo
echo "Error creating $TMPDIR. Exiting..."
exit 5;
fi
fi
# In order to copy across all nodes, the files must first be sent to a staging
# area that is mounted on all nodes. In this case /hptc_cluster/<user>. Not sure
# if this will exist on customer systems(?).
echo
echo "Copying $SQ_COPY_FROM/* to temp copy location ($TMPDIR)..."
cp -R $SQ_COPY_FROM/* $TMPDIR 2>&1
if [[ $? != 0 ]]; then
echo
echo "Error copying to $TMPDIR. Exiting..."
exit 6;
fi
echo
echo "Updating all nodes..."
# Create the dir on ALL nodes if it doesn't exist
# The original -x 'uname -a' actually dones not work
$PDSH $MY_NODES_PRM $PDSH_SSH_CMD mkdir -p $SQ_COPY_TO
if [[ $? != 0 ]]; then
echo
echo "Error creating $SQ_COPY_TO. Exiting..."
exit 7;
fi
$PDSH $MY_NODES_PRM $PDSH_SSH_CMD cp -R $TMPDIR/* $SQ_COPY_TO
if [[ $? != 0 ]]; then
echo
echo "Error copying to $SQ_COPY_TO on each node. Exiting..."
exit 8;
fi
if [ -d $TMPDIR ]; then
echo
echo "Removing $TMPDIR temp copy location..."
rm -rf $TMPDIR
if [[ $? != 0 ]]; then
echo
echo "Error removing $TMPDIR. Exiting..."
exit 9;
fi
fi
echo
echo "Done with the copy of $SQ_COPY_FROM to $SQ_COPY_TO on each node"
echo