Implementación de Raft sobre rxnet en C y Python, con:
- núcleo del consenso modelado como FSM
rxnet, - persistencia,
- transporte abstracto,
- telemetría opcional,
- ejemplo de base de datos clave-valor distribuida.
La primera implementación de referencia usa un transporte en memoria determinista para tests y ejemplos locales. La observabilidad se expone como eventos JSONL consumibles por una shell externa.
Tests de todo el proyecto:
make testEjemplo Python:
uv run --project python python/examples/kv_cluster.pyEjemplo Python de reconfiguración con una sola traza rxnet continua:
uv run --project python python/examples/kv_reconfigure_trace.pyGenera:
python/var/python-reconfigure-trace/trace.binpython/var/python-reconfigure-trace/trace.html
Shell interactiva Python genérica:
uv run --project python python/tools/raftsh.pyComandos principales de la shell genérica:
status: ver estado del clústerleader: ver líder actualtick [N] [MS]: avanzar la simulaciónautotick [MS]: configurar ticking periódico dirigido por la shell en milisegundos; el valor por defecto es300y0lo desactiva. Internamente la shell avanza el clúster en quanta menores y estables.stop NODE,start NODE,restart NODE: inyectar fallos y recuperaciónmembers [NODE]: ver la configuración estable o joint del clústeraddnode NODE,rmnode NODE: pedir una reconfiguración Raft por joint consensuslog NODE: inspeccionar el log local y ver qué entradas estánCOMMITTEDoUNCOMMITTEDmaxlog [ENTRIES]: consultar o cambiar, por consenso, el umbral de compactaciónevents [NODE ...]: ver telemetría reciente
Shell del ejemplo KV:
uv run --project python python/examples/kv_shell.pyComandos adicionales del ejemplo KV:
set KEY VALUEget KEY [NODE]delete KEY
La shell estándar es genérica. set, get y delete se registran desde el ejemplo KV y no forman parte del núcleo de la shell.
Demo Python independiente (aplicación separada que consume raft-rx):
uv run --project python/examples/demo_app raft-rx-demo --bind 127.0.0.1:7400
uv run --project python/examples/demo_app raft-rx-demo --join 127.0.0.1:7400 --bind 127.0.0.1:7402Tests de la demo independiente:
uv run --project python/examples/demo_app --extra dev pytest -qEmpaquetado de la demo independiente:
cd python/examples/demo_app
uv buildEjemplo C:
make -C c build/raft_kv_cluster
./c/build/raft_kv_clusterGuía de usuario C (integración, ciclo de vida, referencia completa):
Demo app C independiente (aplicación separada que consume raft_rx):
make -C c/examples/demo_app
./c/examples/demo_app/build/raft_kv_demo_appLa API C ya soporta reconfiguración consensuada con raft_node_request_membership_change(...), persistencia de configuración estable/joint y quorum doble durante joint consensus.
Ejemplo C trazado con rxnet + export de una sola trace.bin continua:
make -C c build/raft_kv_cluster_trace
./c/build/raft_kv_cluster_traceGenera:
c/var/c-trace-example/trace.bin
Para abrir la traza:
python3 -m rxnet.tools.trace c/var/c-trace-example/trace.bin --report report.html --openArtefacto de librería C:
make -C c build/libraft_rx.aVariante trazada:
make -C c build/libraft_rx_trace.a