Changelog
View Source0.3.9
Fixed
README pool-options table had
reconnect_time_minandreconnect_time_maxlisted asboolean()with defaulttrue. Real types and defaults:reconnect_time_min—pos_integer(), default1000(ms)reconnect_time_max—pos_integer() | infinity, default120000(ms)
Copy-paste bug from the option table above; no code change.
Plan-time notes
- B3's "API consolidation" recommendation (77 overloads → generic
call(Op, Args, Opts) + cast(Op, Args, Opts)+ back-compat wrappers) was checked on inspection and not acted on. The 77 overloads are auto-generated default-filling wrappers around a small matrix of memcached ops × arity variations and are ergonomic in practice — no consumer has needed to escape the shape. The internalcall/2andcast/3helpers already are the "generic core" the plan proposed; the public arity ladder is just an opinionated convenience surface. Consolidating it would churn the public API without measurable benefit.
0.3.8
Changed
error/0is now{error, error_reason()}whereerror_reason/0is a documented sum type — was{error, atom()}, which gave dialyzer nothing to check at call sites. The sum covers the 15 memcached protocol status atoms (key_not_found,key_exists,item_not_stored, ...) plus the four shackle-level atoms that propagate through anchor (no_server,pool_not_started,shackle_not_started,timeout).No behavioural change: the values returned are identical. Dialyzer now flags
{error, typo}at call sites that don't match the sum.error_reason/0exported alongsideerror/0.
0.3.7
Added
One telemetry event at the request boundary:
Event Measurements Metadata [anchor, request, sent]count => 1operation, asyncFires from the two internal dispatch helpers —
call/2andcast/3— so all 77 exported public functions are covered without per-arity instrumentation. Theoperationmetadata is the memcached op (get,set,add,replace,delete,flush,noop,quit,version,increment,decrement), extracted from either an atom message orelement(1, Tuple). Attach handlers viatelemetry:attach/4.Per-request shackle lifecycle (queue / send / receive) remains observable via shackle's own telemetry hooks — anchor's event surfaces the memcached-level intent without duplicating that work.
No
errorevent yet: all error paths flow through shackle (e.g.no_server,pool_not_started) and are already covered by shackle's telemetry. anchor itself has no separate routing layer to fail.telemetry(1.4.2) is now a direct dependency (was already transitively present via shackle).
No source or API changes beyond the instrumentation.
0.3.6
Pure infrastructure modernization. No source or API changes.
Changed
- Bumped
shacklefrom git ref0.6.2to hex0.7.1-- fixes the OTP 27+ build break inherited transitively via the oldgranderl 0.1.5pin in older shackle releases. - CI moved from Travis (decommissioned years ago) to GitHub Actions. Matrix now covers OTP 25, 26, 27, 28.
- Documentation migrated from
edowntorebar3_ex_doc.
Removed
.travis.yml,elvis.config,bin/elvis,rebar.config.script(rebar2 compatibility) -- all unused.coverallsplugin and Makefile target -- Travis-specific tooling.