From 11e62373ccf2ab30afcb4e9e6bd35b16760de960 Mon Sep 17 00:00:00 2001 From: Janos Guljas Date: Fri, 8 Mar 2019 15:51:47 +0100 Subject: [PATCH] swarm/storage/localstore: simplify DB.Close --- swarm/storage/localstore/gc.go | 3 ++- swarm/storage/localstore/gc_test.go | 5 +---- swarm/storage/localstore/localstore.go | 9 +-------- 3 files changed, 4 insertions(+), 13 deletions(-) diff --git a/swarm/storage/localstore/gc.go b/swarm/storage/localstore/gc.go index 1519c7456c..84c4f596d1 100644 --- a/swarm/storage/localstore/gc.go +++ b/swarm/storage/localstore/gc.go @@ -136,7 +136,8 @@ func (db *DB) triggerGarbageCollection() { } // incGCSizeInBatch changes gcSize field value -// by change which can be negative. +// by change which can be negative. This function +// must be called under batchMu lock. func (db *DB) incGCSizeInBatch(batch *leveldb.Batch, change int64) (err error) { if change == 0 { return nil diff --git a/swarm/storage/localstore/gc_test.go b/swarm/storage/localstore/gc_test.go index d4c9f8678b..081e0af80b 100644 --- a/swarm/storage/localstore/gc_test.go +++ b/swarm/storage/localstore/gc_test.go @@ -294,10 +294,7 @@ func TestDB_gcSize(t *testing.T) { } } - // DB.Close writes gc size to disk, so - // Instead calling Close, close the database - // without it. - if err := db.closeWithOptions(false); err != nil { + if err := db.Close(); err != nil { t.Fatal(err) } diff --git a/swarm/storage/localstore/localstore.go b/swarm/storage/localstore/localstore.go index bef56be829..98d4c78816 100644 --- a/swarm/storage/localstore/localstore.go +++ b/swarm/storage/localstore/localstore.go @@ -312,21 +312,14 @@ func New(path string, baseKey []byte, o *Options) (db *DB, err error) { // Close closes the underlying database. func (db *DB) Close() (err error) { - return db.closeWithOptions(true) -} - -// closeWithOptions provides a more control which part of closing -// is done for tests. -func (db *DB) closeWithOptions(writeGCSize bool) (err error) { close(db.close) db.updateGCWG.Wait() // wait for gc worker to // return before closing the shed - timeout := time.After(5 * time.Second) select { case <-db.collectGarbageWorkerDone: - case <-timeout: + case <-time.After(5 * time.Second): log.Error("localstore: collect garbage worker did not return after db close") } return db.shed.Close()