Keep Run startup independent from log backlog

This commit is contained in:
npc0-hue
2026-08-31 18:13:38 +08:00
parent 4277791cb7
commit 40b704d60f
2 changed files with 339 additions and 52 deletions
+47
View File
@@ -219,6 +219,53 @@ func TestLogSpoolRestoresPendingAllocationWithoutWatermark(t *testing.T) {
}
}
func TestLogSpoolStartupDoesNotDecodeCorruptPendingSegment(t *testing.T) {
root := t.TempDir()
logDir := filepath.Join(root, "logs")
if err := os.MkdirAll(logDir, 0o755); err != nil {
t.Fatalf("create log dir: %v", err)
}
if err := os.WriteFile(filepath.Join(logDir, "bad-00000000000000000001-00000000000000000001.json"), []byte("{"), 0o600); err != nil {
t.Fatalf("write corrupt segment: %v", err)
}
logSpool, err := NewLogSpool(root)
if err != nil {
t.Fatalf("startup should not decode corrupt segment: %v", err)
}
pending, err := logSpool.Pending()
if err != nil || len(pending) != 0 {
t.Fatalf("expected corrupt segment to be quarantined when read, pending=%+v err=%v", pending, err)
}
rejected, err := os.ReadDir(filepath.Join(root, "logs-rejected"))
if err != nil || len(rejected) != 1 {
t.Fatalf("expected one rejected corrupt segment, rejected=%+v err=%v", rejected, err)
}
}
func TestLogSpoolStartupQuarantinesOversizedPendingSegment(t *testing.T) {
root := t.TempDir()
logDir := filepath.Join(root, "logs")
if err := os.MkdirAll(logDir, 0o755); err != nil {
t.Fatalf("create log dir: %v", err)
}
oversized := make([]byte, maxDurableLogSegmentBytes+1)
if err := os.WriteFile(filepath.Join(logDir, "huge-00000000000000000001-00000000000000000001.json"), oversized, 0o600); err != nil {
t.Fatalf("write oversized segment: %v", err)
}
logSpool, err := NewLogSpool(root)
if err != nil {
t.Fatalf("startup should quarantine oversized segment: %v", err)
}
pending, err := logSpool.Pending()
if err != nil || len(pending) != 0 {
t.Fatalf("expected oversized segment to be quarantined, pending=%+v err=%v", pending, err)
}
rejected, err := os.ReadDir(filepath.Join(root, "logs-rejected"))
if err != nil || len(rejected) != 1 {
t.Fatalf("expected one rejected oversized segment, rejected=%+v err=%v", rejected, err)
}
}
func TestLogSpoolSourceCursorDeduplicatesAcknowledgedReplayAfterRestart(t *testing.T) {
root := t.TempDir()
checksum := func(entries []protocol.LogEntry) (string, error) {