#!/bin/bash

SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
. $SCRIPT_DIR/common.sh "$@"

export SPARK_VERSION=2.2.0

echo " - Copying spark-mesos-shuffle-service systemd file"
sudo cp $SCRIPT_DIR/utils/spark-mesos-shuffle-service.service /lib/systemd/system/
sudo chmod 644 /lib/systemd/system/spark-mesos-shuffle-service.service

echo " - Checking Systemd file"
if [[ `systemctl status spark-mesos-shuffle-service | grep 'could not be found'` != "" ]]; then
    echo "spark-mesos-shuffle-service systemd file installation failed"
    exit -12
fi
sudo systemctl status spark-mesos-shuffle-service > /tmp/spark_install_log 2>&1
if [[ $? != 0 && $? != 3 ]]; then
    echo "spark-mesos-shuffle-service systemd file doesn't work as expected"
    exit -12
fi 


echo " - Configuring dynamic allocation and external shuffle service"
sudo bash -c "echo -e \"\n# Configuring dynamic allocation\"  >> /usr/local/lib/spark-$SPARK_VERSION/conf/spark-defaults.conf"
sudo bash -c "echo -e \"# (See Spark configuration page online for more information)\"  >> /usr/local/lib/spark-$SPARK_VERSION/conf/spark-defaults.conf"
sudo bash -c "echo -e \"spark.dynamicAllocation.enabled=true\"  >> /usr/local/lib/spark-$SPARK_VERSION/conf/spark-defaults.conf"
sudo bash -c "echo -e \"#(Caution here : small values cause issues. I have executors killed with 10s for instance)\"  >> /usr/local/lib/spark-$SPARK_VERSION/conf/spark-defaults.conf"
sudo bash -c "echo -e \"spark.dynamicAllocation.executorIdleTimeout=120s\"  >> /usr/local/lib/spark-$SPARK_VERSION/conf/spark-defaults.conf"
sudo bash -c "echo -e \"spark.dynamicAllocation.cachedExecutorIdleTimeout=300s\"  >> /usr/local/lib/spark-$SPARK_VERSION/conf/spark-defaults.conf"

sudo bash -c "echo -e \"\n# Configuring spark shuffle service (required for dynamic allocation)\"  >> /usr/local/lib/spark-$SPARK_VERSION/conf/spark-defaults.conf"
sudo bash -c "echo -e \"spark.shuffle.service.enabled=true\"  >> /usr/local/lib/spark-$SPARK_VERSION/conf/spark-defaults.conf"


echo " - Creating start-spark-mesos-shuffle-service-wrapper.sh wrapper (changing name to start-mesos-shuffle-service-wrapper.sh)"
sudo cp $SCRIPT_DIR/utils/start-spark-mesos-shuffle-service-wrapper.sh /usr/local/lib/spark-$SPARK_VERSION/sbin/start-mesos-shuffle-service-wrapper.sh
sudo sed -i s/"XXX.XXX.XXX.XXX"/"$MASTER_IP"/g /usr/local/lib/spark-$SPARK_VERSION/sbin/start-mesos-shuffle-service-wrapper.sh
sudo chmod 755 /usr/local/lib/spark-$SPARK_VERSION/sbin/start-mesos-shuffle-service-wrapper.sh

echo " - Testing systemd startup - starting spark-mesos-shuffle-service"
sudo systemctl start spark-mesos-shuffle-service > /tmp/spark_install_log 2>&1
fail_if_error $? "/tmp/spark_install_log" -1

echo " - Testing systemd startup - Checking spark-mesos-shuffle-service startup"
sleep 8
sudo systemctl status spark-mesos-shuffle-service > /tmp/spark_install_log 2>&1
fail_if_error $? "/tmp/spark_install_log" -1

echo " - Testing systemd startup - stopping spark-mesos-shuffle-service"
sudo systemctl stop spark-mesos-shuffle-service > /tmp/spark_install_log 2>&1
fail_if_error $? "/tmp/spark_install_log" -1

echo " - Enabling spark-mesos-shuffle-service on startup"
sudo systemctl enable spark-mesos-shuffle-service > /tmp/spark_install_log 2>&1
fail_if_error $? "/tmp/spark_install_log" -1




