ranged-loop is supposed to run all child services in a single sweep
Reason? If you run ranged-loop with each child service separatedly, each service will querying database independently, it cannot reuse data queried from database.
Best is to run all ranged-loop service in a single command, that is probably why ranged-loop exist in the first place.
Content below are for educational purposes, don’t run it blindly on production.
$checker.Observer
$checker.Observer is the repair checker: the satellite’s damage detector. Its one job is to answer, for every remote segment in the network, a single question — does this segment still have enough healthy pieces, in the right places, to be safe? — and to write down the ones that don’t.
It doesn’t fix anything. It produces a to-do list. The actual reconstruction is done by a completely separate subsystem (satellite/repair/repairer) that reads that list. This separation is deliberate: detection is a cheap, read-only full-table scan; repair is expensive, network-bound, and needs to be rate-limited independently.
– Claude
Minimum useful command to run:
./satellite-modular ranged-loop --components='$checker.Observer' \
--database-options.url "cockroach://my_role:123456@127.0.0.1:26257/my_database?sslmode=verify-full&sslrootcert=/ca.crt" \
--identity-dir=id/satellite \
--jobq.server-node-url '12kK7Y15fU1b5YADYRiBj2Dd4WsF1LARVWHpW6nXRcusV3wiRZD@127.0.0.1:15781' \
--jobq.tls.extensions.revocation=false \
--jobq.tls.use-peer-ca-whitelist=false \
--metainfo.database-url "cockroach://my_role:123456@127.0.0.1:26257/my_metainfo_database?sslmode=verify-full&sslrootcert=ca.crt"
If thing go well it should look like this (jobq service must already up):
2026-07-28T02:05:01+07:00 INFO debug:wrapper.debug debug server is started listening {"addr": "127.0.0.1:43759"}
2026-07-28T02:05:01+07:00 INFO tracing:tracing Anonymized tracing enabled
2026-07-28T02:05:01+07:00 INFO rangedloop:service ranged loop initialized
2026-07-28T02:05:01+07:00 INFO rangedloop:service ranged loop started {"parallelism": 2, "batch_size": 2500, "observers": ["*rangedloop.LiveCountObserver", "*piecetracker.Observer", "*checker.Observer"], "asofsystem_interval": "-5m0s", "spannerstale_interval": "0s"}
2026-07-28T02:05:01+07:00 INFO piecetracker:observer piecetracker observer finished
2026-07-28T02:05:01+07:00 INFO rangedloop:service ranged loop finished