Export two pieces of persistence and replication state that were only visible
in INFO or in the logs:
- dragonfly_rdb_serialize_total: INFO's rdb_save_count, which counts record
writes of single-file RDB serialization rather than completed saves.
- dragonfly_save_in_progress: 1 while a background save runs.
- dragonfly_replica_disconnects_total{reason="closed|error|timeout"} on the
master. A replica dropped because its stream stalled past
--replication_timeout was previously indistinguishable from one whose
connection simply went away.
To classify the disconnect, BufferedSocketWriter timeouts now carry
errc::timed_out instead of a bare message, and the full-sync stall detector
reports that error rather than marking the session, so the first error reported
for a session decides the reason. Counting happens only in the call that
removes the session, since connection close and the error handler race to tear
it down.
Metrics are asserted from the tests that already drive these scenarios, and
AGENTS.md now states that preference for small incremental features.
Signed-off-by: Roman Gershman <roman@dragonflydb.io>