Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
8265a59
Add S10 chaos scenario driver and scheduled-fire account
kmatasfp Aug 20, 2026
3d6d349
Separate registration stalls from scheduler delay in the S10 account
kmatasfp Aug 20, 2026
c712f93
Note which cut of the connect-timeout branch golem-dev runs
kmatasfp Aug 20, 2026
82890c8
Record the v1.5.10-dev.2 S10 rerun in the scenario docs
kmatasfp Aug 20, 2026
f20e445
Separate scenario findings from run context in chaos summaries
kmatasfp Aug 20, 2026
b26a898
Drop per-run findings from the chaos scenario docs
kmatasfp Aug 20, 2026
3865ff9
Add S11 chaos scenario driver and promise-wakeup account
kmatasfp Aug 20, 2026
b159142
Note why a stalled waiter's invocation is left running
kmatasfp Aug 20, 2026
dc6d848
Pin the promise-id encoding used to hand a promise back to an agent
kmatasfp Aug 20, 2026
d317202
Pass the agent's own promise value back to wait, and smoke-test a rou…
kmatasfp Aug 20, 2026
c38fb86
Report the caller's view of a wakeup beside the platform's
kmatasfp Aug 21, 2026
dfd6403
Add S3 chaos scenario driver and reachability account
kmatasfp Aug 24, 2026
d6f4315
Name the golem-bench-results bucket instead of saying S3
kmatasfp Aug 24, 2026
8678730
Report the operations a partition caught in flight, and how long a gr…
kmatasfp Aug 24, 2026
f12eb03
Add S7 chaos scenario driver and truncation account
kmatasfp Aug 24, 2026
638f09c
Add S6 chaos scenario driver and resurrection account
kmatasfp Aug 25, 2026
a965ebd
Add the S6 result shape test
kmatasfp Aug 25, 2026
2c52da8
Judge a deletion on the counter it left behind, and read a not-found …
kmatasfp Aug 25, 2026
cb208e5
Add S9 chaos scenario driver and rollback account
kmatasfp Aug 25, 2026
f7b7a59
Read the S9 forward leg from metadata so it does not abort the rollba…
kmatasfp Aug 25, 2026
0ed1fb6
Add local reproductions for automatic and snapshot rollback across bu…
kmatasfp Aug 25, 2026
fd22228
Revert "Add local reproductions for automatic and snapshot rollback a…
kmatasfp Aug 25, 2026
b7b9cc7
Move the snapshot-update reproductions onto their own branch
kmatasfp Aug 25, 2026
a70a699
Add S16 chaos scenario driver and storage outage account
kmatasfp Aug 25, 2026
27046f2
Drop the unused S16 outage-observed helper
kmatasfp Aug 25, 2026
410354a
Attribute chaos outage throughput by completion rather than submission
kmatasfp Aug 25, 2026
93e5bca
Attribute S3 reachability throughput by completion rather than submis…
kmatasfp Aug 25, 2026
5847a14
Size the S16 fault window to the failover it models
kmatasfp Aug 27, 2026
81c2e74
Judge the storage outage on quiet time rather than throughput share
kmatasfp Aug 27, 2026
ccffef3
Add the S22 key-value outage that outlasts the retry budget
kmatasfp Aug 27, 2026
97bfeae
Name the running scenario in the clamped-registration note
kmatasfp Aug 27, 2026
674ba74
Add the S14 indexed-oplog outage scenario
kmatasfp Aug 27, 2026
dde7824
Add the S18 Redis cache outage scenario
kmatasfp Aug 28, 2026
06e38c6
Give each storage scenario its own outage expectation
kmatasfp Aug 28, 2026
e8fccdc
Rename the storage outage driver to storage_fault
kmatasfp Aug 28, 2026
0947c0b
Add the S17 Redis cache latency scenario
kmatasfp Aug 28, 2026
b6e6c0a
Add the S15 key-value PostgreSQL latency scenario
kmatasfp Aug 28, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 28 additions & 0 deletions golem-test-framework/src/benchmark/config.rs
Original file line number Diff line number Diff line change
Expand Up @@ -242,6 +242,34 @@ pub enum ChaosScenarioArg {
S12,
/// Rolling executor restarts under load.
S13,
/// Executor pod kill while scheduled actions are between claim and fire.
S10,
/// Executor pod kill while agents are suspended on promises being completed.
S11,
/// Executor cut off from worker-service while it keeps its shards.
S3,
/// Executor pod kill while agents are having their state reverted.
S7,
/// Executor pod kill while agents are being deleted.
S6,
/// Executor pod kill while a component rollback is in flight.
S9,
/// Executors cut off from the key-value PostgreSQL cluster for about as
/// long as an AWS storage failover takes.
S16,
/// The same cut, held for longer than the key-value retry budget.
S22,
/// Executors cut off from the indexed-oplog PostgreSQL cluster for the
/// length of a writer failover.
S14,
/// Executors cut off from the Redis cache in front of the key-value layer,
/// for longer than a caller is willing to wait.
S18,
/// The same Redis cache slowed rather than removed.
S17,
/// The key-value PostgreSQL cluster slowed rather than removed. S17's
/// mirror on the other half of the split key-value layer.
S15,
}

/// Density subcommand action.
Expand Down
14 changes: 14 additions & 0 deletions golem-test-framework/src/benchmark/results.rs
Original file line number Diff line number Diff line change
Expand Up @@ -525,6 +525,17 @@ pub struct RunMetadata {
/// Container image tag of the deployed `worker-service`.
#[serde(skip_serializing_if = "Option::is_none", default)]
pub worker_service_image_tag: Option<String>,
/// Image digest of the deployed `worker-executor`, when the manifest pins
/// one. A tag can be moved; the digest is what actually identifies the
/// build a run tested, which is the whole point of recording it.
#[serde(skip_serializing_if = "Option::is_none", default)]
pub worker_executor_image_digest: Option<String>,
/// Image digest of the deployed `registry-service`.
#[serde(skip_serializing_if = "Option::is_none", default)]
pub registry_service_image_digest: Option<String>,
/// Image digest of the deployed `worker-service`.
#[serde(skip_serializing_if = "Option::is_none", default)]
pub worker_service_image_digest: Option<String>,
/// Aurora ACU capacity for the main (`golem_dev`) cluster at run start.
#[serde(skip_serializing_if = "Option::is_none", default)]
pub aurora_acu_main: Option<f64>,
Expand Down Expand Up @@ -575,6 +586,9 @@ impl RunMetadata {
worker_executor_image_tag: env_str("GOLEM_BENCH_WORKER_EXECUTOR_IMAGE_TAG"),
registry_service_image_tag: env_str("GOLEM_BENCH_REGISTRY_SERVICE_IMAGE_TAG"),
worker_service_image_tag: env_str("GOLEM_BENCH_WORKER_SERVICE_IMAGE_TAG"),
worker_executor_image_digest: env_str("GOLEM_BENCH_WORKER_EXECUTOR_IMAGE_DIGEST"),
registry_service_image_digest: env_str("GOLEM_BENCH_REGISTRY_SERVICE_IMAGE_DIGEST"),
worker_service_image_digest: env_str("GOLEM_BENCH_WORKER_SERVICE_IMAGE_DIGEST"),
aurora_acu_main: env_f64("GOLEM_BENCH_AURORA_ACU_MAIN"),
aurora_acu_indexed: env_f64("GOLEM_BENCH_AURORA_ACU_INDEXED"),
aurora_acu_keyvalue: env_f64("GOLEM_BENCH_AURORA_ACU_KEYVALUE"),
Expand Down
1,257 changes: 1,256 additions & 1 deletion integration-tests/chaos_suites/cloud-chaos.yaml

Large diffs are not rendered by default.

43 changes: 42 additions & 1 deletion integration-tests/src/benchmarks/all.rs
Original file line number Diff line number Diff line change
Expand Up @@ -592,6 +592,18 @@ async fn run_chaos(
ChaosScenarioArg::S5 => chaos::ScenarioCode::S5,
ChaosScenarioArg::S12 => chaos::ScenarioCode::S12,
ChaosScenarioArg::S13 => chaos::ScenarioCode::S13,
ChaosScenarioArg::S10 => chaos::ScenarioCode::S10,
ChaosScenarioArg::S11 => chaos::ScenarioCode::S11,
ChaosScenarioArg::S3 => chaos::ScenarioCode::S3,
ChaosScenarioArg::S7 => chaos::ScenarioCode::S7,
ChaosScenarioArg::S6 => chaos::ScenarioCode::S6,
ChaosScenarioArg::S9 => chaos::ScenarioCode::S9,
ChaosScenarioArg::S16 => chaos::ScenarioCode::S16,
ChaosScenarioArg::S22 => chaos::ScenarioCode::S22,
ChaosScenarioArg::S14 => chaos::ScenarioCode::S14,
ChaosScenarioArg::S18 => chaos::ScenarioCode::S18,
ChaosScenarioArg::S17 => chaos::ScenarioCode::S17,
ChaosScenarioArg::S15 => chaos::ScenarioCode::S15,
};
let config = suite
.scenario(code, allow_disabled)
Expand Down Expand Up @@ -623,6 +635,35 @@ async fn run_chaos(
chaos::ScenarioCode::S13 => {
chaos::scenarios::s13::run(&config, &manifest, &deps, &signals, &outputs).await
}
chaos::ScenarioCode::S10 => {
chaos::scenarios::s10::run(&config, &manifest, &deps, &signals, &outputs).await
}
chaos::ScenarioCode::S11 => {
chaos::scenarios::s11::run(&config, &manifest, &deps, &signals, &outputs).await
}
chaos::ScenarioCode::S3 => {
chaos::scenarios::s3::run(&config, &manifest, &deps, &signals, &outputs).await
}
chaos::ScenarioCode::S7 => {
chaos::scenarios::s7::run(&config, &manifest, &deps, &signals, &outputs).await
}
chaos::ScenarioCode::S6 => {
chaos::scenarios::s6::run(&config, &manifest, &deps, &signals, &outputs).await
}
chaos::ScenarioCode::S9 => {
chaos::scenarios::s9::run(&config, &manifest, &deps, &signals, &outputs).await
}
code @ (chaos::ScenarioCode::S14
| chaos::ScenarioCode::S15
| chaos::ScenarioCode::S16
| chaos::ScenarioCode::S17
| chaos::ScenarioCode::S18
| chaos::ScenarioCode::S22) => {
chaos::scenarios::storage_fault::run(
code, &config, &manifest, &deps, &signals, &outputs,
)
.await
}
};

deps.kill_all().await;
Expand Down Expand Up @@ -855,7 +896,7 @@ async fn run_density(

// Emit the cell result as a single-result suite so the JSON shape
// matches cloud-perf (BenchmarkSuiteResultCollection), and the
// buildspec can upload it directly to S3.
// buildspec can upload it directly to golem-bench-results.
let mut suite_result = BenchmarkSuiteResult::new(&format!("density-{section}"));
suite_result.add(result);
if let Some(run_id) = cloud_bench_run_id() {
Expand Down
3 changes: 2 additions & 1 deletion integration-tests/src/benchmarks/density/agent.rs
Original file line number Diff line number Diff line change
Expand Up @@ -185,7 +185,8 @@ pub struct CellConfig {
}

impl CellConfig {
/// The cell's name, used in S3 paths and result identifiers. Encodes the
/// The cell's name, used in `golem-bench-results` keys and result identifiers.
/// Encodes the
/// full axis set in human-readable terms (no cryptic single letters).
pub fn cell_name(&self) -> String {
let mut parts = vec![
Expand Down
3 changes: 2 additions & 1 deletion integration-tests/src/benchmarks/density/prep.rs
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,8 @@
//!
//! The buildspec runs prep exactly once at suite start (against a freshly-wiped
//! cluster) and writes the resulting [`PrepManifest`] to a file that is
//! uploaded to S3 and passed to every per-cell invocation via
//! uploaded to the `golem-bench-results` bucket and passed to every per-cell
//! invocation via
//! `--prep-manifest`. The manifest carries the account token and all component
//! IDs so per-cell invocations need no by-name lookup and no re-tokenization —
//! this is also the resume mechanism: a resumed run reloads the same manifest.
Expand Down
Loading
Loading