Fixes
ChunkSeriesSetcould return a bogus series once the chunk recoder ran out of data.nextChunkdidn't check the series id on the chunk it got back fromRecodeNextChunk; when the recoder returnedcppbridge.InvalidSeriesId, iteration kept going and built a series from that invalid id instead of stopping.nextChunknow returns early on an invalid series id (#500).- Remote-write config reload could miss a rotated secret. Destination configs were compared by marshaling both to YAML and diffing the bytes, but Prometheus's
Secrettype redacts its value on YAML marshal, so two configs differing only by an authorization token/credential always marshaled identically and reload skipped restarting the destination — leaving it sending with the old, now-invalid credential. Comparison now usesreflect.DeepEqualon the parsed config instead (#494). - The jemalloc profiling endpoint could be hit concurrently, and stayed reachable even when profiling wasn't enabled.
/debug/jemallocnow serializes requests behind a semaphore and returns404unless the binary was actually started withMALLOC_CONF=prof:true,prof_active:true(#493). - A race between closing and triggering the head-rotation mediator could panic with "send on closed channel".
Trigger/TriggerWithResetTimernow check a closed flag under a lock before sending, so a shutdown racing with a rotation trigger is a no-op instead of a crash (#498). - Dependency security updates. Bumped
google.golang.org/grpcto v1.83.1 andgo.opentelemetry.io/otel/sdkto v1.44.0 (#491), andgolang.org/x/cryptoto v0.56.0 (#490).
Other
- The experimental
pp_protocolremote-write WebSocket/refill endpoints are temporarily disabled, returning404instead of forwarding to the handler, while the protocol gets further work (#492).