diff --git a/database/ffldb/blockio.go b/database/ffldb/blockio.go index ae71a891..2ed4eccf 100644 --- a/database/ffldb/blockio.go +++ b/database/ffldb/blockio.go @@ -37,7 +37,7 @@ const ( // maxOpenFiles is the max number of open files to maintain in the // open blocks cache. Note that this does not include the current // write file, so there will typically be one more than this value open. - maxOpenFiles = 25 + maxOpenFiles = 40 // maxBlockFileSize is the maximum size for each file used to store // blocks. diff --git a/database/ffldb/db.go b/database/ffldb/db.go index 0d6acd51..ee6d55f0 100644 --- a/database/ffldb/db.go +++ b/database/ffldb/db.go @@ -2001,10 +2001,11 @@ func openDB(dbPath string, network wire.BitcoinNet, create bool) (database.DB, e // Open the metadata database (will create it if needed). opts := opt.Options{ - ErrorIfExist: create, - Strict: opt.DefaultStrict, - Compression: opt.NoCompression, - Filter: filter.NewBloomFilter(10), + ErrorIfExist: create, + Strict: opt.DefaultStrict, + Compression: opt.NoCompression, + Filter: filter.NewBloomFilter(10), + OpenFilesCacheCapacity: 2000, } ldb, err := leveldb.OpenFile(metadataDbPath, &opts) if err != nil { diff --git a/database/ffldb/dbcache.go b/database/ffldb/dbcache.go index 15c554a7..1bc21a35 100644 --- a/database/ffldb/dbcache.go +++ b/database/ffldb/dbcache.go @@ -23,7 +23,7 @@ const ( // defaultFlushSecs is the default number of seconds to use as a // threshold in between database cache flushes when the cache size has // not been exceeded. - defaultFlushSecs = 300 // 5 minutes + defaultFlushSecs = 120 // 2 minutes // ldbBatchHeaderSize is the size of a leveldb batch header which // includes the sequence header and record counter. @@ -499,10 +499,12 @@ func (c *dbCache) flush() error { // Since the cached keys to be added and removed use an immutable treap, // a snapshot is simply obtaining the root of the tree under the lock // which is used to atomically swap the root. - c.cacheLock.RLock() + c.cacheLock.Lock() cachedKeys := c.cachedKeys cachedRemove := c.cachedRemove - c.cacheLock.RUnlock() + c.cachedKeys = treap.NewImmutable() + c.cachedRemove = treap.NewImmutable() + c.cacheLock.Unlock() // Nothing to do if there is no data to flush. if cachedKeys.Len() == 0 && cachedRemove.Len() == 0 { @@ -514,12 +516,6 @@ func (c *dbCache) flush() error { return err } - // Clear the cache since it has been flushed. - c.cacheLock.Lock() - c.cachedKeys = treap.NewImmutable() - c.cachedRemove = treap.NewImmutable() - c.cacheLock.Unlock() - return nil }