Throttle compaction on temporary DB

This commit is contained in:
Andrey Smirnov
2017-02-23 01:01:17 +03:00
parent f2dc4eeec9
commit 4c06e26d85
2 changed files with 15 additions and 5 deletions
+14 -4
View File
@@ -51,18 +51,24 @@ var (
_ Storage = &levelDB{} _ Storage = &levelDB{}
) )
func internalOpen(path string) (*leveldb.DB, error) { func internalOpen(path string, throttleCompaction bool) (*leveldb.DB, error) {
o := &opt.Options{ o := &opt.Options{
Filter: filter.NewBloomFilter(10), Filter: filter.NewBloomFilter(10),
OpenFilesCacheCapacity: 256, OpenFilesCacheCapacity: 256,
} }
if throttleCompaction {
o.CompactionL0Trigger = 32
o.WriteL0PauseTrigger = 96
o.WriteL0SlowdownTrigger = 64
}
return leveldb.OpenFile(path, o) return leveldb.OpenFile(path, o)
} }
// OpenDB opens (creates) LevelDB database // OpenDB opens (creates) LevelDB database
func OpenDB(path string) (Storage, error) { func OpenDB(path string) (Storage, error) {
db, err := internalOpen(path) db, err := internalOpen(path, false)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@@ -94,7 +100,11 @@ func (l *levelDB) CreateTemporary() (Storage, error) {
return nil, err return nil, err
} }
return OpenDB(tempdir) db, err := internalOpen(tempdir, true)
if err != nil {
return nil, err
}
return &levelDB{db: db, path: tempdir}, nil
} }
// Get key value from database // Get key value from database
@@ -212,7 +222,7 @@ func (l *levelDB) ReOpen() error {
} }
var err error var err error
l.db, err = internalOpen(l.path) l.db, err = internalOpen(l.path, false)
return err return err
} }
+1 -1
View File
@@ -50,7 +50,7 @@ func (index *ContentsIndex) Empty() bool {
// WriteTo dumps sorted mapping of files to qualified package names // WriteTo dumps sorted mapping of files to qualified package names
func (index *ContentsIndex) WriteTo(w io.Writer) (int64, error) { func (index *ContentsIndex) WriteTo(w io.Writer) (int64, error) {
// For performance reasons push method wrote on key per path and package // For performance reasons push method wrote on key per path and package
// in this method we now need to merge all pkg with have the same path // in this method we now need to merge all packages which have the same path
// and write it to contents index file // and write it to contents index file
var n int64 var n int64