100 lines
3.8 KiB
Bash
Executable File
100 lines
3.8 KiB
Bash
Executable File
#!/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.
|
|
#
|
|
set -euo pipefail
|
|
|
|
DOCKER_FOLDER="./docker"
|
|
INIT_FLAG_FILE="init_complete"
|
|
GRAPH_CONF="./conf/graphs/hugegraph.properties"
|
|
|
|
mkdir -p "${DOCKER_FOLDER}"
|
|
|
|
log() { echo "[hugegraph-server-entrypoint] $*"; }
|
|
|
|
set_prop() {
|
|
local key="$1" val="$2" file="$3"
|
|
local esc_key esc_val
|
|
|
|
esc_key=$(printf '%s' "$key" | sed -e 's/[][(){}.^$*+?|\\/]/\\&/g')
|
|
esc_val=$(printf '%s' "$val" | sed -e 's/[&|\\]/\\&/g')
|
|
|
|
if grep -qE "^[[:space:]]*${esc_key}[[:space:]]*=" "${file}"; then
|
|
sed -ri "s|^([[:space:]]*${esc_key}[[:space:]]*=).*|\\1${esc_val}|" "${file}"
|
|
else
|
|
printf '%s=%s\n' "$key" "$val" >> "${file}"
|
|
fi
|
|
}
|
|
|
|
migrate_env() {
|
|
local old_name="$1" new_name="$2"
|
|
|
|
if [[ -n "${!old_name:-}" && -z "${!new_name:-}" ]]; then
|
|
log "WARN: deprecated env '${old_name}' detected; mapping to '${new_name}'"
|
|
export "${new_name}=${!old_name}"
|
|
fi
|
|
}
|
|
|
|
migrate_env "BACKEND" "HG_SERVER_BACKEND"
|
|
migrate_env "PD_PEERS" "HG_SERVER_PD_PEERS"
|
|
|
|
# ── Map env → properties file ─────────────────────────────────────────
|
|
[[ -n "${HG_SERVER_BACKEND:-}" ]] && set_prop "backend" "${HG_SERVER_BACKEND}" "${GRAPH_CONF}"
|
|
[[ -n "${HG_SERVER_PD_PEERS:-}" ]] && set_prop "pd.peers" "${HG_SERVER_PD_PEERS}" "${GRAPH_CONF}"
|
|
|
|
# ── Build wait-storage env ─────────────────────────────────────────────
|
|
WAIT_ENV=()
|
|
[[ -n "${HG_SERVER_BACKEND:-}" ]] && WAIT_ENV+=("hugegraph.backend=${HG_SERVER_BACKEND}")
|
|
[[ -n "${HG_SERVER_PD_PEERS:-}" ]] && WAIT_ENV+=("hugegraph.pd.peers=${HG_SERVER_PD_PEERS}")
|
|
|
|
# ── Init store (once) ─────────────────────────────────────────────────
|
|
if [[ ! -f "${DOCKER_FOLDER}/${INIT_FLAG_FILE}" ]]; then
|
|
if (( ${#WAIT_ENV[@]} > 0 )); then
|
|
env "${WAIT_ENV[@]}" ./bin/wait-storage.sh
|
|
else
|
|
./bin/wait-storage.sh
|
|
fi
|
|
|
|
if [[ -z "${PASSWORD:-}" ]]; then
|
|
log "init hugegraph with non-auth mode"
|
|
./bin/init-store.sh
|
|
else
|
|
log "init hugegraph with auth mode"
|
|
./bin/enable-auth.sh
|
|
echo "${PASSWORD}" | ./bin/init-store.sh
|
|
fi
|
|
touch "${DOCKER_FOLDER}/${INIT_FLAG_FILE}"
|
|
else
|
|
log "HugeGraph initialization already done. Skipping re-init..."
|
|
fi
|
|
|
|
./bin/start-hugegraph.sh -j "${JAVA_OPTS:-}" -t 120
|
|
|
|
# Post-startup cluster stabilization check (hstore only — rocksdb has no partitions)
|
|
ACTUAL_BACKEND=$(grep -E '^[[:space:]]*backend[[:space:]]*=' "${GRAPH_CONF}" | head -n 1 | sed 's/.*=//' | tr -d '[:space:]' || true)
|
|
if [[ "${ACTUAL_BACKEND}" == "hstore" ]]; then
|
|
STORE_REST="${STORE_REST:-store:8520}"
|
|
export STORE_REST
|
|
./bin/wait-partition.sh || log "WARN: partitions not assigned yet"
|
|
fi
|
|
|
|
PID=$(cat ./bin/pid 2>/dev/null || true)
|
|
if [[ -n "$PID" ]]; then
|
|
trap 'kill -TERM "$PID" 2>/dev/null; while kill -0 "$PID" 2>/dev/null; do sleep 1; done; exit 0' TERM INT
|
|
tail --pid="$PID" -f /dev/null
|
|
exit 1
|
|
fi
|