ldbstore: Reduce the max number of open file handles, but make configurable.

This commit is contained in:
Aaron Boodman
2015-09-03 13:21:46 -07:00
parent e70286d838
commit 326dfb7953
2 changed files with 8 additions and 6 deletions

View File

@@ -30,14 +30,14 @@ type LevelDBStore struct {
putCount int // for testing
}
func NewLevelDBStore(dir string) *LevelDBStore {
func NewLevelDBStore(dir string, maxFileHandles int) *LevelDBStore {
d.Exp.NotEmpty(dir)
d.Exp.NoError(os.MkdirAll(dir, 0700))
db, err := leveldb.OpenFile(dir, &opt.Options{
Compression: opt.NoCompression,
Filter: filter.NewBloomFilter(10), // 10 bits/key
OpenFilesCacheCapacity: 240, // To stay under OSX 255 max open fd (plus 15, for good measure, because using 255 still hit the limit)
WriteBuffer: 1 << 24, // 16MiB
OpenFilesCacheCapacity: maxFileHandles,
WriteBuffer: 1 << 24, // 16MiB
})
d.Chk.NoError(err)
return &LevelDBStore{db, &sync.Mutex{}, 0}
@@ -100,12 +100,14 @@ func (l *LevelDBStore) write(ref ref.Ref, buff *bytes.Buffer) {
}
type ldbStoreFlags struct {
dir *string
dir *string
maxFileHandles *int
}
func levelDBFlags(prefix string) ldbStoreFlags {
return ldbStoreFlags{
flag.String(prefix+"ldb", "", "directory to use for a LevelDB-backed chunkstore"),
flag.Int(prefix+"ldb-max-file-handles", 24, "max number of open file handles"),
}
}
@@ -113,6 +115,6 @@ func (f ldbStoreFlags) createStore() ChunkStore {
if *f.dir == "" {
return nil
} else {
return NewLevelDBStore(*f.dir)
return NewLevelDBStore(*f.dir, *f.maxFileHandles)
}
}

View File

@@ -21,7 +21,7 @@ func (suite *LevelDBStoreTestSuite) SetupTest() {
var err error
suite.dir, err = ioutil.TempDir(os.TempDir(), "")
suite.NoError(err)
store := NewLevelDBStore(suite.dir)
store := NewLevelDBStore(suite.dir, 0)
suite.putCountFn = func() int {
return store.putCount
}