ethereum-optimism / ethereum-optimism/optimism
op-supernode: downgrade expected NotFound readiness log severity
- 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
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