Repository navigation
test: add multi-SDK e2e command stress tests with dual-client mode #406
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from all commits
Commits
Show all changes
22 commits
Select commit
Hold shift + click to select a range
6e4819f
test: add multi-SDK e2e command stress tests with dual-client mode
starrysky9959 1b7cddc
fix: update pre-push hook to use cmd_stress_test.sh
starrysky9959 85ffc0c
fix: use rocksdb storage provider (recognized by eloqctl)
starrysky9959 b1f3ad6
fix: strip seccomp/cap_add via sed instead of compose override
starrysky9959 e47776d
fix: restore full docker-compose with minio, control-node, and stress…
starrysky9959 39e4bc4
test: merge quality and e2e into single test workflow
starrysky9959 92af88e
fix: add ca-certificates and ssl certs symlink to Dockerfile
starrysky9959 fb93392
test: add pumba chaos (1ms delay, 0.1% loss); drop log_service from t…
starrysky9959 b2e7133
fix: disable WAL since log_service was removed
starrysky9959 2b16dc8
fix: skip ECHO failures caused by cluster routing (keyless command)
starrysky9959 c683cf4
fix: use cluster client for preload to handle MOVED redirects
starrysky9959 04de678
fix: add cluster stabilization wait; temporarily drop pumba
starrysky9959 99764b2
fix: use plain INFO instead of INFO stats across all SDKs
starrysky9959 2622c4d
fix: add ZADD cushions for Z* reads; tolerate <2% sporadic failures
starrysky9959 39354d3
fix: discover master dynamically via CLUSTER NODES; add host-side con…
starrysky9959 fae5c37
feat: add --repeat param to multiply per-command concurrency (default…
starrysky9959 bbeb3a4
fix: extract master discovery; run all SDKs even if one fails; report…
starrysky9959 031dbf8
fix: stabilize e2e ci workflow and keep pre-push lightweight
starrysky9959 63e15c5
ci: run e2e daily and increase mainline stress
starrysky9959 a503025
feat: add per-worker inflight concurrency to stress clients
starrysky9959 a4733cd
feat: streamline release updates and control-node e2e flow
starrysky9959 004c80a
fix: remove dead no-op upgrade step state
starrysky9959 File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or 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 was deleted.
Oops, something went wrong.
This file contains hidden or 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,120 @@ | ||
| name: Test | ||
|
|
||
| on: | ||
| pull_request: | ||
| push: | ||
| branches: | ||
| - main | ||
| schedule: | ||
| - cron: "0 2 * * *" | ||
| workflow_dispatch: | ||
| inputs: | ||
| version: | ||
| description: "EloqKV version" | ||
| required: false | ||
| default: "1.2.2" | ||
| workers: | ||
| description: "Stress test workers" | ||
| required: false | ||
| default: "32" | ||
| duration: | ||
| description: "Stress duration (seconds)" | ||
| required: false | ||
| default: "60" | ||
| repeat: | ||
| description: "Per-command repeat factor" | ||
| required: false | ||
| default: "10" | ||
| inflight: | ||
| description: "Concurrent execution slots per worker" | ||
| required: false | ||
| default: "4" | ||
|
|
||
| env: | ||
| FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: "true" | ||
|
|
||
| permissions: | ||
| contents: read | ||
|
|
||
| jobs: | ||
| test: | ||
| name: Test | ||
| runs-on: ubuntu-24.04 | ||
| timeout-minutes: 30 | ||
|
|
||
| steps: | ||
| - uses: actions/checkout@v4 | ||
|
|
||
| - name: Install build dependencies | ||
| uses: awalsh128/cache-apt-pkgs-action@latest | ||
| with: | ||
| packages: protobuf-compiler pkg-config libssl-dev | ||
| version: test-ubuntu24-v1 | ||
|
|
||
| - name: Set up Rust | ||
| uses: dtolnay/rust-toolchain@master | ||
| with: | ||
| toolchain: nightly-2026-04-21 | ||
| components: rustfmt, clippy | ||
|
|
||
| - name: Cache Rust build artifacts | ||
| uses: swatinem/rust-cache@v2 | ||
| with: | ||
| shared-key: test-ubuntu24 | ||
| cache-on-failure: true | ||
|
|
||
| - name: Format check | ||
| run: cargo fmt --all -- --check | ||
|
|
||
| - name: Clippy | ||
| run: cargo clippy --all-targets --all-features -- -D warnings | ||
|
|
||
| - name: Unit tests | ||
| run: cargo test --tests -- --test-threads=1 | ||
|
|
||
| - name: Build eloqctl | ||
| run: | | ||
| cargo build -p cluster_mgr | ||
| mkdir -p ~/.eloqctl/bin | ||
| cp target/debug/cluster_mgr ~/.eloqctl/bin/cluster_mgr | ||
| chmod 755 ~/.eloqctl/bin/cluster_mgr | ||
| rm -f ~/.eloqctl/config | ||
| ln -s "$PWD/src/cluster_mgr/config" ~/.eloqctl/config | ||
|
|
||
| - name: Run E2E test | ||
| run: | | ||
| if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then | ||
| workers="${{ github.event.inputs.workers || '32' }}" | ||
| duration="${{ github.event.inputs.duration || '60' }}" | ||
| repeat="${{ github.event.inputs.repeat || '10' }}" | ||
| inflight="${{ github.event.inputs.inflight || '4' }}" | ||
| elif [ "${{ github.event_name }}" = "pull_request" ]; then | ||
| workers="16" | ||
| duration="60" | ||
| repeat="10" | ||
| inflight="4" | ||
| else | ||
| workers="32" | ||
| duration="60" | ||
| repeat="20" | ||
| inflight="4" | ||
| fi | ||
|
|
||
| export DOCKER_E2E_DIR="$PWD/tests/docker_ha" | ||
| export ELOQCTL_HOME="$HOME/.eloqctl" | ||
| export ELOQCTL="$HOME/.eloqctl/bin/cluster_mgr" | ||
| export ELOQKV_VERSION="${{ github.event.inputs.version || '1.2.2' }}" | ||
| export DURATION_SECONDS="${duration}" | ||
| export WORKERS="${workers}" | ||
| export INFLIGHT="${inflight}" | ||
| export REPEAT="${repeat}" | ||
| export SKIP_DEPS=1 | ||
| export STEPS="launch,py-stress,go-stress,ts-stress,remove" | ||
| echo "Running E2E with WORKERS=${WORKERS} INFLIGHT=${INFLIGHT} DURATION_SECONDS=${DURATION_SECONDS} REPEAT=${REPEAT}" | ||
| bash tests/e2e/cmd_stress_test.sh | ||
|
|
||
| - name: Cleanup Docker | ||
| if: always() | ||
| run: | | ||
| docker compose -f tests/docker_ha/docker-compose.yaml down -v --remove-orphans 2>/dev/null || true | ||
| docker system prune -af --volumes 2>/dev/null || true | ||
This file contains hidden or 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
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
This file contains hidden or 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 hidden or 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 hidden or 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
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧩 Analysis chain
🏁 Script executed:
Repository: monographdb/eloq_waiter
Length of output: 2144
Pin GitHub Actions in
.github/workflows/e2e.ymlto immutable commit SHAs (no tags/latest/branches).Mutable
uses:refs in this workflow include:actions/checkout@v4awalsh128/cache-apt-pkgs-action@latestdtolnay/rust-toolchain@masterswatinem/rust-cache@v2actions/cache@v4(also applies at line 81)Pin each
uses:to a full 40+ char commit SHA.🧰 Tools
🪛 zizmor (1.25.2)
[error] 44-44: unpinned action reference (unpinned-uses): action is not pinned to a hash (required by blanket policy)
(unpinned-uses)
[error] 50-50: unpinned action reference (unpinned-uses): action is not pinned to a hash (required by blanket policy)
(unpinned-uses)
[error] 55-55: unpinned action reference (unpinned-uses): action is not pinned to a hash (required by blanket policy)
(unpinned-uses)
🤖 Prompt for AI Agents