exclusive lock before closing db in merge (#196)
Co-authored-by: yash <yash.chandra@grabpay.com>
This commit is contained in:
parent
4e7414e920
commit
3a6235ea03
22
bitcask.go
22
bitcask.go
@ -96,12 +96,13 @@ func (b *Bitcask) Stats() (stats Stats, err error) {
|
||||
// database.
|
||||
func (b *Bitcask) Close() error {
|
||||
b.mu.RLock()
|
||||
defer b.mu.RUnlock()
|
||||
|
||||
defer func() {
|
||||
b.mu.RUnlock()
|
||||
b.Flock.Unlock()
|
||||
}()
|
||||
return b.close()
|
||||
}
|
||||
|
||||
func (b *Bitcask) close() error {
|
||||
defer b.Flock.Unlock()
|
||||
if err := b.saveIndex(); err != nil {
|
||||
return err
|
||||
}
|
||||
@ -378,6 +379,12 @@ func (b *Bitcask) Reopen() error {
|
||||
b.mu.Lock()
|
||||
defer b.mu.Unlock()
|
||||
|
||||
return b.reopen()
|
||||
}
|
||||
|
||||
// reopen reloads a bitcask object with index and datafiles
|
||||
// caller of this method should take care of locking
|
||||
func (b *Bitcask) reopen() error {
|
||||
datafiles, lastID, err := loadDatafiles(b.path, b.config.MaxKeySize, b.config.MaxValueSize, b.config.FileFileModeBeforeUmask)
|
||||
if err != nil {
|
||||
return err
|
||||
@ -470,7 +477,10 @@ func (b *Bitcask) Merge() error {
|
||||
if err = mdb.Close(); err != nil {
|
||||
return err
|
||||
}
|
||||
if err = b.Close(); err != nil {
|
||||
// no reads and writes till we reopen
|
||||
b.mu.Lock()
|
||||
defer b.mu.Unlock()
|
||||
if err = b.close(); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
@ -514,7 +524,7 @@ func (b *Bitcask) Merge() error {
|
||||
b.metadata.ReclaimableSpace = 0
|
||||
|
||||
// And finally reopen the database
|
||||
return b.Reopen()
|
||||
return b.reopen()
|
||||
}
|
||||
|
||||
// Open opens the database at the given path with optional options.
|
||||
|
Loading…
Reference in New Issue
Block a user