From d764dd392bc6dbe9c27c1a834c4ba184d2f4a3d2 Mon Sep 17 00:00:00 2001 From: AYAHASSAN287 <49167455+AYAHASSAN287@users.noreply.github.com> Date: Tue, 23 Sep 2025 12:38:51 +0300 Subject: [PATCH] Adding store scripts (#135) * Adding store scripts * Fix old scripts & add new store stress scripts * Add filter stress scenarios & store * Adding last set of tests --------- Co-authored-by: fbarbu15 --- .../filter/filter_scenario1.sh | 79 ++++++++ .../store/Store_multinodes.sh | 87 +++++++++ .../store/store_15nodes_scenario1.sh | 111 +++++++++++ .../store/store_15nodes_scenario2.sh | 59 ++++++ .../store/store_15nodes_stress_scenario.sh | 182 ++++++++++++++++++ .../store/store_different_payloads.sh | 82 ++++++++ .../store/store_multi-topic.sh | 92 +++++++++ .../store/store_scenario1.sh | 130 +++++++++++++ .../store/store_stress1.sh | 96 +++++++++ .../store/store_stress2.sh | 97 ++++++++++ .../store/store_stress3.sh | 57 ++++++ .../store/store_stress_publishing.sh | 88 +++++++++ 12 files changed, 1160 insertions(+) create mode 100644 scripts/Lite_protocol_scripts/filter/filter_scenario1.sh create mode 100644 scripts/Lite_protocol_scripts/store/Store_multinodes.sh create mode 100644 scripts/Lite_protocol_scripts/store/store_15nodes_scenario1.sh create mode 100644 scripts/Lite_protocol_scripts/store/store_15nodes_scenario2.sh create mode 100644 scripts/Lite_protocol_scripts/store/store_15nodes_stress_scenario.sh create mode 100644 scripts/Lite_protocol_scripts/store/store_different_payloads.sh create mode 100644 scripts/Lite_protocol_scripts/store/store_multi-topic.sh create mode 100755 scripts/Lite_protocol_scripts/store/store_scenario1.sh create mode 100644 scripts/Lite_protocol_scripts/store/store_stress1.sh create mode 100644 scripts/Lite_protocol_scripts/store/store_stress2.sh create mode 100644 scripts/Lite_protocol_scripts/store/store_stress3.sh create mode 100644 scripts/Lite_protocol_scripts/store/store_stress_publishing.sh diff --git a/scripts/Lite_protocol_scripts/filter/filter_scenario1.sh b/scripts/Lite_protocol_scripts/filter/filter_scenario1.sh new file mode 100644 index 00000000..7eb82e32 --- /dev/null +++ b/scripts/Lite_protocol_scripts/filter/filter_scenario1.sh @@ -0,0 +1,79 @@ +#!/bin/bash +# Stress Filter with high receiver (subscribe/unsubscribe) while publishing continuously. +set -e + +STORE_NODES="/ip4/10.2.0.101/tcp/60001/p2p/16Uiu2HAkyte8uj451tGkbww4Mjcg6DRnmAHxNeWyF4zp23RbpG3n" +RELAY_NODE_REST_ADDRESS="http://127.0.0.1:8645" +STORE_NODE_REST_ADDRESS="http://127.0.0.1:8644" +PUBSUB_TOPIC="/waku/2/default-waku/proto" +CONTENT_TOPIC="/sonda/2/polls/proto" +PHASE_SLEEP=120 + +echo "Running test..." +current_time=$(date +"%Y-%m-%d %H:%M:%S") +echo "Bringing up simulator at $current_time" + +cd ./waku-simulator +export SERVICENODE_CPU_CORES=0 +export POSTGRES_CPU_CORES=1-3 +export GF_SECURITY_ADMIN_USER=admin +export GF_SECURITY_ADMIN_PASSWORD=admin +docker compose up -d +while [ "$(docker inspect --format "{{.State.Status}}" $(docker compose ps -q servicenode))" != "running" ]; do + sleep 1 +done +cd .. + +cd ./sonda +docker build -t local-perf-sonda -f ./Dockerfile.sonda . +cat > ./perf-test.env < ./perf-test.env < perf-test.env +RELAY_NODE_REST_ADDRESS=http://127.0.0.1:8645 +STORE_NODE_REST_ADDRESS=http://127.0.0.1:8644 +QUERY_DELAY=0.5 +STORE_NODES=/ip4/127.0.0.1/tcp/60001/p2p/ +CLUSTER_ID=66 +SHARD=0 +HEALTH_THRESHOLD=0.95 +EOF + +docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda +docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda + +echo "Phase 1 running 300s..." +sleep 300 +docker kill $(docker ps -q -f "label=sonda") >/dev/null 2>&1 || true + +#5 sondas 200ms + +cat < perf-test.env +RELAY_NODE_REST_ADDRESS=http://127.0.0.1:8645 +STORE_NODE_REST_ADDRESS=http://127.0.0.1:8644 +QUERY_DELAY=0.2 +STORE_NODES=/ip4/127.0.0.1/tcp/60001/p2p/ +CLUSTER_ID=66 +SHARD=0 +HEALTH_THRESHOLD=0.95 +EOF + +docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda +docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda +docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda +docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda +docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda + +echo "Phase 2 running 300s..." +sleep 300 +docker kill $(docker ps -q -f "label=sonda") >/dev/null 2>&1 || true + +#10 sondas 100ms +cat < perf-test.env +RELAY_NODE_REST_ADDRESS=http://127.0.0.1:8645 +STORE_NODE_REST_ADDRESS=http://127.0.0.1:8644 +QUERY_DELAY=0.1 +STORE_NODES=/ip4/127.0.0.1/tcp/60001/p2p/ +CLUSTER_ID=66 +SHARD=0 +HEALTH_THRESHOLD=0.95 +EOF + +docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda +docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda +docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda +docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda +docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda +docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda +docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda +docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda +docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda +docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda + +echo "Phase 3 running 300s..." +sleep 300 +docker kill $(docker ps -q -f "label=sonda") >/dev/null 2>&1 || true + +cd .. + +cd ./waku-simulator +docker compose down +cd .. + +current_time=$(date +"%Y-%m-%d %H:%M:%S") +echo "Test finished at $current_time" diff --git a/scripts/Lite_protocol_scripts/store/store_15nodes_scenario2.sh b/scripts/Lite_protocol_scripts/store/store_15nodes_scenario2.sh new file mode 100644 index 00000000..ae7a5989 --- /dev/null +++ b/scripts/Lite_protocol_scripts/store/store_15nodes_scenario2.sh @@ -0,0 +1,59 @@ +#!/bin/bash + +set -e + +echo "Running test..." + +# This implements a short version of 1st store scenario. +# waku-simulator with 15 nodes network, 1 service, 1 edge node added +# service node is limited to 1 cpu core with only 512 MB +# Runs 1 phase with sonda load: +# 1. 10 sonda instances, each queries in every 100ms + +cd ./waku-simulator + +export NUM_NWAKU_NODES=15 +export TRAFFIC_DELAY_SECONDS=10 +export MSG_SIZE_KBYTES=8 + +docker compose up -d +cd .. + +echo "Waiting 20s for service node..." +sleep 20 + +cd ./sonda + +docker build -t local-perf-sonda -f Dockerfile.sonda . + +cat < perf-test.env +RELAY_NODE_REST_ADDRESS=http://127.0.0.1:8645 +STORE_NODE_REST_ADDRESS=http://127.0.0.1:8644 +QUERY_DELAY=0.1 +STORE_NODES=/ip4/127.0.0.1/tcp/60001/p2p/ +CLUSTER_ID=66 +SHARD=0 +HEALTH_THRESHOLD=0.95 +EOF + +docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda +docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda +docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda +docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda +docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda +docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda +docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda +docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda +docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda +docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda + +echo "Phase running 300s..." +sleep 300 + +docker kill $(docker ps -q -f "label=sonda") >/dev/null 2>&1 || true + +cd .. + +cd ./waku-simulator +docker compose down +cd .. diff --git a/scripts/Lite_protocol_scripts/store/store_15nodes_stress_scenario.sh b/scripts/Lite_protocol_scripts/store/store_15nodes_stress_scenario.sh new file mode 100644 index 00000000..f2a68521 --- /dev/null +++ b/scripts/Lite_protocol_scripts/store/store_15nodes_stress_scenario.sh @@ -0,0 +1,182 @@ +#!/bin/bash + + +# waku-simulator with 15 nodes network, 1 service, 1 edge node added +# service node is limited to 1 cpu core with only 512 MB +# This scenario intended to stress test service node STORE queries with high request frequency +# Increasing number of sonda instances and decreasing query delay ms +# 16 sondas 100ms +# 16 sondas 50ms +# 24 sondas 50ms +# 24 sondas 20ms + +set -e + +echo "Running test..." + +cd ./waku-simulator + +export NUM_NWAKU_NODES=15 +export TRAFFIC_DELAY_SECONDS=10 +export MSG_SIZE_KBYTES=12 + +docker compose up -d +cd .. + +echo "Waiting 30s for service node..." +sleep 30 + +cd ./sonda + +docker build -t local-perf-sonda -f Dockerfile.sonda . + +#16 sondas 100ms +cat < perf-test.env +RELAY_NODE_REST_ADDRESS=http://127.0.0.1:8645 +STORE_NODE_REST_ADDRESS=http://127.0.0.1:8644 +QUERY_DELAY=0.1 +STORE_NODES=/ip4/127.0.0.1/tcp/60001/p2p/ +CLUSTER_ID=66 +SHARD=0 +HEALTH_THRESHOLD=0.95 +EOF + +docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda +docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda +docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda +docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda +docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda +docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda +docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda +docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda +docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda +docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda +docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda +docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda +docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda +docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda +docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda +docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda + +echo "Phase 1 300s..." +sleep 300 +docker kill $(docker ps -q -f "label=sonda") >/dev/null 2>&1 || true + +# 16 sondas 50ms +cat < perf-test.env +RELAY_NODE_REST_ADDRESS=http://127.0.0.1:8645 +STORE_NODE_REST_ADDRESS=http://127.0.0.1:8644 +QUERY_DELAY=0.05 +STORE_NODES=/ip4/127.0.0.1/tcp/60001/p2p/ +CLUSTER_ID=66 +SHARD=0 +HEALTH_THRESHOLD=0.95 +EOF + +docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda +docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda +docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda +docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda +docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda +docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda +docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda +docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda +docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda +docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda +docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda +docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda +docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda +docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda +docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda +docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda + +echo "Phase 2 300s..." +sleep 300 +docker kill $(docker ps -q -f "label=sonda") >/dev/null 2>&1 || true + +# 24 sondas 50ms +cat < perf-test.env +RELAY_NODE_REST_ADDRESS=http://127.0.0.1:8645 +STORE_NODE_REST_ADDRESS=http://127.0.0.1:8644 +QUERY_DELAY=0.05 +STORE_NODES=/ip4/127.0.0.1/tcp/60001/p2p/ +CLUSTER_ID=66 +SHARD=0 +HEALTH_THRESHOLD=0.95 +EOF + +docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda +docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda +docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda +docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda +docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda +docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda +docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda +docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda +docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda +docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda +docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda +docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda +docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda +docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda +docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda +docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda +docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda +docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda +docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda +docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda +docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda +docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda +docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda +docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda + +echo "Phase 3 300s..." +sleep 300 +docker kill $(docker ps -q -f "label=sonda") >/dev/null 2>&1 || true + +#24 sondas 20ms +cat < perf-test.env +RELAY_NODE_REST_ADDRESS=http://127.0.0.1:8645 +STORE_NODE_REST_ADDRESS=http://127.0.0.1:8644 +QUERY_DELAY=0.02 +STORE_NODES=/ip4/127.0.0.1/tcp/60001/p2p/ +CLUSTER_ID=66 +SHARD=0 +HEALTH_THRESHOLD=0.95 +EOF + +docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda +# repeat 23 more times +docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda +docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda +docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda +docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda +docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda +docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda +docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda +docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda +docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda +docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda +docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda +docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda +docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda +docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda +docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda +docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda +docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda +docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda +docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda +docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda +docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda +docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda +docker run --env-file ./perf-test.env -l sonda -d --network host local-perf-sonda + +echo "Phase 4 300s..." +sleep 300 +docker kill $(docker ps -q -f "label=sonda") >/dev/null 2>&1 || true + +cd .. + +cd ./waku-simulator +docker compose down +cd .. diff --git a/scripts/Lite_protocol_scripts/store/store_different_payloads.sh b/scripts/Lite_protocol_scripts/store/store_different_payloads.sh new file mode 100644 index 00000000..6b2e5985 --- /dev/null +++ b/scripts/Lite_protocol_scripts/store/store_different_payloads.sh @@ -0,0 +1,82 @@ +#!/bin/bash +# Scenario 6: Alternate tiny and huge payloads at fast rates to stress allocators and CPU. +set -e + +STORE_NODES="/ip4/10.2.0.101/tcp/60001/p2p/16Uiu2HAkyte8uj451tGkbww4Mjcg6DRnmAHxNeWyF4zp23RbpG3n" +RELAY_NODE_REST_ADDRESS="http://127.0.0.1:8645" +STORE_NODE_REST_ADDRESS="http://127.0.0.1:8644" +PUBSUB_TOPIC="/waku/2/default-waku/proto" +CONTENT_TOPIC="/sonda/2/polls/proto" +PHASE_SLEEP=240 + +echo "Running test..." +current_time=$(date +"%Y-%m-%d %H:%M:%S") +echo "Bringing up simulator at $current_time" + +cd ./waku-simulator +export SERVICENODE_CPU_CORES=0 +export POSTGRES_CPU_CORES=1-3 +export GF_SECURITY_ADMIN_USER=admin +export GF_SECURITY_ADMIN_PASSWORD=admin +docker compose up -d +while [ "$(docker inspect --format "{{.State.Status}}" $(docker compose ps -q servicenode))" != "running" ]; do + sleep 1 +done +cd .. + +cd ./sonda +docker build -t local-perf-sonda -f ./Dockerfile.sonda . +cat > ./perf-test.env < ./perf-topic-a.env < ./perf-topic-b.env < 1x5 -> 5x1 -> receivers down -> lpt down +# ------------------------------------------------------------------------------ + +# >>> EDIT THESE IF YOUR SETUP DIFFERS <<< +STORE_NODES="/ip4/10.2.0.101/tcp/60001/p2p/16Uiu2HAkyte8uj451tGkbww4Mjcg6DRnmAHxNeWyF4zp23RbpG3n" +RELAY_NODE_REST_ADDRESS="http://127.0.0.1:8645" +STORE_NODE_REST_ADDRESS="http://127.0.0.1:8644" +PUBSUB_TOPIC="/waku/2/default-waku/proto" +CONTENT_TOPIC="/sonda/2/polls/proto" +# <<< EDIT ABOVE >>> + +echo "Running test..." + +current_time=$(date +"%Y-%m-%d %H:%M:%S") +echo "Bringing up simulator at $current_time" + +cd ./waku-simulator + +# same style: exports before compose +export SERVICENODE_CPU_CORES=0 # 1 core for service node +export POSTGRES_CPU_CORES=1-3 # keep DB off core 0 +export GF_SECURITY_ADMIN_USER=admin +export GF_SECURITY_ADMIN_PASSWORD=admin +export NWAKU_IMAGE=wakuorg/nwaku:latest +export NUM_NWAKU_NODES=15 +export RLN_ENABLED=false + +docker compose up -d + +# Wait for servicenode to be running (scenario_1.sh style) +while [ "$(docker inspect --format "{{.State.Status}}" $(docker compose ps -q servicenode))" != "running" ]; do + sleep 1 +done + +cd .. + +# ------------------------------------------------------------------------------ +# Start Sonda (like scenario_1.sh: build & run with env-file, host network) +# ------------------------------------------------------------------------------ +cd ./sonda + +docker build -t local-perf-sonda -f ./Dockerfile.sonda . + +cat > ./perf-test.env < ./perf-test.env < ./perf-test.env < ./perf-test.env < ./perf-test.env <