Skip to content

Soar v0.2.1

Choose a tag to compare

@myleshorton myleshorton released this 14 Oct 12:44
d9b982c

Fixes

  • Mixed upload/download no longer shrinks query names for good. The client judged a held poll lost once three later data queries were answered, but the server holds polls and answers data at once by design. Two such false losses demoted names from 253 to 101 characters, cutting upload capacity per query about 2.5×. Loss is now judged by later polls only, and the server releases held polls oldest first. (#8)
  • Conn.Close could lose the request. RESET went out once the data was acked, before the FIN was, so the server aborted the stream before dialing. It now waits for the FIN's ack. (#10)
  • Discovery resumes when working resolvers get blocked. Want now counts only healthy paths (verified, usable, not on a run of losses), and discovery wakes at its configured pace instead of about once a second. (#10)
  • Liveness, hello retries and caps: the liveness clock restarts instead of stopping while queries are outstanding; hello retries rotate through all resolvers, not the first 16; the tail copy of an upload respects MaxInflight; and a full DNS ID space can no longer spin newTxnLocked holding the client lock. (#10)
  • Session and server: a full control queue ends the session instead of silently dropping frames (a dropped MAX_STREAM_DATA stalled a stream for good); a malformed destination gets RESET_STREAM code 1 instead of hanging waitOpened; PublicOnly rejects 192.88.99.0/24, 2001:20::/28 and 3fff::/20. (#10)

Behavior changes

  • ClientConfig.MaxInflight is capped at 1,024, and MaxStreams at 256 on both client and server. Larger values are clamped.

Compatibility

No API changes, and the wire protocol is unchanged: v0.2.1 interoperates with v0.2.0 and v0.1.0 clients and servers.

Also in this range

  • SPEC.md specifies the wire format (version 1), and testdata/vectors.json holds test vectors generated from the real encoders; CI fails on any unregenerated wire change. (#7)
  • dnsbench adds soar-rs, the Rust implementation, as a contender. (#9)

Full changelog: v0.2.0...v0.2.1