chore: include complete dc refactor implementation and audits
Release / Build & Release (push) Canceled after 0s

This commit is contained in:
kory
2026-10-02 13:23:30 +08:00
parent 192969d7f6
commit 38382d2486
22 changed files with 3022 additions and 8 deletions
+52
View File
@@ -0,0 +1,52 @@
package cluster
import (
"context"
"sync"
"testing"
"time"
)
func TestNodeOperationGateAllowsReadsAndSerializesWrites(t *testing.T) {
n := &Node{}
release1 := n.acquireOperation("file_read")
done := make(chan struct{})
go func() { release2 := n.acquireOperation("edit_block"); close(done); release2() }()
select {
case <-done:
t.Fatal("write entered while read active")
case <-time.After(50 * time.Millisecond):
}
release1()
select {
case <-done:
case <-time.After(time.Second):
t.Fatal("write did not proceed")
}
}
func TestNodeOperationGateAllowsConcurrentReads(t *testing.T) {
n := &Node{}
var wg sync.WaitGroup
wg.Add(2)
for i := 0; i < 2; i++ {
go func() {
defer wg.Done()
release := n.acquireOperation("file_read")
time.Sleep(30 * time.Millisecond)
release()
}()
}
done := make(chan struct{})
go func() { wg.Wait(); close(done) }()
select {
case <-done:
case <-time.After(time.Second):
t.Fatal("reads did not complete")
}
}
func TestOperationRiskUnknownFailsClosed(t *testing.T) {
if operationRisk("unknown-danger") != 3 {
t.Fatal("unknown action must be high risk")
}
_ = context.Background()
}