From 4dfe42cb3b990f62f49bb4da36136a8bc3974455 Mon Sep 17 00:00:00 2001 From: Leonid Zharikov Date: Sat, 16 Nov 2019 14:08:45 +0300 Subject: [PATCH] Export method reopen (#113) --- bitcask.go | 6 +++--- bitcask_test.go | 57 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 60 insertions(+), 3 deletions(-) diff --git a/bitcask.go b/bitcask.go index b3ed79a..bb7f4b5 100644 --- a/bitcask.go +++ b/bitcask.go @@ -280,7 +280,7 @@ func (b *Bitcask) put(key, value []byte) (int64, int64, error) { return b.curr.Write(e) } -func (b *Bitcask) reopen() error { +func (b *Bitcask) Reopen() error { b.mu.Lock() defer b.mu.Unlock() @@ -383,7 +383,7 @@ func (b *Bitcask) Merge() error { } // And finally reopen the database - return b.reopen() + return b.Reopen() } // Open opens the database at the given path with optional options. @@ -436,7 +436,7 @@ func Open(path string, options ...Option) (*Bitcask, error) { return nil, err } - if err := bitcask.reopen(); err != nil { + if err := bitcask.Reopen(); err != nil { return nil, err } diff --git a/bitcask_test.go b/bitcask_test.go index 1fec386..b6a76ba 100644 --- a/bitcask_test.go +++ b/bitcask_test.go @@ -133,6 +133,63 @@ func TestAll(t *testing.T) { }) } +func TestReopen(t *testing.T) { + assert := assert.New(t) + + testdir, err := ioutil.TempDir("", "bitcask") + assert.NoError(err) + + t.Run("Reopen", func(t *testing.T) { + var ( + db *Bitcask + err error + ) + + t.Run("Open", func(t *testing.T) { + db, err = Open(testdir) + assert.NoError(err) + }) + + t.Run("Put", func(t *testing.T) { + err = db.Put([]byte("foo"), []byte("bar")) + assert.NoError(err) + }) + + t.Run("Get", func(t *testing.T) { + val, err := db.Get([]byte("foo")) + assert.NoError(err) + assert.Equal([]byte("bar"), val) + }) + + t.Run("Reopen", func(t *testing.T) { + err = db.Reopen() + assert.NoError(err) + }) + + t.Run("GetAfterReopen", func(t *testing.T) { + val, err := db.Get([]byte("foo")) + assert.NoError(err) + assert.Equal([]byte("bar"), val) + }) + + t.Run("PutAfterReopen", func(t *testing.T) { + err = db.Put([]byte("zzz"), []byte("foo")) + assert.NoError(err) + }) + + t.Run("GetAfterReopenAndPut", func(t *testing.T) { + val, err := db.Get([]byte("zzz")) + assert.NoError(err) + assert.Equal([]byte("foo"), val) + }) + + t.Run("Close", func(t *testing.T) { + err = db.Close() + assert.NoError(err) + }) + }) +} + func TestDeletedKeys(t *testing.T) { assert := assert.New(t)