ethereum-optimism / ethereum-optimism/optimism

op-supernode: downgrade expected NotFound readiness log severity

Open
#20,440 0 comments 0 reactions 0 assignees View on GitHub
A-op-supernode H-interop
Dominant language
Go
Stars
6.5k
Forks
4k
Avg merge
2d 15h
Merged PRs (30d)
145

Description

## Summary

Low-priority observability cleanup: `op-supernode` currently logs the expected interop readiness path as an error:

```text
lvl=error msg="error determining l2 block at given timestamp" error="not found"
```

This can look like a supernode health issue in local/devnet runs even when the network is healthy and heads continue advancing.

## Context

Observed while validating a two-chain interop supernode setup with `op-supernode:develop`. Both chains continued producing blocks, and unsafe, local-safe, safe, and finalized heads all advanced across supernode views. The repeated error-level log was the remaining noisy signal.

Source path checked on `develop` (`17e82c8c9c6a0bf7846e50974510795a3d28298a`):

- `op-supernode/supernode/chain_container/chain_container.go`
- `OptimisticAt()` calls `LocalSafeBlockAtTimestamp()`.
- `LocalSafeBlockAtTimestamp()` returns `ethereum.NotFound` when the requested timestamp maps to a target block beyond the current local-safe head.
- `OptimisticAt()` logs that `NotFound` at error level before returning it.
- `op-supernode/supernode/activity/interop/interop.go`
- `observeRound()` treats `ethereum.NotFound` from `checkChainsReady()` as `ChainsReady=false`.
- The interop activity returns `DecisionWait`, sleeps the normal readiness backoff, and retries.

So this specific `NotFound` is an expected frontier/readiness condition, not an operator-actionable error.

## Suggested change

Downgrade or suppress the expected `ethereum.NotFound` case from the `LocalSafeBlockAtTimestamp()` / `OptimisticAt()` readiness path. `Debug` is probably the right default; a rate-limited `Warn` with richer context could also work if operators need visibility.

Keep error-level logging for genuinely unexpected failures.

## Acceptance criteria

- Expected `ethereum.NotFound` readiness polling no longer emits continuous error-level logs.
- Unexpected errors in the same path still remain visible at error level.
- Tests or log assertions cover the distinction if practical.

## Priority

Low. This is log hygiene / observability cleanup, not a correctness blocker.

Contributor guide

Open the contributing guide

Research direction

Read op-supernode/supernode/chain_container/chain_container.go, focusing on OptimisticAt() and LocalSafeBlockAtTimestamp(), then compare the ethereum.NotFound handling in op-supernode/supernode/activity/interop/interop.go. Run the relevant op-supernode tests or add log assertions if practical; done means expected readiness polling is not logged at error level while unexpected errors remain visible.

Written by the indexing model from the issue text.

Assessment

Tech stack
go
Domain
observability
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
74/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.