#!/bin/sh
# A couple of examples how this script may be invoked:
#  $ FileCopyUtil --hadoop.home /hadoop/apache/hadoop-0.20.205.0 --copyFromLocal /hadooplogs/tmp/sorted_id_1MB.seq hdfs://psrhadvnn1/user/pdas/sorted_id_1MB.seq
#
#  $ FileCopyUtil --debug --hadoop.home /hadoop/apache/hadoop-0.20.205.0 --copyFromLocal /hadooplogs/tmp/sorted_id_1MB.seq hdfs://psrhadvnn1/user/pdas/sorted_id_1MB.seq
#
# This script depends on java native code for Snappy compression library. If
# Snappy compression library is not already integrated with the installed
# Hadoop version, the java CLASSPATH should specify a jar containing the
# class org.apache.hadoop.io.compress.SnappyCodec. This script honors
# HADOOP_CLASSPATH environment variable.
#
# The native library for Snappy compression needs to be available in one
# of the directories specified via LD_LIBRARY_PATH (or its equivalent) in
# this script.
#
while [ $# -gt 0 ]; do
  case "$1" in
    --debug)
      DEBUG=true
      shift
      ;;
    --hadoop.home)
      shift
      export INFA_HADOOP_DIST_DIR=$1
      shift
      ;;
    *)
      break
      ;;
  esac
done

if [ -z "${INFA_RESOURCES}" ]; then
    echo "The INFA_RESOURCES variable is not set.."
    exit 1;
fi

export INFA_HOME_BIN=${INFA_RESOURCES}

case `uname` in
          SunOS)
            LD_LIBRARY_PATH=${INFA_HOME_BIN}:${LD_LIBRARY_PATH}
                export LD_LIBRARY_PATH
                ;;
          Linux)
                LD_LIBRARY_PATH=${INFA_HOME_BIN}:${LD_LIBRARY_PATH}:${INFA_HADOOP_DIST_DIR}/lib/native
                export LD_LIBRARY_PATH
                ;;
          AIX)
                LIBPATH=${INFA_HOME_BIN}:${LIBPATH}
                export LIBPATH
                ;;
          HP-UX)
                SHLIB_PATH=${INFA_HOME_BIN}:${SHLIB_PATH}
                export SHLIB_PATH
                ;;
esac

if [ -z "${INFA_HADOOP_DIST_DIR}" ]; then
  echo "Error: INFA_HADOOP_DIST_DIR variable is not set while invoking the script."
  exit 100;
fi

if [ -d ${INFA_HADOOP_DIST_DIR} ]; then
  for j in ${INFA_HADOOP_DIST_DIR}/lib/hadoop-*.jar; do
    HADOOP_CORE_JAR=$j:${HADOOP_CORE_JAR}
  done
fi

# Use JAVA_HOME if it is set to invoke java
JAVA=java
if [ "$JAVA_HOME" != "" ]; then
  JAVA=$JAVA_HOME/bin/java
fi

#set java.library.path for native-hadoop code; required for snappy compression
# This piece of code is copied from 'hadoop' script with slight modification.
setup_hadoop_java_library_path(){
  JAVA_LIBRARY_PATH=''
  if [ -d "${INFA_HADOOP_DIST_DIR}/build/native" -o -d "${INFA_HADOOP_DIST_DIR}/lib/native" -o -e "${HADOOP_PREFIX}/lib/libhadoop.a" ]; then
    JAVA_PLATFORM=`CLASSPATH=${HADOOP_CORE_JAR} ${JAVA} -Xmx32m ${HADOOP_JAVA_PLATFORM_OPTS} org.apache.hadoop.util.PlatformName | sed -e "s/ /_/g"`
  
    if [ "$JAVA_PLATFORM" = "Linux-amd64-64" ]; then
      JSVC_ARCH="amd64"
    else
      JSVC_ARCH="i386"
    fi
  
    if [ -d "$INFA_HADOOP_DIST_DIR/build/native" ]; then
      JAVA_LIBRARY_PATH=${INFA_HADOOP_DIST_DIR}/build/native/${JAVA_PLATFORM}/lib
    fi
  
    if [ -d "${INFA_HADOOP_DIST_DIR}/lib/native" ]; then
      if [ "x$JAVA_LIBRARY_PATH" != "x" ]; then
        JAVA_LIBRARY_PATH=${JAVA_LIBRARY_PATH}:${INFA_HADOOP_DIST_DIR}/lib/native/
      else
        JAVA_LIBRARY_PATH=${INFA_HADOOP_DIST_DIR}/lib/native/
      fi
    fi
  
    if [ -e "${HADOOP_PREFIX}/lib/libhadoop.a" ]; then
      JAVA_LIBRARY_PATH=${HADOOP_PREFIX}/lib
    fi
  fi

}

setup_hadoop_java_library_path

# run the script file to get the user specified classpath
HDP_CLASSPATH=`${INFA_HADOOP_DIST_DIR}/scripts/infahadooputil --getclasspath`
exitCode=$?

if [[ $exitCode != 0 ]] ; then
  echo "HDP_CLASSPATH = ${HDP_CLASSPATH}"
  exit $exitCode
fi

if [ "$DEBUG" ]; then
  echo "HDP_CLASSPATH = ${HDP_CLASSPATH}"
fi

CLASSPATH=${INFA_HADOOP_DIST_DIR}/infaLib/hive2.1.0-infa-plugins.jar:${HADOOP_CLASSPATH}:${HDP_CLASSPATH}

#-Dhadoop.policy.file=hadoop-policy.xml
RUNCLASS=com.informatica.platform.dtm.executor.hadoop.shellcmd.FileCopyUtil

HADOOP_LOG_OPTION='-Dhadoop.root.logger=INFO,console'
LOG_OPTION="${HADOOP_LOG_OPTION} -Dlog4j.configuration=file:${INFA_HOME_BIN}/../hadoop/log4j.properties"

COMMAND="${JAVA} -classpath $CLASSPATH -Dhadoop.home.dir=$INFA_HADOOP_DIST_DIR $LOG_OPTION -Djava.library.path=$JAVA_LIBRARY_PATH ${JAVA_OPTS} $RUNCLASS $@"

if [ "$DEBUG" ]; then
  echo ${COMMAND}
  begin1=`date`
  echo $begin1
fi

# run the command and save the exit code
${COMMAND}
exitCode=$?

if [ "$DEBUG" ]; then
  end1=`date`
  echo $end1
  begin2=`date --date="$begin1" +%s`
  end2=`date --date="$end1" +%s`
  echo "Total elapsed time=" $(($end2 - $begin2)) "seconds"
fi

exit ${exitCode}

