From 813e94877828e94c6ba224d6067a7c1f4cf926d9 Mon Sep 17 00:00:00 2001 From: bdchatham Date: Wed, 24 Jun 2026 08:29:04 -0700 Subject: [PATCH 1/2] fix(harness): route nightly state store to flatkv, not memiavl_only MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The load/release/chaos suites pinned both storage write-modes to memiavl_only. The latest nightly seid image builds the FlatKV state store for full nodes (ss-enable=true), and memiavl_only routes all EVM data away from that enabled store — its open path deadlocks. The RPC followers (full nodes) wedge right after WAL discovery, before binding any listener, so the benchmark's EVM-readiness gate never passes and NightlyRunFailed fires. Validators are unaffected (ss-enable=false makes the mode inert). State commitment stays on memiavl (the controller default cosmos_only is rejected by the nightly image); only the state-store mode moves to flatkv_only so the enabled FlatKV store is the write target it expects. Renames the config var to match. Co-Authored-By: Claude Opus 4.8 --- test/integration/benchmark_test.go | 2 +- test/integration/chaossuite_test.go | 2 +- test/integration/harness_test.go | 16 +++++++++------- test/integration/release_test.go | 2 +- 4 files changed, 12 insertions(+), 10 deletions(-) diff --git a/test/integration/benchmark_test.go b/test/integration/benchmark_test.go index 6c33d01..6ca86be 100644 --- a/test/integration/benchmark_test.go +++ b/test/integration/benchmark_test.go @@ -46,7 +46,7 @@ func TestBenchmark(t *testing.T) { seiloadProfile: envOr("SEILOAD_PROFILE", "nightly_evm_transfer"), seiloadCommit: envOr("SEILOAD_COMMIT_ID", ""), durationMin: envInt(t, "DURATION_MINUTES", 10), - storageConfig: memiavlStorageConfig, + storageConfig: flatkvStorageConfig, // EVM tuning the followers need to absorb the load (matches the load // scenario's rpc overrides). rpcConfig: map[string]string{ diff --git a/test/integration/chaossuite_test.go b/test/integration/chaossuite_test.go index a14acf5..f1ae510 100644 --- a/test/integration/chaossuite_test.go +++ b/test/integration/chaossuite_test.go @@ -97,7 +97,7 @@ func TestChaosSuite(t *testing.T) { validators: 4, rpcNodes: 1, // an unfaulted observer of liveness + recovery timeout: 40 * time.Minute, - storageConfig: memiavlStorageConfig, + storageConfig: flatkvStorageConfig, } ctx, cancel := context.WithTimeout(context.Background(), s.timeout) diff --git a/test/integration/harness_test.go b/test/integration/harness_test.go index 66eb82c..62f805d 100644 --- a/test/integration/harness_test.go +++ b/test/integration/harness_test.go @@ -40,14 +40,16 @@ import ( // DeletionPolicy cascade are the cleanup path. const runLabelKey = "sei.io/harness-run" -// memiavlStorageConfig is the storage write-mode the load + release suites run -// with — the controller default (cosmos_only) is rejected by the nightly image. -// NOT universal: the major-upgrade suite deliberately omits it (the storage / -// migration path is what that suite tests), so it's applied per-suite via -// spec.storageConfig, never globally. -var memiavlStorageConfig = map[string]string{ +// flatkvStorageConfig pins storage write-modes for the load/release/chaos suites +// (the major-upgrade suite omits it — exercising the migration path is what that +// suite tests). State commitment stays on memiavl (the controller default +// cosmos_only is rejected by the nightly image). The state store routes to +// flatkv: the latest image builds the FlatKV state store for full nodes, and +// memiavl_only routes all data away from that store and deadlocks its open path, +// so RPC followers wedge before binding listeners. +var flatkvStorageConfig = map[string]string{ "storage.state_commit.write_mode": "memiavl_only", - "storage.state_store.write_mode": "memiavl_only", + "storage.state_store.write_mode": "flatkv_only", } // mergeConfig returns base overlaid with extra; extra wins on key collision. diff --git a/test/integration/release_test.go b/test/integration/release_test.go index 49ae922..4cea3de 100644 --- a/test/integration/release_test.go +++ b/test/integration/release_test.go @@ -28,7 +28,7 @@ const releaseAdminBalance = "1000000000000usei" // releaseBaseConfig is the seid config the release chain runs with: the memiavl // storage baseline (the nightly image rejects the cosmos_only default) plus kv tx // indexing (the harness queries txs) and a short mempool TTL. -var releaseBaseConfig = mergeConfig(memiavlStorageConfig, map[string]string{ +var releaseBaseConfig = mergeConfig(flatkvStorageConfig, map[string]string{ "tx_index.indexer": "kv", "mempool.ttl_duration": "60s", }) From 475bfef614ea31eec30b551b727cb75afc6112dc Mon Sep 17 00:00:00 2001 From: bdchatham Date: Wed, 24 Jun 2026 08:35:43 -0700 Subject: [PATCH 2/2] docs(harness): drop unverifiable enum claim from storage-config comment The "controller default cosmos_only" note conflated the chain-optimizations write-mode enum with the migration enum SC actually uses; trim to the verifiable fact (the controller default is rejected, so SC is pinned). Co-Authored-By: Claude Opus 4.8 --- test/integration/harness_test.go | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/test/integration/harness_test.go b/test/integration/harness_test.go index 62f805d..332f662 100644 --- a/test/integration/harness_test.go +++ b/test/integration/harness_test.go @@ -42,11 +42,11 @@ const runLabelKey = "sei.io/harness-run" // flatkvStorageConfig pins storage write-modes for the load/release/chaos suites // (the major-upgrade suite omits it — exercising the migration path is what that -// suite tests). State commitment stays on memiavl (the controller default -// cosmos_only is rejected by the nightly image). The state store routes to -// flatkv: the latest image builds the FlatKV state store for full nodes, and -// memiavl_only routes all data away from that store and deadlocks its open path, -// so RPC followers wedge before binding listeners. +// suite tests). State commitment stays pinned to memiavl (the controller default +// is rejected by the nightly image). The state store routes to flatkv: the latest +// image builds the FlatKV state store for full nodes, and memiavl_only routes all +// data away from that store and deadlocks its open path, so RPC followers wedge +// before binding listeners. var flatkvStorageConfig = map[string]string{ "storage.state_commit.write_mode": "memiavl_only", "storage.state_store.write_mode": "flatkv_only",