Skip to content

zainod: config + readiness for zaino #1638 - #8

Merged
elicbarbieri merged 27 commits into
masterfrom
zainod-public-status
Nov 6, 2026
Merged

elicbarbieri merged 27 commits into
masterfrom
zainod-public-status

Conversation

@elicbarbieri

Copy link
Copy Markdown
Collaborator

Brings ztest in line with zaino #1638 (indexer refactor + LSM indexes).

  • zainod config rendering: [sync.lsm_store], indexer gRPC validator_client, utxo_set, max_work_streams, trusted validator max_connections
  • readiness polls the admin /readyz (/statusz is gone); syncing counts as ready
  • sometimes probes also judged on the final snapshot

🤖 Generated with Claude Code

elicbarbieri and others added 27 commits October 7, 2026 13:48
…s LSM set

- [source] + [[chainview_peers]] → [[trusted_validators]] (all equal)
- [fetch] → [sync] (finalised_depth, concurrency, batch_mib, queue_mib)
- metrics_endpoint → [metrics] listen_address
- [index.<name>] enabled/path + [index.header_chain] path, pinned under /app/data/indexes
- finalised_depth below zainod's floor (1000 off regtest, 1 on regtest) rejected at env.build()
- chainview_peer() → trusted_validator(); new sync_batch_mib() / sync_queue_mib()
- LSM tiers gain `outputs` (zaino-internal-value-balance)
- goldens boot a real zainod (cleanup/remove_state_backend 2bc49411); stale [fetch] refused

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XWVNHaSSJoUnJECXsjPQtw
…upstream)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- watch: driver scrape best-effort (segment start only), zainod rows never dropped for it
- driver: metrics exporter installed as the detached env starts building
- zainod `ready()`: `/statusz` reasons ⊆ {syncing} (GetLightdInfo refuses until every
  index commits once: minutes in a bulk sync)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- `ZebraBackend::sync_budget()`: verify threads, full-verify + download concurrency
- dead `[rpc] parallel_cpu_threads` removed

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- `.lsm_fanout(u32)` (< 2 rejected at `env.build()`), `.lsm_merge_slots(NonZeroU32)`; unset =
  key left out (zainod's default)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- ports::ZEBRAD_INDEXER (8230); Validator::indexer() renders [rpc] indexer_listen_addr
- ValidatorClient {LegacyRpc, Grpc}; Grpc renders validator_client + indexer_address

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E6kgQyj3Eg4VUheK9Pwj9t
…the segment starts

- zainod /statusz = { state, detail, notes } (no `reasons`): every decode failed → never ready
- ready = syncing | serving (degraded = no trusted validator); unknown state = an error naming it
- watch uptime: no driver segment start → `—` (was 0 s + time since the last read, reset each read)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E6kgQyj3Eg4VUheK9Pwj9t
- `/statusz` (admin) removed from zainod; `/status` = same `state`/`detail`
- `draining` state gone from zainod (now refused as contract drift)
- `/metrics` scrape unchanged on the admin port

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UQ8ay3bKhM6aiG56dWeyhT
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UQ8ay3bKhM6aiG56dWeyhT
…the final snapshot

- zainod admin /statusz removed; /readyz = same {state, detail} (503 while syncing, body read)
- public /status = gRPC listener's internet projection, not a harness contract
- fast finish between two ticks: `sometimes` probes also see the final snapshot (no false gap)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… (lightwalletd filterBlockPool)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…raw callers)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ion (pool selection drops txs)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
/etc/zaino/zainod.toml and /var/lib/zaino (zaino's Dockerfile XDG defaults)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UPeo6cHwYz3MkCDGfhxkX5
- PodSpec.tty
- drop the dead ZAINOLOG_COLOR (zainod no longer reads it)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UPeo6cHwYz3MkCDGfhxkX5
… cause

- zainod ready = /readyz on the gRPC listener (zaino-prod's LB, z3's probe)
- RpcTimeout carries the probe's last error instead of dropping it

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UPeo6cHwYz3MkCDGfhxkX5
… tailspin

- driver: tracing-logfmt (zainod's shape), uncoloured
- sync watch: component lines ANSI-stripped, one tailspin palette (levels, faint timestamps)
- drop PodSpec.tty (colour = the view's, not the component's)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UPeo6cHwYz3MkCDGfhxkX5
- syncing carries {height, target, blocks_per_sec}, down/held/degraded {reason, message}
- decode as opaque JSON (only state gates)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UPeo6cHwYz3MkCDGfhxkX5
- presentation: glyphs, ANSI, widths, goldens, wording, number/duration formatting
- tautologies: constants equal themselves, derive round-trips, restated tables
- duplicates of a stronger neighbour; 3 that passed for the wrong reason
- strip_frame tests → libtest.rs; env.rs panics → should_panic
- + RunStats terminated ⇒ any_failed, render_running row budget
- dead progress_line removed

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UPeo6cHwYz3MkCDGfhxkX5
- target zaino_finalized_tip, best tip = context (fetch stops ~1,000 under it → "short 1,000")
- delete zaino_lsm_batch_rows_total / merge_rows_total rows (gone upstream)
- delete the LSM tier panel (no tier label, no zaino_lsm_stall_at upstream)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UPeo6cHwYz3MkCDGfhxkX5
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UPeo6cHwYz3MkCDGfhxkX5
…inal

- zaino ByteSize (12.8GB) + Human (1h02m) = one number token, not 12 + plain rest
- no wrapping: each row truncated to the terminal width

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UPeo6cHwYz3MkCDGfhxkX5
…lank cells

- avt erases with the whole pen; trim spaces a terminal paints as nothing (renders_blank)
- scrollback + live region: one row per line, no 512-col blue tail
- drop 5 bridge tests that pinned colour spelling or repeated a neighbour

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UPeo6cHwYz3MkCDGfhxkX5
@elicbarbieri
elicbarbieri merged commit 0daaa61 into master Nov 6, 2026
0 of 2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant