Skip to content

v0.2.0

Choose a tag to compare

@dmedovich dmedovich released this 24 May 15:11
· 138 commits to master since this release

v0.2.0

Features

  • Public embed API: amber.Open, Options, Cardinality, S3 config — stable surface for embedding amber into another binary.
  • S3 segment tiering: SegmentStore interface with LocalStore and S3Store implementations, automatic upload on seal.
  • Posting list index for trace_id — replaces bitmap for high-cardinality fields.
  • Ribbon filter for segment-level pruning.
  • Cardinality guard: caps attrs per entry, attr value length, and unique keys per service.
  • Circuit breaker rejects writes after consecutive batch failures.
  • Prometheus /metrics endpoint with ingest and WAL counters (hand-rolled exporter, no client_golang dependency).
  • /readyz gate and per-request size limits on the HTTP API.
  • Timing-safe API key comparison, gated pprof.

Performance

  • Zero-copy block scan: ~100k allocations -> ~40 per segment scan.
  • processBatch allocations halved via metric handles and zstd encoder reuse.

Bug fixes

  • Segment header is now fsynced before WAL replay (fixes zero-byte segment after crash).
  • WAL replay caps per-record size and surfaces corruption events.
  • Writer state and activeSize correctly restored after restart.
  • Atomic index writes; WAL checkpoint durability.
  • Rotation no longer reopens readers; retention sort fixed; seal retry on failure.

Tests

  • Real SIGKILL chaos test for WAL recovery (subprocess + atomic marker).
  • Contract test for the public embed API (amber_example_test.go).
  • White-box benchmarks for query, ingest, storage, and indexer paths.
  • 10M-record self-tracking benchmark (loadbench) with write/memory/read metrics.
  • Metrics exporter coverage: counters, escaping, exposition format.

Tooling

  • loadbench, lokibench, vlbench, httpbench — apples-to-apples benchmarks against Loki and VictoriaLogs over HTTP.
  • lefthook pre-commit and pre-push hooks (gofmt, govet, golangci-lint, tests).