* fix: keep metadata subscriptions progressing (#8730) * test: cancel slow metadata writers with parent context * filer: ignore missing persisted log chunks
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
package log_buffer
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"crypto/rand"
|
||||
"fmt"
|
||||
"io"
|
||||
@@ -67,6 +68,48 @@ func TestNewLogBufferFirstBuffer(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestReadFromBufferTimestampBased_AfterFlushReturnsNewerData(t *testing.T) {
|
||||
lb := NewLogBuffer("test", time.Hour, nil, nil, nil)
|
||||
defer lb.ShutdownLogBuffer()
|
||||
|
||||
payload := bytes.Repeat([]byte("x"), 4096)
|
||||
var sealed *MemBuffer
|
||||
|
||||
for i := 0; i < 5000; i++ {
|
||||
if err := lb.AddDataToBuffer([]byte("k"), payload, int64(i+1)); err != nil {
|
||||
t.Fatalf("AddDataToBuffer(%d): %v", i, err)
|
||||
}
|
||||
candidate := lb.prevBuffers.buffers[len(lb.prevBuffers.buffers)-1]
|
||||
if candidate.size > 0 {
|
||||
sealed = &MemBuffer{
|
||||
size: candidate.size,
|
||||
startTime: candidate.startTime,
|
||||
stopTime: candidate.stopTime,
|
||||
offset: candidate.offset,
|
||||
}
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
if sealed == nil {
|
||||
t.Fatal("expected first buffer flush to produce a sealed buffer")
|
||||
}
|
||||
|
||||
for i := 5000; i < 5100; i++ {
|
||||
if err := lb.AddDataToBuffer([]byte("k"), payload, int64(i+1)); err != nil {
|
||||
t.Fatalf("AddDataToBuffer(%d): %v", i, err)
|
||||
}
|
||||
}
|
||||
|
||||
buf, _, err := lb.ReadFromBuffer(NewMessagePosition(sealed.stopTime.UnixNano(), sealed.offset))
|
||||
if err != nil {
|
||||
t.Fatalf("ReadFromBuffer returned error: %v", err)
|
||||
}
|
||||
if buf == nil || buf.Len() == 0 {
|
||||
t.Fatalf("expected newer data after the first sealed buffer, got %v", buf)
|
||||
}
|
||||
}
|
||||
|
||||
// TestReadFromBuffer_OldOffsetReturnsResumeFromDiskError tests that requesting an old offset
|
||||
// that has been flushed to disk properly returns ResumeFromDiskError instead of hanging forever.
|
||||
// This reproduces the bug where Schema Registry couldn't read the _schemas topic.
|
||||
|
||||
Reference in New Issue
Block a user