diff --git a/publications/comnet/experiments/analysis/figures/fig03_spike_iso_vs_topics.py b/publications/comnet/experiments/analysis/figures/fig03_spike_iso_vs_topics.py index edc7f271..2efe8372 100644 --- a/publications/comnet/experiments/analysis/figures/fig03_spike_iso_vs_topics.py +++ b/publications/comnet/experiments/analysis/figures/fig03_spike_iso_vs_topics.py @@ -30,9 +30,13 @@ def load_topic_scaling_data(results_dir: Path): for run in RUNS: filepath = exp02_dir / f"{transport}_loss1pct_run{run}.json" if filepath.exists(): + try: + with open(filepath) as f: + result = json.load(f) + except json.JSONDecodeError: + print(f" warning: skipping invalid JSON: {filepath.name}") + continue sources.setdefault(transport, {}).setdefault(8, []) - with open(filepath) as f: - result = json.load(f) sources[transport][8].append( result["results"]["windowed_correlation"] ) @@ -46,11 +50,15 @@ def load_topic_scaling_data(results_dir: Path): / f"{transport}_{topic_count}topics_run{run}.json" ) if filepath.exists(): + try: + with open(filepath) as f: + result = json.load(f) + except json.JSONDecodeError: + print(f" warning: skipping invalid JSON: {filepath.name}") + continue sources.setdefault(transport, {}).setdefault( topic_count, [] ) - with open(filepath) as f: - result = json.load(f) sources[transport][topic_count].append( result["results"]["windowed_correlation"] ) diff --git a/publications/comnet/experiments/analysis/figures/fig14_strategy_comparison.py b/publications/comnet/experiments/analysis/figures/fig14_strategy_comparison.py index 03802fab..d84a4087 100644 --- a/publications/comnet/experiments/analysis/figures/fig14_strategy_comparison.py +++ b/publications/comnet/experiments/analysis/figures/fig14_strategy_comparison.py @@ -44,8 +44,12 @@ def load_data(results_dir: Path): for run in RUNS: tp_path = exp_dir / f"{strategy}_{topics}topics_throughput_run{run}.json" if tp_path.exists(): - with open(tp_path) as f: - d = json.load(f) + try: + with open(tp_path) as f: + d = json.load(f) + except json.JSONDecodeError: + print(f" warning: skipping invalid JSON: {tp_path.name}") + continue tp_values.append(d["results"]["throughput_avg"]) if tp_values: diff --git a/publications/comnet/experiments/parallel/common_parallel.sh b/publications/comnet/experiments/parallel/common_parallel.sh index 2f9ee14a..a654b5ea 100755 --- a/publications/comnet/experiments/parallel/common_parallel.sh +++ b/publications/comnet/experiments/parallel/common_parallel.sh @@ -5,7 +5,24 @@ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" ROOT_DIR="$(cd "${SCRIPT_DIR}/.." && pwd)" : "${GROUP:?Set GROUP=1|2|3 before sourcing common_parallel.sh}" + +# The group env supplies defaults, but a value already set in the environment wins, +# so `RUNS_PER_DATAPOINT=1 GROUP=1 bash parallel/foo.sh` behaves as written. +_cfg_keys="BROKER_IP BROKER_SSH_IP PUB_IP PUB_INTERNAL_IP SUB_IP SUB_PROXY SSH_USER SSH_KEY_PATH RUNS_PER_DATAPOINT" +for _k in $_cfg_keys; do + if [ -n "${!_k+set}" ]; then + eval "_preset_${_k}=\${${_k}}" + fi +done source "${SCRIPT_DIR}/group${GROUP}.env" +for _k in $_cfg_keys; do + _p="_preset_${_k}" + if [ -n "${!_p+set}" ]; then + eval "${_k}=\${${_p}}" + unset "${_p}" + fi +done +unset _cfg_keys _k _p : "${BROKER_IP:?Set BROKER_IP in group${GROUP}.env}" : "${BROKER_SSH_IP:=${BROKER_IP}}" diff --git a/publications/comnet/experiments/run/02c_hol_topic_scaling.sh b/publications/comnet/experiments/run/02c_hol_topic_scaling.sh index ee2e0497..83ece940 100755 --- a/publications/comnet/experiments/run/02c_hol_topic_scaling.sh +++ b/publications/comnet/experiments/run/02c_hol_topic_scaling.sh @@ -54,7 +54,7 @@ for tname in "${TRANSPORTS[@]}"; do label="${tname}_${topics}topics" echo "[${EXPERIMENT}] ${label}" - bench_args="--url ${url} ${flags} --mode hol-blocking --topics ${topics} --duration 30 --warmup 5 --payload-size 512 --rate 5000 --trace-dir /tmp/hol-traces" + bench_args="--url ${url} ${flags} --mode hol-blocking --topics ${topics} --duration 60 --warmup 5 --payload-size 256 --rate 500 --trace-dir /tmp/hol-traces" output_dir="${RESULTS_DIR}/${EXPERIMENT}" mkdir -p "$output_dir" diff --git a/publications/comnet/experiments/run/common.sh b/publications/comnet/experiments/run/common.sh index 7a6ecc53..b538c776 100755 --- a/publications/comnet/experiments/run/common.sh +++ b/publications/comnet/experiments/run/common.sh @@ -3,7 +3,24 @@ set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" ROOT_DIR="$(cd "${SCRIPT_DIR}/.." && pwd)" + +# config.env supplies defaults, but a value already set in the environment wins, +# so `RUNS_PER_DATAPOINT=1 bash run/foo.sh` behaves as written. +_cfg_keys="GCP_PROJECT_ID BROKER_IP BROKER_SSH_IP CLIENT_IP REPO_URL REPO_BRANCH SSH_USER SSH_KEY_PATH RUNS_PER_DATAPOINT" +for _k in $_cfg_keys; do + if [ -n "${!_k+set}" ]; then + eval "_preset_${_k}=\${${_k}}" + fi +done source "${ROOT_DIR}/setup/config.env" +for _k in $_cfg_keys; do + _p="_preset_${_k}" + if [ -n "${!_p+set}" ]; then + eval "${_k}=\${${_p}}" + unset "${_p}" + fi +done +unset _cfg_keys _k _p : "${BROKER_IP:?Set BROKER_IP in config.env}" : "${BROKER_SSH_IP:=${BROKER_IP}}" @@ -63,11 +80,11 @@ restart_broker() { apply_netem() { local delay_ms="$1" local loss_pct="${2:-0}" - ssh_client "sudo bash /opt/mqtt-lib/experiments/netem/apply.sh ${delay_ms} ${loss_pct}" + ssh_broker "sudo bash /opt/mqtt-lib/experiments/netem/apply.sh ${delay_ms} ${loss_pct}" } clear_netem() { - ssh_client "sudo bash /opt/mqtt-lib/experiments/netem/clear.sh" + ssh_broker "sudo bash /opt/mqtt-lib/experiments/netem/clear.sh" } MONITOR_PID=""