various improvements

This commit is contained in:
Jay
2026-04-24 10:59:33 -04:00
parent e32bbc99d8
commit 4ac2c488ad
14 changed files with 41 additions and 32 deletions
-1
View File
@@ -1,4 +1,3 @@
// responderpool/config.go
package inbound
import (
+8 -6
View File
@@ -16,15 +16,17 @@ import (
type PoolEventKind string
const (
EventDisconnected PoolEventKind = "disconnected"
EventDropped PoolEventKind = "dropped"
EventEvicted PoolEventKind = "evicted"
EventDisconnected PoolEventKind = "disconnected"
EventDroppedClose PoolEventKind = "dropped_close"
EventDroppedError PoolEventKind = "dropped_error"
EventEvictedPolicy PoolEventKind = "evicted_policy"
)
var workerToPoolEvent = map[WorkerExitKind]PoolEventKind{
ExitDisconnected: EventDisconnected,
ExitError: EventDropped,
ExitPolicy: EventEvicted,
ExitDisconnected: EventDisconnected,
ExitUnexpectedClose: EventDroppedClose,
ExitReadError: EventDroppedError,
ExitPolicy: EventEvictedPolicy,
}
type OnExitFunction func(kind WorkerExitKind)
+2 -2
View File
@@ -333,7 +333,7 @@ func TestPoolEvents(t *testing.T) {
Err: &websocket.CloseError{Code: websocket.CloseProtocolError},
}
expectEvent(t, pool.Events(), "peer-1", EventDropped)
expectEvent(t, pool.Events(), "peer-1", EventDroppedClose)
honeybeetest.Eventually(t, func() bool {
return !slices.Contains(pool.Peers(), "peer-1")
@@ -353,7 +353,7 @@ func TestPoolEvents(t *testing.T) {
socket, _, _ := honeybeetest.SetupTestSocket(t)
pool.Add("peer-1", socket)
expectEvent(t, pool.Events(), "peer-1", EventEvicted)
expectEvent(t, pool.Events(), "peer-1", EventEvictedPolicy)
honeybeetest.Eventually(t, func() bool {
return !slices.Contains(pool.Peers(), "peer-1")
+13 -6
View File
@@ -20,9 +20,10 @@ type Worker interface {
type WorkerExitKind string
const (
ExitDisconnected WorkerExitKind = "disconnected"
ExitError WorkerExitKind = "error"
ExitPolicy WorkerExitKind = "policy"
ExitDisconnected WorkerExitKind = "disconnected"
ExitUnexpectedClose WorkerExitKind = "unexpected_close"
ExitReadError WorkerExitKind = "read_error"
ExitPolicy WorkerExitKind = "policy"
)
type DefaultWorker struct {
@@ -147,7 +148,7 @@ func RunReader(
var err error
// determine exit kind
// by default, the peer dropped unexpectedly
kind := ExitError
kind := ExitUnexpectedClose
select {
// the peer-side error is sent before the connection is closed,
// so a non-blocking call here is correct
@@ -156,11 +157,17 @@ func RunReader(
if errors.Is(err, transport.ErrPeerClosedClean) {
kind = ExitDisconnected
}
if errors.Is(err, transport.ErrPeerClosedUnexpected) {
kind = ExitUnexpectedClose
}
if errors.Is(err, transport.ErrReadError) {
kind = ExitReadError
}
default:
}
if logger != nil {
if kind == ExitError {
if kind == ExitUnexpectedClose || kind == ExitReadError {
logger.Error("reader: peer dropped", "event", kind, "error", err)
} else {
logger.Info("reader: peer disconnected", "event", kind)
@@ -280,7 +287,7 @@ func RunWatchdog(
case <-timer.C:
// signal peer is inactive
if logger != nil {
logger.Info("watchdog: peer is inactive")
logger.Info("watchdog: no activity observed")
}
onInactive(ExitPolicy)
return
+2 -2
View File
@@ -140,7 +140,7 @@ func TestRunReader(t *testing.T) {
}
}, "expected onPeerClose")
assert.Equal(t, ExitError, gotKind)
assert.Equal(t, ExitUnexpectedClose, gotKind)
})
t.Run("read error calls onPeerClose with ExitUnexpectedDrop", func(t *testing.T) {
@@ -177,7 +177,7 @@ func TestRunReader(t *testing.T) {
}
}, "expected onPeerClose")
assert.Equal(t, ExitError, gotKind)
assert.Equal(t, ExitReadError, gotKind)
})
t.Run("ctx.Done exits without calling onPeerClose", func(t *testing.T) {
+1 -1
View File
@@ -115,7 +115,7 @@ func TestWorkerStart(t *testing.T) {
honeybeetest.Eventually(t, func() bool {
val := v.exitKind.Load()
return val != nil && val.(WorkerExitKind) == ExitError
return val != nil && val.(WorkerExitKind) == ExitUnexpectedClose
}, "expected ExitUnexpectedDrop")
})