Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
21 changes: 20 additions & 1 deletion wal/gc.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,10 @@ import (
"github.com/ava-labs/simplex/common"
)

const (
defaultMaxWALSize = 100 * 1024 * 1024 // 100 MB
)

// Creator creates a DeletableWAL. Returns an error upon failure.
type Creator func() (DeletableWAL, error)

Expand Down Expand Up @@ -60,6 +64,11 @@ func NewGarbageCollectedWAL(WALs []DeletableWAL, creator Creator, reader Reader,
}
wals = append(wals, wal)
}

if maxWALSize == 0 {
maxWALSize = defaultMaxWALSize
}

return &GarbageCollectedWAL{
maxWalSize: maxWALSize,
reader: reader,
Expand Down Expand Up @@ -158,7 +167,7 @@ func (gcw *GarbageCollectedWAL) ReadAll() ([][]byte, error) {
return allEntries, nil
}

func (gcw *GarbageCollectedWAL) Truncate(retentionTerm uint64) error {
func (gcw *GarbageCollectedWAL) GarbageCollect(retentionTerm uint64) error {
newWALs := make([]garbageCollectedWAL, 0, len(gcw.wals))

for i, wal := range gcw.wals {
Expand All @@ -177,3 +186,13 @@ func (gcw *GarbageCollectedWAL) Truncate(retentionTerm uint64) error {

return nil
}

func (gcw *GarbageCollectedWAL) Close() error {
for i, wal := range gcw.wals {
if err := wal.Close(); err != nil {
return fmt.Errorf("error closing WAL %d: %v", i, err)
}
}
gcw.wals = nil
return nil
}
4 changes: 2 additions & 2 deletions wal/gc_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -47,12 +47,12 @@ func TestGarbageCollectedWAL(t *testing.T) {
require.NoError(t, err)
require.Equal(t, records, walRecords)

require.NoError(t, gcw.Truncate(6))
require.NoError(t, gcw.GarbageCollect(6))
walRecords, err = gcw.ReadAll()
require.NoError(t, err)
require.Equal(t, records[6:], walRecords)

require.NoError(t, gcw.Truncate(10))
require.NoError(t, gcw.GarbageCollect(10))
walRecords, err = gcw.ReadAll()
require.NoError(t, err)
require.Empty(t, walRecords)
Expand Down
Loading