Skip to content

Releases: singchia/geminio

v1.3.0-rc.2

Choose a tag to compare

@singchia singchia released this 24 Apr 17:11
56600f5

Second release candidate for v1.3.0. Picks up an upstream scheduler race fix and real make test / make bench wiring.

Changes since v1.3.0-rc.1

Dependency fixes

  • go-timer/v2 → v2.2.2. Fixes a data race in the scheduler's control() loop where countIncomingReqs / countProcessedReqs were read plainly while worker goroutines wrote them atomically. Surfaced as a persistent Race detector CI flake; now gone at the root. See singchia/go-timer#26.

Build / CI

  • make test now runs the full test tree (unit, integration, regression, e2e, security, harness, chaos) with explicit per-suite timeouts — previously it only ran regression.
  • make bench target added (the README has been pointing at it for releases; now it works).
  • Chaos suite opts out of go test -short. The heartbeat-waiting tests (HalfOpenSendOnly ~94s, WireBitFlip ~105s) were pushing the multi-platform CI step past the default 10-minute wall on macOS runners. The dedicated Chaos tests job still runs the full suite.

No library code changes

No functional or behavioral change to geminio itself versus rc.1. All tests green under -race on main.

Full diff: v1.3.0-rc.1...v1.3.0-rc.2

v1.3.0-rc.1

Choose a tag to compare

@singchia singchia released this 23 Apr 01:05
b2a612f

Chaos-hardening release candidate. Two rounds of chaos testing (26 new tests across 7 batches) surfaced nine library bugs — all fixed in this RC. Benchmarks refreshed with Apple M4 numbers + ops/sec reporting; READMEs translated into five new languages.

Library fixes since v1.2.3

RPC path

  • stream.doRPC: panic-recover added; handler panics no longer crash the process (5e83c38).
  • stream.rpcCancels: always register WithCancel; previously only registered with deadlines, leaking server-side handlers (5e83c38).
  • stream.handleOutRequestCancelPacket: new case for RequestCancelPacket — cancel packets were silently dropped client-side (5e83c38).
  • packet.Decode: TypeRequestCancelPacket dispatch added — cancel packets were rejected server-side (5e83c38).

Stream / dialogue teardown

  • stream.Write: now holds RLock across the select AND closes monitorStop before sm.mtx.Lock() in fini — fixes a send-on-closed-channel panic and a Write-vs-Close deadlock (d33d23d, 5cb2898).
  • stream.Write: tearDown escape arm on full writeInCh so a stuck writer can unblock (5cb2898).
  • multiplexer.dialogue.handleInDismissPacket: Case B now bypasses writeInCh so in-flight ACKs can reach the peer during dismiss (d33d23d).

Conn / end teardown

  • conn.fini: removed channel-field nil assignments that raced baseConn.writePkt (5cb2898).
  • application.End.fini: removed end.tmr = nil race with newStream (5cb2898).

Packet decode

  • packet.DecodeFromReader: MaxDecodablePacketLen cap — prevents OOM when a peer declares a huge length (d33d23d).

Tests added (26 across 7 batches)

  • test/chaos/kill_peer_test.go — abrupt SIGKILL-style peer loss during various states
  • test/chaos/dismiss_chaos_test.go — dismiss race, reentrant close, close during open
  • test/chaos/rpc_chaos_test.go — handler panic, blocking handler, bi-RPC deadlock, cancel under reconnect
  • test/chaos/wire_chaos_test.go — bit flip, oversized declaration, truncation, heavy corruption
  • test/chaos/flow_control_chaos_test.go — slow reader, server never reads, huge payloads
  • test/chaos/kill_schedule_test.go — randomized kill schedules, concurrent kill + active streams, kill-restart loops
  • test/chaos/steady_state_test.go — goroutine-stable / memory-stable soak tests

Benchmarks

  • Every Benchmark* now reports an ops/sec metric via a shared helper.
  • Apple M4 (2024 laptop-class) headline numbers:
    • BenchmarkMessage: 8977 MB/s, 68495 ops/sec
    • BenchmarkEnd: 5132 MB/s, 39159 ops/sec
    • BenchmarkStream: 5069 MB/s, 38680 ops/sec
    • BenchmarkRPC: 3082 MB/s, 23515 ops/sec

Docs

  • Overview / design images updated, hero image refreshed.
  • README now in seven languages: English, 简体中文, 日本語, 한국어, Español, Français, Deutsch.
  • 60-second demo swapped to server-push file transfer (pure io.Copy over stream).
  • Design deep dive: docs/MULTIPLEXING.md.

CI

  • Chaos binary timeout bumped 300s → 600s (suite now ~5 min on warm runner).
  • TestHandshakeMultipleClients internal timeout 5s → 30s to survive race + coverage load.

Full changelog: v1.2.3...v1.3.0-rc.1

v1.2.3-rc.1

Choose a tag to compare

@singchia singchia released this 01 Apr 02:09

Full Changelog: v1.2.0...v1.2.3-rc.1

v1.2.2-rc.2

v1.2.2-rc.2 Pre-release
Pre-release

Choose a tag to compare

@singchia singchia released this 15 Feb 15:08

v1.2.2-rc.1

v1.2.2-rc.1 Pre-release
Pre-release

Choose a tag to compare

@singchia singchia released this 14 Feb 15:08

v1.2.1-rc.1

v1.2.1-rc.1 Pre-release
Pre-release

Choose a tag to compare

@singchia singchia released this 14 Feb 13:12

v1.2.0

v1.2.0 Pre-release
Pre-release

Choose a tag to compare

@singchia singchia released this 07 Feb 16:50
ac7ec50

What's Changed

Full Changelog: v1.1.8...v1.2.0

v1.1.9-rc.1

v1.1.9-rc.1 Pre-release
Pre-release

Choose a tag to compare

@singchia singchia released this 30 Dec 15:59
acfd2f1

What's Changed

  • build(deps): bump golang.org/x/crypto from 0.17.0 to 0.45.0 by @dependabot[bot] in #104
  • fix: oom while packet too big by @singchia in #105

Full Changelog: v1.1.8...v1.1.9-rc.1

v1.1.8: Merge pull request #103 from singchia/feat/application-bufsize

Choose a tag to compare

@singchia singchia released this 25 Sep 00:42
20c0aa5
feat: add application layer size

v1.1.8-rc.1

v1.1.8-rc.1 Pre-release
Pre-release

Choose a tag to compare

@singchia singchia released this 24 Sep 16:12
feat: add application layer size