feat(brahman-net+handshake): stop_providing automatico en cleanup
Cierra el pendiente conocido del DHT: hasta ahora cuando una sesion con outputs cerraba (Farewell, EOF, error), el record que la anunciaba en el DHT seguia vivo hasta su TTL natural (~24h en kad default). Consumers remotos podian descubrir un peer "vivo" que ya no servia nada. Cambios: - BrahmanNet::stop_providing(key) (nuevo): contraparte simetrica de start_providing. Manda Command::StopProviding al swarm que llama kad.stop_providing(&key). Borra el record local al instante; replicas remotas siguen expirando por TTL (kad no expone retraccion cross-peer, simetrico al hecho de que start_providing tambien propaga eventualmente). - brahman_handshake::network::withdraw_outputs(net, card) (nuevo): contraparte de announce_outputs. Itera card.flow.output y llama net.stop_providing(flow_dht_key(...)) por cada uno. - server::cleanup: extrae la ResolvedCard removida del registro de sesiones (en lugar de descartarla) y, si config.net esta set, llama withdraw_outputs(net, &card) antes de broadcast_match_diffs. Tests: nuevo E2E dht_discovery_withdraws_on_session_cleanup: 1. A registra Card con flow.output = monad-list:json. 2. B descubre a A via find_remote_providers (assert before contains a_peer). 3. Cliente local de A hace farewell -> cleanup -> withdraw_outputs. 4. Espera a que la sesion salga del registro + 100ms para que el swarm procese el Command. 5. Nueva query desde B: after NO debe contener a_peer. 3 tests verdes en network_discovery.rs (positivo, negativo, withdraw). 18 tests totales en handshake + net.
This commit is contained in:
@@ -6,6 +6,44 @@ ratio/diff ver `git show <sha>`.
|
||||
|
||||
## 2026-05-09
|
||||
|
||||
### feat(brahman-net+handshake): stop_providing automático en cleanup de sesión
|
||||
Cierra el pendiente conocido del DHT: hasta ahora cuando una sesión
|
||||
con outputs cerraba (Farewell, EOF, error), el record que la
|
||||
anunciaba en el DHT seguía vivo hasta su TTL natural (~24h en kad
|
||||
default). Consumers remotos podían descubrir un peer "vivo" que ya
|
||||
no servía nada.
|
||||
|
||||
Cambios:
|
||||
- **`BrahmanNet::stop_providing(key)`** (nuevo): contraparte simétrica
|
||||
de `start_providing`. Manda `Command::StopProviding` al swarm que
|
||||
llama `kad.stop_providing(&key)`. Borra el record del provider
|
||||
store local al instante; replicas en peers remotos siguen
|
||||
expirando por TTL (kad no expone retracción cross-peer, simétrico
|
||||
al hecho de que `start_providing` también propaga eventualmente).
|
||||
- **`brahman_handshake::network::withdraw_outputs(net, card)`**
|
||||
(nuevo): contraparte de `announce_outputs`. Itera `card.flow.output`
|
||||
y llama `net.stop_providing(flow_dht_key(...))` por cada uno.
|
||||
- **`server::cleanup`**: extrae la `ResolvedCard` removida del registro
|
||||
de sesiones (en lugar de descartarla con `remove`) y, si
|
||||
`config.net` está set, llama `withdraw_outputs(net, &card)` antes
|
||||
de `broadcast_match_diffs`.
|
||||
|
||||
Tests: nuevo E2E `dht_discovery_withdraws_on_session_cleanup`:
|
||||
1. A registra Card con `flow.output = monad-list:json`.
|
||||
2. B descubre a A vía `find_remote_providers` — confirma
|
||||
`before.contains(&a_peer)`.
|
||||
3. Cliente local de A hace `farewell` → cleanup → withdraw_outputs.
|
||||
4. Espera a que la sesión salga del registro (señal de cleanup
|
||||
completado) + 100ms para que el swarm procese el Command.
|
||||
5. Nueva query desde B: `after` NO debe contener `a_peer`.
|
||||
|
||||
3 tests verdes en `network_discovery.rs` (positivo, negativo,
|
||||
withdraw). 18 tests totales en handshake + net.
|
||||
|
||||
Pendiente futuro: retracción cross-peer en kad (requeriría extensión
|
||||
del protocolo libp2p, no soportada hoy). Aceptable: simétrico al
|
||||
modelo de propagación eventual del DHT.
|
||||
|
||||
### feat(ente-zero): wire de Arje con brahman-net (red P2P opcional + identidad persistente)
|
||||
Cierra el último pendiente del plan de red: Arje ahora puede arrancar
|
||||
opcionalmente con `BrahmanNet` configurado, persistir su identidad
|
||||
|
||||
Reference in New Issue
Block a user