Skip to content

Commit 9f4b7b5

Browse files
bdchathamclaude
andauthored
fix: restore configure-state-sync for S3 snapshot restores (#72)
Reverts the logic change from #62 that skipped configure-state-sync for S3 snapshot sources. The original rationale assumed S3 snapshot-restore writes a complete data directory, but the sidecar extracts ABCI snapshot chunks to data/snapshots/. Without configure-state-sync (useLocalSnapshot: true), CometBFT starts with statesync.enable=false, never applies the snapshot, and panics at InitChain with an empty state DB. Restores the original guard (`snap != nil`) so configure-state-sync runs for both S3 and StateSync sources. Fixes the pacific-1-shadow-replayer canonicalRpc port typo (2665 → 26657). Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent 775a386 commit 9f4b7b5

5 files changed

Lines changed: 9 additions & 8 deletions

File tree

internal/controller/node/plan_execution_integration_test.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@ func TestIntegrationFullProgressionSnapshotMode(t *testing.T) {
9595

9696
driveTask(t, g, r, mock, fetch, planner.TaskConfigureGenesis)
9797
driveTask(t, g, r, mock, fetch, planner.TaskConfigApply)
98+
driveTask(t, g, r, mock, fetch, planner.TaskConfigureStateSync)
9899
driveTask(t, g, r, mock, fetch, planner.TaskConfigValidate)
99100
driveTask(t, g, r, mock, fetch, planner.TaskMarkReady)
100101

internal/controller/node/plan_execution_test.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -262,7 +262,7 @@ func TestBuildPlan_Snapshot(t *testing.T) {
262262
p, _ := planner.ForNode(snapshotNode())
263263
plan := mustBuildPlan(t, p, snapshotNode())
264264
got := taskTypes(plan)
265-
want := []string{planner.TaskSnapshotRestore, planner.TaskConfigureGenesis, planner.TaskConfigApply, planner.TaskConfigValidate, planner.TaskMarkReady}
265+
want := []string{planner.TaskSnapshotRestore, planner.TaskConfigureGenesis, planner.TaskConfigApply, planner.TaskConfigureStateSync, planner.TaskConfigValidate, planner.TaskMarkReady}
266266
assertProgression(t, got, want)
267267
}
268268

@@ -274,7 +274,7 @@ func TestBuildPlan_SnapshotWithPeers(t *testing.T) {
274274
p, _ := planner.ForNode(node)
275275
plan := mustBuildPlan(t, p, node)
276276
got := taskTypes(plan)
277-
want := []string{planner.TaskSnapshotRestore, planner.TaskConfigureGenesis, planner.TaskConfigApply, planner.TaskDiscoverPeers, planner.TaskConfigValidate, planner.TaskMarkReady}
277+
want := []string{planner.TaskSnapshotRestore, planner.TaskConfigureGenesis, planner.TaskConfigApply, planner.TaskDiscoverPeers, planner.TaskConfigureStateSync, planner.TaskConfigValidate, planner.TaskMarkReady}
278278
assertProgression(t, got, want)
279279
}
280280

@@ -311,7 +311,7 @@ func TestBuildPlan_Replayer(t *testing.T) {
311311
p, _ := planner.ForNode(node)
312312
plan := mustBuildPlan(t, p, node)
313313
got := taskTypes(plan)
314-
want := []string{planner.TaskSnapshotRestore, planner.TaskConfigureGenesis, planner.TaskConfigApply, planner.TaskDiscoverPeers, planner.TaskConfigValidate, planner.TaskMarkReady}
314+
want := []string{planner.TaskSnapshotRestore, planner.TaskConfigureGenesis, planner.TaskConfigApply, planner.TaskDiscoverPeers, planner.TaskConfigureStateSync, planner.TaskConfigValidate, planner.TaskMarkReady}
315315
assertProgression(t, got, want)
316316
}
317317

@@ -330,8 +330,8 @@ func TestBuildPlanPhaseAndTasks(t *testing.T) {
330330
if plan.Phase != seiv1alpha1.TaskPlanActive {
331331
t.Errorf("phase = %q, want Active", plan.Phase)
332332
}
333-
if len(plan.Tasks) != 5 {
334-
t.Fatalf("expected 5 tasks, got %d: %v", len(plan.Tasks), taskTypes(plan))
333+
if len(plan.Tasks) != 6 {
334+
t.Fatalf("expected 6 tasks, got %d: %v", len(plan.Tasks), taskTypes(plan))
335335
}
336336
for _, pt := range plan.Tasks {
337337
if pt.Status != seiv1alpha1.TaskPending {

internal/planner/bootstrap.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ func buildBootstrapProgression(peers []seiv1alpha1.PeerSource, snap *seiv1alpha1
8989
if len(peers) > 0 {
9090
prog = insertBefore(prog, TaskConfigValidate, TaskDiscoverPeers)
9191
}
92-
if hasStateSync(snap) {
92+
if snap != nil {
9393
prog = insertBefore(prog, TaskConfigValidate, TaskConfigureStateSync)
9494
}
9595

internal/planner/planner.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -248,7 +248,7 @@ func buildBasePlan(
248248
if len(peers) > 0 {
249249
prog = insertBefore(prog, TaskConfigValidate, TaskDiscoverPeers)
250250
}
251-
if hasStateSync(snap) {
251+
if snap != nil {
252252
prog = insertBefore(prog, TaskConfigValidate, TaskConfigureStateSync)
253253
}
254254

manifests/samples/seinode/pacific-1-shadow-replayer.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,4 +39,4 @@ spec:
3939
bootstrapImage: "ghcr.io/sei-protocol/sei:v6.3.0"
4040
trustPeriod: "9999h0m0s"
4141
resultExport:
42-
canonicalRpc: "http://pacific-1-archive-0.pacific-1-archive.default.svc.cluster.local:26657"
42+
canonicalRpc: "http://rpc.pacific-1.prod.platform.sei.io:26657"

0 commit comments

Comments
 (0)