Skip to content

v0.1.0 — initial release

Choose a tag to compare

@b-erdem b-erdem released this 02 May 15:48
· 14 commits to main since this 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 paper
  • HyParView.Protocol — versioned wire format with :safe decode
  • HyParView.Config — paper-default configuration with validation
  • HyParView.State — pure functional protocol core
  • HyParView.ServerGenServer wrapping State with timers, transport, subscribers, telemetry
  • HyParView.Transport — pluggable transport behaviour
  • HyParView.Transport.Test — in-process transport for tests
  • HyParView.Transport.TCP:gen_tcp + per-peer :gen_statem connection
  • HyParView.Telemetry — event catalog and prefix helpers

Quality gates

  • 7 doctests, 14 properties, 93 tests
  • mix credo --strict: clean
  • mix 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"}]
end

References

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_lost from TCP-close — apps must call HyParView.connection_lost/2 themselves on failure for now