mirror of
https://github.com/taigrr/bitcask
synced 2025-01-18 04:03:17 -08:00
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.
|
// database.
|
||||||
func (b *Bitcask) Close() error {
|
func (b *Bitcask) Close() error {
|
||||||
b.mu.RLock()
|
b.mu.RLock()
|
||||||
|
defer b.mu.RUnlock()
|
||||||
|
|
||||||
defer func() {
|
return b.close()
|
||||||
b.mu.RUnlock()
|
}
|
||||||
b.Flock.Unlock()
|
|
||||||
}()
|
|
||||||
|
|
||||||
|
func (b *Bitcask) close() error {
|
||||||
|
defer b.Flock.Unlock()
|
||||||
if err := b.saveIndex(); err != nil {
|
if err := b.saveIndex(); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -378,6 +379,12 @@ func (b *Bitcask) Reopen() error {
|
|||||||
b.mu.Lock()
|
b.mu.Lock()
|
||||||
defer b.mu.Unlock()
|
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)
|
datafiles, lastID, err := loadDatafiles(b.path, b.config.MaxKeySize, b.config.MaxValueSize, b.config.FileFileModeBeforeUmask)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@ -470,7 +477,10 @@ func (b *Bitcask) Merge() error {
|
|||||||
if err = mdb.Close(); err != nil {
|
if err = mdb.Close(); err != nil {
|
||||||
return err
|
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
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -514,7 +524,7 @@ func (b *Bitcask) Merge() error {
|
|||||||
b.metadata.ReclaimableSpace = 0
|
b.metadata.ReclaimableSpace = 0
|
||||||
|
|
||||||
// And finally reopen the database
|
// And finally reopen the database
|
||||||
return b.Reopen()
|
return b.reopen()
|
||||||
}
|
}
|
||||||
|
|
||||||
// Open opens the database at the given path with optional options.
|
// Open opens the database at the given path with optional options.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user