diff --git a/pebble.go b/pebble.go index ca55d00..4ee2cf8 100644 --- a/pebble.go +++ b/pebble.go @@ -21,6 +21,7 @@ type PebbleDB struct { } var _ DB = (*PebbleDB)(nil) +const flushThreshold = 3_500_000_000 // ~3.5 GB func NewPebbleDB(name string, dir string) (*PebbleDB, error) { opts := &pebble.Options{} @@ -250,6 +251,14 @@ func (b *pebbleDBBatch) Set(key, value []byte) error { return errBatchClosed } + // Prevent Pebble batch from exceeding 4 GB hard limit + if b.batch.Len() > flushThreshold { + if err := b.batch.Commit(pebble.Sync); err != nil { + return err + } + b.batch.Reset() + } + return b.batch.Set(key, value, nil) } @@ -262,6 +271,14 @@ func (b *pebbleDBBatch) Delete(key []byte) error { return errBatchClosed } + // Prevent Pebble batch from exceeding 4 GB hard limit + if b.batch.Len() > flushThreshold { + if err := b.batch.Commit(pebble.Sync); err != nil { + return err + } + b.batch.Reset() + } + return b.batch.Delete(key, nil) }