v0.1.0 — initial release
First release of hyparview, a clean Elixir implementation of the HyParView hybrid partial-view membership protocol from Leitão, Pereira, and Rodrigues (DSN 2007).
What's in the box
HyParView.Peer— opaque peer identity (id+address)HyParView.Messages— the seven protocol messages from the paperHyParView.Protocol— versioned wire format with:safedecodeHyParView.Config— paper-default configuration with validationHyParView.State— pure functional protocol coreHyParView.Server—GenServerwrappingStatewith timers, transport, subscribers, telemetryHyParView.Transport— pluggable transport behaviourHyParView.Transport.Test— in-process transport for testsHyParView.Transport.TCP—:gen_tcp+ per-peer:gen_statemconnectionHyParView.Telemetry— event catalog and prefix helpers
Quality gates
- 7 doctests, 14 properties, 93 tests
mix credo --strict: cleanmix dialyzer: clean (modulo two known-suppressed MapSet opacity false-positives)mix format --check-formatted: clean
Tested coverage
- Seven numbered view invariants (StateTest)
- Wire-format round-trip (ProtocolTest)
- JOIN + dual-TTL FORWARD_JOIN (JoinTest)
- DISCONNECT + NEIGHBOR + reactive recovery (RecoveryTest)
- SHUFFLE + SHUFFLE_REPLY (ShuffleTest)
- Active-view symmetry (SymmetryTest)
- Chaos + stress + determinism (ChaosTest)
- Multi-process integration via Transport.Test (IntegrationTest)
- Real-network integration via Transport.TCP (TCPTest)
- Edge cases: lone node, concurrent joins, larger cluster, subscriber down events (ComprehensiveTest)
- Telemetry events (TelemetryTest)
Install
def deps do
[{:hyparview, "~> 0.1"}]
endReferences
Out of scope for v0.1
- Plumtree (broadcast layer) — separate library
- Distributed registry / supervisor — see Horde
- TLS / auth — wrap the transport behaviour
- Auto-trigger of
connection_lostfrom TCP-close — apps must callHyParView.connection_lost/2themselves on failure for now