Releases: goadesign/pulse
Releases · goadesign/pulse
pulse v1.6.2
Overview
This release updates Pulse to the latest Goa patch line and refreshes generated weather example artifacts to keep generated clients, transports, and OpenAPI specs aligned.
Highlights
- Upgraded
goa.design/goa/v3tov3.25.3. - Regenerated weather example outputs under
examples/weather/services/*/gen. - Updated generated mocks used by weather example clients.
- Improved integration-test stability for Redis-backed pool tests:
- better cleanup polling in
testing/redis.go - explicit shutdown coverage in
pool/node_test.go
- better cleanup polling in
Validation
./scripts/test --forcepasses (rmap, streaming, pool).go test ./examples/...passes.
Included Commit
b514884Upgrade Goa to v3.25.3 and regenerate weather example outputs.
Full Changelog: v1.6.1...v1.6.2
pulse v1.6.1
What's Changed
- Upgrade dependencies across the project.
- Bump Go toolchain from 1.24.0 to 1.25.0.
- Refresh key runtime and observability dependencies (goa, redis, gRPC, OpenTelemetry).
Commits
- 12cedd4 Upgrade dependencies
Full Changelog: v1.6.0...v1.6.1
pulse v1.6.0
Added
- Replicated map (rmap) TTL support
- Absolute TTL:
rmap.WithTTL(ttl)sets expiry once (usesEXPIRENX). - Sliding TTL:
rmap.WithSlidingTTL(ttl)refreshes expiry on every write.
- Absolute TTL:
Fixed
- Prevent leaked per-stream sink metadata (
map:stream:*) for TTL’d streams by applying the stream TTL policy to the sink consumer rmap (stream:<name>:sinks). Stream.Destroy()now also clears the per-stream sink consumer map hash and publishes a reset notification (mirrors rmap destroy semantics).
Changes since v1.5.0
- #66: rmap TTL + sink consumer-map cleanup
pulse v1.5.0
Added
- Stream TTL support (Redis streams): configure retention directly on streams.
- Absolute TTL:
options.WithStreamTTL(ttl)sets TTL once (usesEXPIRENX) so it never slides. - Sliding TTL:
options.WithStreamSlidingTTL(ttl)refreshes TTL on each publish (usesEXPIRE). - TTL is applied on first stream key creation (first
XADD) and also when a sink creates a stream viaXGROUP CREATE ... MKSTREAM.
- Absolute TTL:
Notes
- Default behavior is unchanged: if no TTL option is set, Pulse does not set a key expiry.
- Negative TTL values now fail fast when creating a stream.
Changes since v1.4.4
pulse v1.4.4
Summary
This release adds a local-only shutdown API for distributed tickers and includes several rmap/pool robustness improvements.
Highlights
- pool: add
(*pool.Ticker).Close()to stop a node’s participation in a distributed ticker without deleting the shared ticker-map entry.- Use this for safe local restarts/handoff in multi-node pools.
Close()does not close the tick channel (matchingtime.Tickersemantics).
Full changelog (v1.4.3 → v1.4.4)
2f3aa04pool: add Ticker.Close6365d9fpool: cleanup maps on shutdownf9d8f4brmap: add revisioning and list improvements6037b55Bump golang.org/x/net from 0.36.0 to 0.38.0 (#56)28ed733rmap: robustness + test Redis config (#63)
Compatibility
- Backwards compatible: existing
Stop()behavior is unchanged (still deletes the shared ticker-map entry).
Links
- Compare: v1.4.3...v1.4.4
pulse v1.4.3
Fixes
- Fix rmap SetAndWait data race: remove the waiter notification channel close and make waiter notifications non-blocking, eliminating a race found by FAIL . [setup failed] in downstream consumers (notably goa-ai registry tests).
- Fix pool hashing data race: make the Jump Consistent Hash implementation concurrency-safe when routing/rebalancing worker events.
Notes
- No API changes; this is a bugfix release focused on race-detector correctness and stability under concurrency.
v1.4.2
What's Changed
- Fix potential job loss during concurrent worker cleanup/rebalancing under churn
- Add regression test
TestJobLossDuringConcurrentWorkerCleanupto reproduce cascading failure scenario - Fix weather example event unmarshalling to correctly error on truncated payloads
Full Changelog: v1.4.1...v1.4.2
v1.4.1
What's Changed
- Fix potential panics caused by an invalid regexp by returning an error by @douglaswth in #53
- Fix streaming Reader race condition by @douglaswth in #55
Full Changelog: v1.4.0...v1.4.1