#!/bin/bash

BIGTOP_DEFAULTS_DIR=${BIGTOP_DEFAULTS_DIR-/etc/default}
[ -n "${BIGTOP_DEFAULTS_DIR}" -a -r ${BIGTOP_DEFAULTS_DIR}/solr ] && . ${BIGTOP_DEFAULTS_DIR}/solr

# Autodetect JAVA_HOME if not defined
. /usr/lib/bigtop-utils/bigtop-detect-javahome

# resolve links - $0 may be a softlink
PRG="${BASH_SOURCE[0]}"

while [ -h "${PRG}" ]; do
  ls=`ls -ld "${PRG}"`
  link=`expr "$ls" : '.*-> \(.*\)$'`
  if expr "$link" : '/.*' > /dev/null; then
    PRG="$link"
  else
    PRG=`dirname "${PRG}"`/"$link"
  fi
done

BASEDIR=`dirname ${PRG}`
BASEDIR=`cd ${BASEDIR}/..;pwd`

SOLR_PORT=${SOLR_PORT:-8983}
SOLR_ADMIN_PORT=${SOLR_ADMIN_PORT:-8984}
SOLR_LOG=${SOLR_LOG:-/var/log/solr}
SOLR_HOME=${SOLR_HOME:-/var/lib/solr}
SOLR_LOG4J_CONFIG=${SOLR_LOG4J_CONFIG:-/etc/solr/conf/log4j.properties}

export CATALINA_TMPDIR=${SOLR_DATA:-/var/lib/solr/}
export CATALINA_PID=${SOLR_RUN:-/var/run/solr}/solr.pid
export CATALINA_OUT=${SOLR_LOG:-/var/log/solr}/solr.out

export CATALINA_HOME=${CATALINA_HOME:-$BASEDIR/../bigtop-tomcat}
export CATALINA_BASE=${CATALINA_BASE:-$CATALINA_TMPDIR/tomcat-deployment}


die() {
  echo "$@" >&2
  exit 1
}

# Preflight checks:
# 1. We are only supporting SolrCloud mode
if [ -z "$SOLR_ZK_ENSEMBLE" ] ; then
  die "Error: SOLR_ZK_ENSEMBLE is not set in /etc/default/solr"
fi

CATALINA_OPTS="${CATALINA_OPTS} -DzkHost=${SOLR_ZK_ENSEMBLE} -Dsolr.solrxml.location=zookeeper"

if [ -n "$SOLR_HDFS_HOME" ] ; then
  CATALINA_OPTS="${CATALINA_OPTS} -Dsolr.hdfs.home=${SOLR_HDFS_HOME}"
fi

if [ -n "$SOLR_HDFS_CONFIG" ] ; then
  CATALINA_OPTS="${CATALINA_OPTS} -Dsolr.hdfs.confdir=${SOLR_HDFS_CONFIG}"
fi

if [ "$SOLR_KERBEROS_ENABLED" == "true" ] ; then
  CATALINA_OPTS="${CATALINA_OPTS} -Dsolr.hdfs.security.kerberos.enabled=${SOLR_KERBEROS_ENABLED}"
fi

if [ -n "$SOLR_KERBEROS_KEYTAB" ] ; then
  CATALINA_OPTS="${CATALINA_OPTS} -Dsolr.hdfs.security.kerberos.keytabfile=${SOLR_KERBEROS_KEYTAB}"
fi

if [ -n "$SOLR_KERBEROS_PRINCIPAL" ] ; then
  CATALINA_OPTS="${CATALINA_OPTS} -Dsolr.hdfs.security.kerberos.principal=${SOLR_KERBEROS_PRINCIPAL}"
fi

if [ -n "$SOLR_AUTHENTICATION_TYPE" ] ; then
  CATALINA_OPTS="${CATALINA_OPTS} -Dsolr.authentication.type=${SOLR_AUTHENTICATION_TYPE}"
fi

if [ -n "$SOLR_AUTHENTICATION_KERBEROS_KEYTAB" ] ; then
  CATALINA_OPTS="${CATALINA_OPTS} -Dsolr.authentication.kerberos.keytab=${SOLR_AUTHENTICATION_KERBEROS_KEYTAB}"
fi

if [ -n "$SOLR_AUTHENTICATION_KERBEROS_PRINCIPAL" ] ; then
  CATALINA_OPTS="${CATALINA_OPTS} -Dsolr.authentication.kerberos.principal=${SOLR_AUTHENTICATION_KERBEROS_PRINCIPAL}"
fi

if [ -n "$SOLR_AUTHENTICATION_KERBEROS_NAME_RULES" ] ; then
  CATALINA_OPTS="${CATALINA_OPTS} -Dsolr.authentication.kerberos.name.rules=${SOLR_AUTHENTICATION_KERBEROS_NAME_RULES}"
fi

if [ -n "$SOLR_AUTHENTICATION_SIMPLE_ALLOW_ANON" ] ; then
  CATALINA_OPTS="${CATALINA_OPTS} -Dsolr.authentication.simple.anonymous.allowed=${SOLR_AUTHENTICATION_SIMPLE_ALLOW_ANON}"
fi

if [ -n "$SOLR_AUTHENTICATION_JAAS_CONF" ] ; then
  CATALINA_OPTS="${CATALINA_OPTS} -Djava.security.auth.login.config=${SOLR_AUTHENTICATION_JAAS_CONF}"
fi

# FIXME: we need to set this because of the jetty-centric default solr.xml
CATALINA_OPTS="${CATALINA_OPTS} -Dhost=$HOSTNAME -Djetty.port=$SOLR_PORT"

export CATALINA_OPTS="${CATALINA_OPTS} -Dsolr.host=$HOSTNAME
                                        -Dsolr.port=$SOLR_PORT
                                        -Dlog4j.configuration=file://$SOLR_LOG4J_CONFIG
                                        -Dsolr.log=$SOLR_LOG
                                        -Dsolr.admin.port=$SOLR_ADMIN_PORT
                                        -Dsolr.solr.home=$SOLR_HOME"

#  catalina doesn't use CATALINA_OPTS for stop action so we need to 
# set JAVA_OPTS to include the admin port
if [ $1 = "stop" ] ; then
    export JAVA_OPTS="$CATALINA_OPTS"
fi

if [ -x /usr/lib/bigtop-utils/bigtop-monitor-service ]; then
if ([ "$1" = "start" -o "$1" = "run" ]) && [ -n "$SOLRD_WATCHDOG_TIMEOUT" ] ; then
  /usr/lib/bigtop-utils/bigtop-monitor-service $SOLRD_WATCHDOG_TIMEOUT $$ http://127.0.0.1:8983/solr
fi
fi

exec ${CATALINA_HOME}/bin/catalina.sh "$@"
