#!/bin/bash

# CONTROLLING STARTUP:
#
# This script relies on a few environment variables to determine startup
# behavior, those variables are:
#
#   ES_PATH_CONF -- Path to config directory
#   ES_JAVA_OPTS -- External Java Opts on top of the defaults set
#
# Optionally, exact memory values can be set using the `ES_JAVA_OPTS`. Note that
# the Xms and Xmx lines in the JVM options file must be commented out. Example
# values are "512m", and "10g".
#
#   ES_JAVA_OPTS="-Xms8g -Xmx8g" ./bin/elasticsearch

source "$(dirname "$0")"/elasticsearch-env

if [ -z "${ES_TMPDIR}" ]; then
  ES_TMPDIR=$("${JAVA}" -cp "${ES_CLASSPATH}" org.elasticsearch.tools.launchers.TempDirectory)
fi

ES_JVM_OPTIONS="${ES_PATH_CONF}"/jvm.options
ES_JAVA_OPTS_T=$(export ES_TMPDIR; "${JAVA}" -cp "$ES_CLASSPATH" org.elasticsearch.tools.launchers.JvmOptionsParser "${ES_JVM_OPTIONS}")
# Append ES_JAVA_OPTS set from elastic-env
ES_JAVA_OPTS="$ES_JAVA_OPTS $ES_JAVA_OPTS_T"

# manual parsing to find out, if process should be detached
if ! echo $* | grep -E '(^-d |-d$| -d |--daemonize$|--daemonize )' > /dev/null; then
  exec \
    "${JAVA}" \
    ${ES_JAVA_OPTS} \
    -Des.path.home="${ES_HOME}" \
    -Des.path.conf="${ES_PATH_CONF}" \
    -Des.distribution.flavor="${ES_DISTRIBUTION_FLAVOR}" \
    -Des.distribution.type="${ES_DISTRIBUTION_TYPE}" \
    -cp "${ES_CLASSPATH}" \
    org.elasticsearch.bootstrap.Elasticsearch \
    "$@"
else
  exec \
    "${JAVA}" \
    ${ES_JAVA_OPTS} \
    -Des.path.home="${ES_HOME}" \
    -Des.path.conf="${ES_PATH_CONF}" \
    -Des.distribution.flavor="${ES_DISTRIBUTION_FLAVOR}" \
    -Des.distribution.type="${ES_DISTRIBUTION_TYPE}" \
    -cp "${ES_CLASSPATH}" \
    org.elasticsearch.bootstrap.Elasticsearch \
    "$@" \
    <&- &
  retval=$?
  pid=$!
  [ $retval -eq 0 ] || exit $retval
  if [ -n "${ES_STARTUP_SLEEP_TIME}" ]; then
    sleep ${ES_STARTUP_SLEEP_TIME}
  fi
  if ! ps -p ${pid} > /dev/null ; then
    exit 1
  fi
  exit 0
fi

exit $?
