Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
eb8681e
feat(csc): reader-miss coalescing modes (workers + full-duplex) and i…
ndyakov Aug 13, 2026
2f6a9e5
fix(csc): address #3965 review and lint in coalescing modes
ndyakov Aug 13, 2026
a5a231a
fix(csc): FD apply-and-gate on id/gen mismatch; drain buffered pushes…
ndyakov Aug 13, 2026
5cae5e1
fix(csc): retry uncached on mid-miss disable; guard cancelled fetches
ndyakov Aug 14, 2026
e4975ba
fix(csc): drop batched deletes on flush; rebuild batcher on window ch…
ndyakov Aug 14, 2026
636ca53
ci(govulncheck): use stable Go to pick up security patches
ndyakov Aug 14, 2026
68aced9
fix(csc): preserve queued deletes on rebuild; honor configured timeouts
ndyakov Aug 14, 2026
62ec782
fix(csc): batcher stop/release safety; FD idle release; flush budget
ndyakov Aug 14, 2026
f2af313
fix(csc): close coalescer lifecycle races; honor pool budget on acquire
ndyakov Aug 14, 2026
62a626b
fix(csc): coalescer latency, shutdown and clone fixes
ndyakov Aug 14, 2026
d3fddc4
fix(csc): make FD session I/O interruptible; refresh rebuild; stat CAS
ndyakov Aug 14, 2026
296622e
fix(csc): join FD supervisor before release; drain queue in GC cleanup
ndyakov Aug 14, 2026
fef79a8
fix(csc): clear the push-probe deadline for negative ReadTimeout
ndyakov Aug 14, 2026
00b7903
refactor(csc): full-duplex is the only miss-coalescer engine
ndyakov Aug 14, 2026
aa68099
fix(csc): held-conn probe safety and lifetime bounds
ndyakov Aug 14, 2026
12e9709
fix(csc): scope idle-drain fallback to held conns; drainer deadline h…
ndyakov Aug 14, 2026
c644e8b
refactor(csc): drop the public coalescer stats API
ndyakov Aug 14, 2026
968fa02
refactor(csc): drop the public coalescer stats API
ndyakov Aug 15, 2026
ad6e68e
fix(csc): bound the recycle-path drain like the stop path
ndyakov Aug 15, 2026
883be56
fix(csc): progress-based drain backstop; departial test flake
ndyakov Aug 15, 2026
5c759f5
fix(pool): clear residual read deadline in checkForData
ndyakov Aug 15, 2026
6c7c6fc
fix(csc): claim FD writes; progress-aware drain backstop
ndyakov Aug 15, 2026
e844cc0
fix(csc): snapshot miss wire form at enqueue
ndyakov Aug 15, 2026
eb220c9
fix(csc): harden FD session recycle and probe paths
ndyakov Aug 15, 2026
8771aa7
fix(csc): epoch inval drop; refresh ownership; close order
ndyakov Aug 15, 2026
911bf54
fix(csc): serialize inval apply with drop; FD handler adapter
ndyakov Aug 15, 2026
37a130c
fix(csc): retry-uncached drains; refresh stack; weak close
ndyakov Aug 15, 2026
d97d831
fix(csc): write-side backstop; probe gate; clone bypass
ndyakov Aug 15, 2026
95ea487
fix(csc): honor lifetime jitter in the FD recycle age
ndyakov Aug 15, 2026
e802dc7
fix(csc): fail the FD session on push-processor errors
ndyakov Aug 15, 2026
ce21ffb
feat(csc): native OTel attribution for coalesced misses
ndyakov Aug 16, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/govulncheck.yml
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ jobs:
- name: Set up Go
uses: actions/setup-go@v7
with:
go-version: "1.26.x"
go-version: "stable"
cache: true

- name: Install govulncheck
Expand Down
28 changes: 28 additions & 0 deletions csc_coalesce_options_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package redis

import (
"testing"
"time"
)

// TestUniversalOptionsSimpleCopiesCSCCoalesce guards that the new CSC miss-
// coalescing / invalidation-batching knobs reach a standalone Client through
// UniversalOptions.Simple() (they were previously Options-only, so UniversalClient
// users could not enable them).
func TestUniversalOptionsSimpleCopiesCSCCoalesce(t *testing.T) {
u := &UniversalOptions{
ClientSideCacheRefreshOnInvalidate: true,
ClientSideCacheCoalesceMisses: true,
ClientSideCacheInvalidationBatchWindow: 7 * time.Millisecond,
}
o := u.Simple()
if !o.ClientSideCacheRefreshOnInvalidate {
t.Error("Simple() dropped ClientSideCacheRefreshOnInvalidate")
}
if !o.ClientSideCacheCoalesceMisses {
t.Error("Simple() dropped ClientSideCacheCoalesceMisses")
}
if o.ClientSideCacheInvalidationBatchWindow != 7*time.Millisecond {
t.Errorf("Simple() ClientSideCacheInvalidationBatchWindow = %v, want 7ms", o.ClientSideCacheInvalidationBatchWindow)
}
}
Loading