diff --git a/bitcask.go b/bitcask.go index 037ff8a..1bf4050 100644 --- a/bitcask.go +++ b/bitcask.go @@ -125,6 +125,11 @@ func (b *Bitcask) close() error { func (b *Bitcask) Sync() error { b.mu.RLock() defer b.mu.RUnlock() + + if err := b.saveMetadata(); err != nil { + return err + } + return b.curr.Sync() } @@ -201,12 +206,7 @@ func (b *Bitcask) Put(key, value []byte) error { } // in case of successful `put`, IndexUpToDate will be always be false - if b.metadata.IndexUpToDate { - b.metadata.IndexUpToDate = false - if err := b.saveMetadata(); err != nil { - return err - } - } + b.metadata.IndexUpToDate = false if oldItem, found := b.trie.Search(key); found { b.metadata.ReclaimableSpace += oldItem.(internal.Item).Size diff --git a/bitcask_test.go b/bitcask_test.go index ba71968..6678e5f 100644 --- a/bitcask_test.go +++ b/bitcask_test.go @@ -633,6 +633,11 @@ func TestSync(t *testing.T) { value := []byte("foobar") err = db.Put(key, value) }) + + t.Run("Put", func(t *testing.T) { + err = db.Put([]byte("hello"), []byte("world")) + assert.NoError(err) + }) } func TestMaxKeySize(t *testing.T) {