#!/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.
#
#--------------------------------------------------------------------------------
#
# run Apache MRQL in BSP mode using Apache Hama
#
#--------------------------------------------------------------------------------

MRQL_HOME=$(dirname $(readlink -f $0))/..

. $MRQL_HOME/conf/mrql-env.sh

GEN_JAR=$(readlink -f $MRQL_HOME/lib/mrql-gen-*.jar)
CORE_JAR=$(readlink -f $MRQL_HOME/lib/mrql-core-*.jar)
BSP_JAR=$(readlink -f $MRQL_HOME/lib/mrql-bsp-*.jar)


export JAVA_HOME FS_DEFAULT_NAME BSP_MASTER_ADDRESS HAMA_ZOOKEEPER_QUORUM

if [ "$1" == "-local" ]; then
   LIBJARS=$CUP_JAR,$JLINE_JAR,$GEN_JAR,$CORE_JAR,$BSP_JAR
   export HAMA_CLASSPATH=$CUP_JAR:$JLINE_JAR:$CORE_JAR:$GEN_JAR:$BSP_JAR
   $HAMA_HOME/bin/hama jar $BSP_JAR org.apache.mrql.Main -libjars $LIBJARS -bsp $*
else if [ "$1" == "-dist" ]; then
   # Hama distributed mode -libjars has a bug; create a single jar instead
   mkdir -p $MRQL_HOME/tmp/classes
   pushd $MRQL_HOME/tmp/classes >/dev/null
   $JAVA_HOME/bin/jar xf $CUP_JAR
   $JAVA_HOME/bin/jar xf $JLINE_JAR
   $JAVA_HOME/bin/jar xf $GEN_JAR
   $JAVA_HOME/bin/jar xf $CORE_JAR
   $JAVA_HOME/bin/jar xf $BSP_JAR
   cd ..
   $JAVA_HOME/bin/jar cf mrql-bsp.jar -C classes/ .
   popd >/dev/null
   $HAMA_HOME/bin/hama jar $MRQL_HOME/tmp/mrql-bsp.jar org.apache.mrql.Main -bsp $*
else
   HAMA_CLASSPATH=$CUP_JAR:$JLINE_JAR:$GEN_JAR:$CORE_JAR:$BSP_JAR:$HAMA_JAR:$HADOOP_JARS
   $JAVA_HOME/bin/java -classpath $HAMA_CLASSPATH org.apache.mrql.Main -bsp $*
fi
fi
