-
Notifications
You must be signed in to change notification settings - Fork 542
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Improved script for running with fuseki
The script will now clean up afterwards and use XDG_CACHE_HOME. It will also log fuseki's output if it failed to start or if something went wrong with tests. Also fix the way tests are skipped in test_dataset so they report as skipped.
- Loading branch information
Showing
3 changed files
with
196 additions
and
10 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,179 @@ | ||
#!/usr/bin/env bash | ||
|
||
# script_name="${0}" | ||
script_dirname="$( dirname -- "${0}" )" | ||
# script_basename="$( basename -- "${0}" )" | ||
|
||
set -eo pipefail | ||
|
||
wait_http_okay() { | ||
local timeout=15 | ||
for var in "${@}" | ||
do | ||
eval "local ${var}" | ||
done | ||
1>&2 echo "INFO: checking if ${url} (${label}) is okay" | ||
for ((i=1;i<=${timeout};i++)) | ||
do | ||
curl --silent "${url}" --fail -o /dev/null && { | ||
1>&2 echo "INFO: url ${url} (${label}) is okay" | ||
return 0 | ||
} | ||
kill -0 "${pid}" 2>/dev/null 1>&2 || { | ||
1>&2 echo "ERROR: pid ${pid} (${label}) not running anymore ..." | ||
return 1 | ||
} | ||
1>&2 echo "INFO: url ${url} (${label}) not okay, waiting ..." | ||
sleep 2 | ||
done | ||
1>&2 echo "ERROR: timed out trying to load ${url} (${label})" | ||
return 1 | ||
} | ||
|
||
assert_pid_running() { | ||
for var in "${@}" | ||
do | ||
eval "local ${var}" | ||
done | ||
|
||
kill -0 "${pid}" 2>/dev/null 1>&2 || { | ||
1>&2 echo "ERROR: pid ${pid} (${label}) not running anymore ..." | ||
return 1 | ||
} | ||
1>&2 echo "INFO: pid ${pid} (${label}) running" | ||
return 0 | ||
} | ||
|
||
kill_and_wait_pid() { | ||
local timeout=10 | ||
for var in "${@}" | ||
do | ||
eval "local ${var}" | ||
done | ||
1>&2 echo "INFO: killing pid ${pid} (${label})" | ||
kill "${pid}" | ||
for ((i=1;i<=${timeout};i++)) | ||
do | ||
kill -0 "${pid}" 2>/dev/null 1>&2 || { | ||
1>&2 echo "INFO: pid ${pid} (${label}) is dead " | ||
return 0 | ||
} | ||
1>&2 echo "INFO: pid ${pid} (${label}) is not dead, waiting ..." | ||
sleep 2 | ||
done | ||
1>&2 echo "ERROR: wait timeout for pid ${pid} (${label})" | ||
return 1 | ||
} | ||
|
||
fuseki_pid_normal="" | ||
fuseki_pid_tdb="" | ||
|
||
fuseki_log_normal="" | ||
fuseki_log_tdb="" | ||
|
||
exit_handler() { | ||
1>&2 declare -p fuseki_pid_normal fuseki_pid_tdb | ||
if [ -z "${FUSEKI_SKIP_SHUTDOWN}" ] | ||
then | ||
if [ -n "${fuseki_pid_normal}" ] | ||
then | ||
kill_and_wait_pid "pid=${fuseki_pid_normal}" "label=fuseki-normal" || : | ||
fi | ||
if [ -n "${fuseki_pid_tdb}" ] | ||
then | ||
kill_and_wait_pid "pid=${fuseki_pid_tdb}" "label=fuseki-tdb" || : | ||
fi | ||
else | ||
1>&2 echo "WARNING: not killing fuseki fuseki_pid_normal=${fuseki_pid_normal} fuseki_pid_tdb=${fuseki_pid_tdb}" | ||
fi | ||
|
||
if [ -n "${FUSEKI_DUMP_LOGS}" ] || [ "${xrc}" != "0" ] | ||
then | ||
1>&2 echo "dumping fuseki_log_normal=${fuseki_log_normal}" | ||
cat "${fuseki_log_normal}" || : | ||
1>&2 echo "dumping fuseki_log_tdb=${fuseki_log_tdb}" | ||
cat "${fuseki_log_tdb}" || : | ||
fi | ||
} | ||
|
||
|
||
main() { | ||
: "${LOCALSTATEDIR:=${script_dirname}/var}" | ||
# : ${FUSEKI_PORT:=3030} | ||
: "${XDG_CACHE_HOME:=${HOME}/.cache}" | ||
|
||
local jena_uri="https://archive.apache.org/dist/jena/binaries/apache-jena-fuseki-3.17.0.tar.gz" | ||
local jena_sha512="2b92f3304743da335f648c1be7b5d7c3a94725ed0a9b5123362c89a50986690114dcef0813e328126b14240f321f740b608cc353417e485c9235476f059bd380" | ||
local jena_archive_basename | ||
jena_archive_basename="$(basename "${jena_uri}")" | ||
local jena_archive="${XDG_CACHE_HOME}/${jena_archive_basename}" | ||
local jena_stem="${jena_archive_basename%%.tar.gz}" | ||
|
||
1>&2 declare -p jena_uri jena_archive XDG_CACHE_HOME LOCALSTATEDIR | ||
if ! [ -e "${jena_archive}" ] | ||
then | ||
mkdir -vp "${XDG_CACHE_HOME}" | ||
curl "${jena_uri}" -o "${jena_archive}" | ||
fi | ||
printf "%s %s\n" "${jena_sha512}" "${jena_archive_basename}" > "${jena_archive}.sha512" | ||
(cd "${XDG_CACHE_HOME}" && shasum -c -a512 "${jena_archive_basename}.sha512") || { | ||
echo 1>&2 "ERROR: digest verification failed" | ||
rm -rv "${jena_archive}" "${jena_archive}.sha512" | ||
} | ||
mkdir -vp "${LOCALSTATEDIR}" | ||
tar -zxf "${jena_archive}" -C "${LOCALSTATEDIR}" | ||
|
||
local FUSEKI_HOME=${LOCALSTATEDIR}/${jena_stem} | ||
1>&2 declare -p FUSEKI_HOME | ||
export FUSEKI_HOME | ||
|
||
fuseki_base_normal="${FUSEKI_HOME}/run-normal" | ||
fuseki_base_tdb="${FUSEKI_HOME}/run-tdb" | ||
local fuseki_pidfile_normal="${fuseki_base_normal}/server.pid" | ||
local fuseki_pidfile_tdb="${fuseki_base_tdb}/server.pid" | ||
|
||
mkdir -vp "${fuseki_base_normal}" "${fuseki_base_tdb}" | ||
local fuseki_port_normal=3030 | ||
local fuseki_port_tdb=3031 | ||
|
||
1>&2 declare -p fuseki_base_normal fuseki_base_tdb fuseki_pidfile_normal fuseki_pidfile_tdb fuseki_port_normal fuseki_port_tdb | ||
|
||
trap exit_handler EXIT | ||
|
||
fuseki_log_normal="${fuseki_base_normal}/out.log" | ||
fuseki_log_tdb="${fuseki_base_tdb}/out.log" | ||
|
||
1>&2 declare -p fuseki_log_normal fuseki_log_tdb | ||
|
||
1>&2 echo "INFO: starting fuseki: normal" | ||
FUSEKI_BASE="${fuseki_base_normal}" bash "${FUSEKI_HOME}/fuseki-server" \ | ||
--port "${fuseki_port_normal}" --debug \ | ||
--update --mem /db &>"${fuseki_log_normal}" & | ||
fuseki_pid_normal="${!}" | ||
echo "${fuseki_pid_normal}" > "${fuseki_pidfile_normal}" | ||
|
||
1>&2 echo "INFO: starting fuseki: tdb" | ||
FUSEKI_BASE="${fuseki_base_tdb}" bash "${FUSEKI_HOME}/fuseki-server" \ | ||
--port "${fuseki_port_tdb}" --debug \ | ||
--update --memTDB --set tdb:unionDefaultGraph=true /db &>"${fuseki_log_tdb}" & | ||
fuseki_pid_tdb="${!}" | ||
echo "${fuseki_pid_tdb}" > "${fuseki_pidfile_tdb}" | ||
|
||
1>&2 declare -p fuseki_pid_tdb fuseki_pid_normal | ||
|
||
wait_http_okay "pid=${fuseki_pid_normal}" "url=http://localhost:${fuseki_port_normal}/" "label=fuseki-normal" | ||
wait_http_okay "pid=${fuseki_pid_tdb}" "url=http://localhost:${fuseki_port_tdb}/" "label=fuseki-tdb" | ||
|
||
assert_pid_running "pid=${fuseki_pid_tdb}" "label=fuseki-tdb" | ||
assert_pid_running "pid=${fuseki_pid_normal}" "label=fuseki-normal" | ||
|
||
local -a args=("${@}") | ||
|
||
1>&2 echo "running: ${args[*]}" | ||
|
||
local xrc=1 | ||
"${args[@]}"; xrc="${?}" | ||
exit "${xrc}" | ||
} | ||
|
||
main "${@}" |