2019-11-13 19:27:28 +03:00
|
|
|
#!/usr/bin/env bash
|
2021-01-01 21:49:51 +03:00
|
|
|
# Copyright (c) 2021 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved.
|
2019-11-13 19:27:28 +03:00
|
|
|
# SPDX-License-Identifier: Apache-2.0
|
|
|
|
|
|
|
|
set -e
|
|
|
|
set -u
|
|
|
|
set -o pipefail
|
|
|
|
|
2021-04-08 14:53:49 +03:00
|
|
|
# Canton requires JDK11 in production to avoid ForkJoinPool deadlocks on older JDKs so we run it with JDK11.
|
2021-04-08 11:42:40 +03:00
|
|
|
JAVA="$(rlocation jdk11_nix/bin/java)"
|
|
|
|
|
2019-11-13 19:27:28 +03:00
|
|
|
CANTON_COMMAND=(
|
2021-04-08 11:42:40 +03:00
|
|
|
"$(rlocation com_github_digital_asset_daml/ledger/ledger-api-test-tool-on-canton/canton_deploy.jar)"
|
2019-11-13 19:27:28 +03:00
|
|
|
daemon
|
|
|
|
"--config=$(rlocation com_github_digital_asset_daml/ledger/ledger-api-test-tool-on-canton/canton.conf)"
|
|
|
|
"--bootstrap=$(rlocation com_github_digital_asset_daml/ledger/ledger-api-test-tool-on-canton/bootstrap.canton)"
|
|
|
|
)
|
|
|
|
|
2020-01-23 11:04:16 +03:00
|
|
|
PARTICIPANT_1_HOST=localhost
|
|
|
|
PARTICIPANT_1_MONITORING_PORT=7000
|
2019-11-13 19:27:28 +03:00
|
|
|
|
2020-01-23 11:04:16 +03:00
|
|
|
TIMEOUT=60
|
2019-11-13 19:27:28 +03:00
|
|
|
|
2020-01-23 11:04:16 +03:00
|
|
|
function wait_until() {
|
|
|
|
local start
|
2019-11-13 19:27:28 +03:00
|
|
|
|
|
|
|
start="$(date +%s)"
|
|
|
|
while true; do
|
2020-01-23 11:04:16 +03:00
|
|
|
if [[ "$(("$(date +%s)" - start))" -gt "$TIMEOUT" ]]; then
|
2019-11-13 19:27:28 +03:00
|
|
|
echo >&2 "Timed out after ${TIMEOUT} seconds."
|
|
|
|
return 1
|
|
|
|
fi
|
|
|
|
|
2020-01-23 11:04:16 +03:00
|
|
|
if "$@" >&/dev/null; then
|
2019-11-13 19:27:28 +03:00
|
|
|
return 0
|
|
|
|
fi
|
|
|
|
|
|
|
|
sleep 1
|
|
|
|
done
|
|
|
|
}
|
|
|
|
|
2021-08-18 18:23:45 +03:00
|
|
|
command=("${CANTON_COMMAND[@]}" "$@")
|
2019-11-13 19:27:28 +03:00
|
|
|
|
2020-11-10 20:09:58 +03:00
|
|
|
export UNIQUE_CONTRACT_KEYS="$(rlocation com_github_digital_asset_daml/ledger/ledger-api-test-tool-on-canton/unique-contract-keys.conf)"
|
|
|
|
if [[ -f ${UNIQUE_CONTRACT_KEYS} ]]; then
|
|
|
|
command+=("--config=${UNIQUE_CONTRACT_KEYS}")
|
|
|
|
fi
|
|
|
|
|
2020-11-23 17:28:04 +03:00
|
|
|
export ENABLE_FASTER_PRUNING="$(rlocation com_github_digital_asset_daml/ledger/ledger-api-test-tool-on-canton/enable-faster-pruning.conf)"
|
|
|
|
if [[ -f ${ENABLE_FASTER_PRUNING} ]]; then
|
|
|
|
command+=("--config=${ENABLE_FASTER_PRUNING}")
|
|
|
|
fi
|
|
|
|
|
2020-08-18 16:25:02 +03:00
|
|
|
# Change HOME since Canton uses ammonite in the default configuration, which tries to write to
|
|
|
|
# ~/.ammonite/cache, which is read-only when sandboxing is enabled.
|
|
|
|
HOME="$(mktemp -d)"
|
|
|
|
export HOME
|
|
|
|
# ammonite calls `System.getProperty('user.home')` which does not read $HOME.
|
2021-08-18 18:23:45 +03:00
|
|
|
JVM_FLAGS=(-Duser.home="$HOME" -Dlogback.configurationFile="$(rlocation com_github_digital_asset_daml/ledger/ledger-api-test-tool-on-canton/logback-debug.xml)")
|
2020-03-10 19:34:58 +03:00
|
|
|
|
2019-11-13 19:27:28 +03:00
|
|
|
echo >&2 'Starting Canton...'
|
2021-04-08 11:42:40 +03:00
|
|
|
$JAVA "${JVM_FLAGS[@]}" -jar "${command[@]}" &
|
2019-11-13 19:27:28 +03:00
|
|
|
pid="$!"
|
|
|
|
|
|
|
|
sleep 1
|
2020-01-23 11:04:16 +03:00
|
|
|
if ! kill -0 "$pid" 2>/dev/null; then
|
2019-11-13 19:27:28 +03:00
|
|
|
echo >&2 'Failed to start Canton.'
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
2020-01-23 11:04:16 +03:00
|
|
|
function stop() {
|
2019-11-13 19:27:28 +03:00
|
|
|
local status
|
|
|
|
status=$?
|
2020-01-23 11:04:16 +03:00
|
|
|
kill -INT "$pid" || :
|
2020-03-10 19:34:58 +03:00
|
|
|
rm -rf "$HOME" || :
|
2019-11-13 19:27:28 +03:00
|
|
|
exit "$status"
|
|
|
|
}
|
|
|
|
|
|
|
|
trap stop EXIT INT TERM
|
|
|
|
|
2020-01-23 11:04:16 +03:00
|
|
|
wait_until curl -fsS "http://${PARTICIPANT_1_HOST}:${PARTICIPANT_1_MONITORING_PORT}/health"
|
2019-11-13 19:27:28 +03:00
|
|
|
|
|
|
|
echo >&2 'Canton is up and running.'
|
|
|
|
|
|
|
|
wait "$pid"
|