Fixed concurrency bug with reopening datafiles when maxDatafileSize is exceeded

This commit is contained in:
James Mills 2019-03-22 17:59:07 +10:00
parent c593bc966f
commit 7149cb9afe
No known key found for this signature in database
GPG Key ID: AC4C014F1440EBD6

@ -8,6 +8,7 @@ import (
"os"
"path/filepath"
"strings"
"sync"
"github.com/gofrs/flock"
"github.com/prologic/trie"
@ -40,6 +41,8 @@ var (
// and in-memory hash of key/value pairs as per the Bitcask paper and seen
// in the Riak database.
type Bitcask struct {
mu sync.RWMutex
*flock.Flock
config *config
@ -175,6 +178,9 @@ func (b *Bitcask) Fold(f func(key string) error) error {
}
func (b *Bitcask) put(key string, value []byte) (int64, error) {
b.mu.Lock()
defer b.mu.Unlock()
size := b.curr.Size()
if size >= int64(b.config.maxDatafileSize) {
err := b.curr.Close()