All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
-
implement range-union collapsed forwarding for chunk requests (30f6b1f)
-
implement collapsed forwarding for object and chunk requests with tests (473e921)
-
add comprehensive Prometheus metrics across cache, proxy, server, and storage layers (#62)
-
use shared metrics namespace constant, update Go toolchain to 1.26 (38eb63e)
-
reorganize metrics into pkg/, add traces package, enhance iobuf (0fe04fe)
-
overhaul README with comprehensive project overview (114e494)
-
add comprehensive Tavern CDN ecosystem documentation (e49479b)
-
update caching middleware to handle cache bypass and improve error handling (#56)
-
resolve code review findings for collapsed forwarding (b324e5b)
-
improve collapsed forwarding tests and fix race conditions (5d2832c)
-
add panic recovery in object and chunk flight groups to prevent goroutine leaks (ddd666d)
1.1.1 (https://github.com/omalloc/tavern/compare/v1.1.0...v1.1.1) (2026-06-02)
-
return valid Caching struct on preCacheProcessor error to avoid nil dereference (bb2191b)
-
use c.ctx instead of req.Context() in revalidate DiscardWithMessage for correct request ID (f8df9a2)
-
prevent double-skip in revalidate path by clearing fillRange context before lazyRespond (10e0bfb)
-
prevent double-close in partsReader by advancing index after Close (269cd3a)
-
clear metadata chunks during cache revalidation and add tests for revalidation logic #53 (#54)
1.1.0 (https://github.com/omalloc/tavern/compare/v1.0.0...v1.1.0) (2026-04-23)
-
add protocol code generation and update caching logic with new protocol constants (684e623)
-
introduce iobuf.NopCloser for optional close operations, update dependencies (#50)
-
Implement smoothed requests per second (RPS) calculation and display in the top command, and improve plugin shutdown logic. (#43)
-
enhance
TopKoutput with object details and updatetopcommand display logic, and renameqsplugin API paths (9cfc0b2) -
implement real-time monitoring for QS plugin via SSE and introduce
ttopcommand with enhanced hot key details. (df37a4c) -
implement TopK functionality for LRU cache and storage buckets, integrating it into the QS plugin for hot URL tracking and on-demand metric collection. (c14ff51)
-
add CPU and memory usage metrics to QsPlugin (b8db396)
-
implement request smoothing and add metrics endpoint (f4623a8)
-
implement object migration for memory and disk buckets and correct DBPath in disk migration tests. (#40)
-
Add
Touchmethod to storage buckets for updating object access metadata and integrate it into the caching middleware. (4c8a3b8) -
promote support (21b0615)
-
introduce storage migration functionality with configurable promote and demote policies. (8fc91b6)
-
Introduce flag constants and enable conditional caching of error responses using
FlagOn. (#39) -
replace md5 with xxhash (36378e1)
-
add Tavern service unit file for systemd integration (0358581)
-
replace example-plugin with qs-plugin and update related functionality (b188143)
-
add Grafana dashboard template.json (915cd93)
-
add Prometheus metrics for purge request tracking (#35)
-
rename internal constants package to protocol and document internal headers. (6f21c37)
-
implement DirAware storage functionality with new sharedkv implementations and configuration. (c9c661c)
- Mark "Hot migration" and "Warm/cold split" as completed in READMEs (#41)
-
PebbleDB and noneSharedKV Close idempotent using
sync.Once. fix hot upgrade process (#51) -
pass correct chunk index to checkChunkSize in getContents (7c7c5a0)
-
Ensure response body is always closed in async revalidation. fix #46 (#47)
-
close file descriptors in getContents error paths to prevent fd leaks (#45)
-
(Breaking Change) rename
normalstorage type towarm(#42) -
test case config apply
migration(34a8e28) -
caching middleware's partRequest getUpstreamReader range request preparation. (#38)
-
add iobuf testcase (fdff4dd)
-
refactor savepart async reader, and chunkWriter close check (d434abc)
-
lru coverage; remove kv_pebble log (5208c71)
-
refactor getContents to improve find last hit block index. (8b7f3f1)
1.0.0 (2026-01-20)
-
enhance DiscardBody function to support read speed limit and update related tests (#33)
-
save purge dir task to sharedkv and add design doc (658aecf)
-
enhance PathTrie to support generic key-value types and update related logic (dae0b1e)
-
implement marked storage with push-mark logic and directory purge enhancements (7264c52)
-
add Clone method for RequestMetric and NewContext function for context management (f1f1d71)
-
Implement fuzzy refresh middleware for caching (#31) (#31)
-
implement Hijack method in ResponseRecorder and enhance error handling for chunked responses (#32)
-
update mock server to use rate limiting (fbee3ce)
-
only cache GET/HEAD requests and discard RequestURI for proxy clients (46d36b9)
-
add tests for cache error codes and allowed methods (fa5136b)
-
add e2e tests (61f9034)
-
implement ByteRange parsing and handling for HTTP range requests (6f3a413)
-
implement graceful start and stop handling with SIGUSR2 support (abca883)
-
add DBPath configuration for storage buckets and implement NutsDB indexdb (9e7849b)
-
improve chunk handling (9ede226)
-
enhance ReadChunkFile to return chunk path (a2eeeae)
-
refactor bucket structure, add ReadChunkFile method (381c80c)
-
add WriteChunkFile method for bucket implementations (b5b95b1)
-
implement cache completion event handling and reporting (475dcd7)
-
enhance storage cleanup, add plugin for service domains (6d5526c)
-
improve HTTP vary handling (rfc7231#section-7.1.4) (569b891)
-
implement in-memory SharedKV store using Pebble; directory purge supports. (f607e70)
-
logger configuration with rotation settings and add runtime version http endpoint (a7389de)
-
add async SavepartReader (#17)
-
add LocalApiAllowHosts and fill range settings to server configuration (db30de2)
-
implement fill range processing and enhance chunk handling (076ce7f)
-
add Build function for chunk index generation (24e3bb0)
-
caching with slice-file support (5f01923)
-
add VaryProcessor for handling Vary headers in caching logic (88ff037)
-
integrate RequestID and improve access log handling (a20756c)
-
WIP: implement caching pool and reset functionality; add benchmark test (89d9d93)
-
plugin handling and configuration options (1388301)
-
add JSON marshalling for
IDand metadata cloning logic (e67567a) -
add support for configurable request collapse wait timeout (cb301bb)
-
add customizable logger with support for file-based output (e520d35)
-
support PURGE cache handler (c4bd2c1)
-
add FileChangedProcessor for file change detection and handling (10e43a2)
-
introduce prefetch processor for enhanced caching performance (7782db0)
-
caching with async range requests and add async reader utility (2e8fe8c)
-
add block-based bitmap utilities, range readers, and part reader implementations (b6588c8)
-
caching middleware with range request handling (1959cb9)
-
add SavepartReader and RangeReader implementations with associated tests (5d2820e)
-
add ResourceLocker interface and implement locking mechanism in caching middleware; enhance bucket interface with Path method (723ef93)
-
implement multi-range middleware with support for multi range requests (30d2644)
-
implement caching middleware with support for range requests and cache control parsing (564edb9)
-
add access logging, metrics, and query tool with usage documentation (5997cf2)
-
add access logging and pprof support with configuration options (20a779c)
-
implement discard methods and add unit tests for disk bucket (2162fc3)
-
disk bucket with improved metadata handling and path utilities (724cbd5)
-
disk bucket with LRU caching and async loading support (6aa7be0)
-
implement flexible storage layer with multiple backends (90d84d6)
-
implement a new proxy system with selector and singleflight support (b14a84e)
-
add serveMux handle (50e759b)
-
add transport plugin (4c7de80)
-
add caching middleware (3d8b4e9)
-
add prometheus register (50f8d87)
-
improve caching metrics CacheStatus in accesslog (#19)
-
simplify DiscardWithHash by delegating to discard method (0dcdeae)
-
update middleware options and remove deprecated config file (2b5d44e)
-
update README.md with project banner, badges (18c5fd5)
-
update README with expanded feature list (94840a0)
-
pathtrie typo (6eb1355)
-
update object size to use Content-Range when available and set Range header for HEAD requests (4accc28)
-
update end range calculation to use ObjectSize from Content-Range instead of Content-Length (39a380d)
-
cast totalSize to uint64 in ContentRange test for type consistency (5b99300)
-
closer conn check if the request is chunked and ensure that read are not at EOF, drop index metadata. (#30)
-
use request context in workerRequest cloning (b91bc02)
-
reorder import statements and uncomment sleep duration in Do method (#28)
-
int type, and test flag count=1 (7018736)
-
add e2e test config (8ec6133)
-
path to config file in Server step (676d860)
-
disable caching for error response codes (a5e80d7)
-
errcode skip caching and skip Method not HEAD/GET request (a790f67)
-
disk_test fix (a699574)
-
address code review comments - fix errors, nil checks, and goroutine leak (#22)
-
handle EOF error in io.Copy during response processing #21 (8e16950)
-
remove accept-encoding header when proxy request Fix #15 (#16)
-
preserve request copy headers to proxy request #11 (e26fb10)
-
handle nil response in duplicate request handling logic #6 (#9)
-
remove caching obj pool. (d9aa660)
-
clone() lost field
BlockSize. (164a234) -
prevent duplicate calls to onClose in savepartReader #3 (f8924e9)
-
.HasComplete() use BlockSize metadata to cache object (b274a61)
-
correct method name typos and introduce revalidation processor (d35658d)
-
listen serve addr (73da3ed)