From df27fe73918b58ed5586339e067cd1bae5e124b6 Mon Sep 17 00:00:00 2001 From: lash Date: Wed, 25 Oct 2017 18:35:58 +0200 Subject: [PATCH] swarm/storage: Fix chunk overwrite on store restart - Upon re-open of store, last chunk got overwritten - Underlying db never closed from dpa and localstore - LocalDPA used different hash algo for verification than chunk hasher --- swarm/storage/dbstore.go | 9 +++++++++ swarm/storage/dpa.go | 8 ++++++-- swarm/storage/localstore.go | 4 +++- 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/swarm/storage/dbstore.go b/swarm/storage/dbstore.go index 46a5c16ccc..4dec144755 100644 --- a/swarm/storage/dbstore.go +++ b/swarm/storage/dbstore.go @@ -95,10 +95,19 @@ func NewDbStore(path string, hash SwarmHasher, capacity uint64, radius int) (s * data, _ := s.db.Get(keyEntryCnt) s.entryCnt = BytesToU64(data) + if len(data) > 0 { + s.entryCnt++ + } data, _ = s.db.Get(keyAccessCnt) s.accessCnt = BytesToU64(data) + if len(data) > 0 { + s.accessCnt++ + } data, _ = s.db.Get(keyDataIdx) s.dataIdx = BytesToU64(data) + if len(data) > 0 { + s.dataIdx++ + } s.gcPos, _ = s.db.Get(keyGCPos) if s.gcPos == nil { s.gcPos = s.gcStartPos diff --git a/swarm/storage/dpa.go b/swarm/storage/dpa.go index 44a2669f12..23fda3abf0 100644 --- a/swarm/storage/dpa.go +++ b/swarm/storage/dpa.go @@ -63,9 +63,12 @@ type DPA struct { } // for testing locally -func NewLocalDPA(datadir string) (*DPA, error) { +func NewLocalDPA(datadir string, hashalgorithm string) (*DPA, error) { - hash := MakeHashFunc("SHA256") + if hashalgorithm == "" { + hashalgorithm = "SHA3" + } + hash := MakeHashFunc(hashalgorithm) dbStore, err := NewDbStore(datadir, hash, singletonSwarmDbCapacity, 0) if err != nil { @@ -116,6 +119,7 @@ func (self *DPA) Start() { func (self *DPA) Stop() { self.lock.Lock() + self.Close() defer self.lock.Unlock() if !self.running { return diff --git a/swarm/storage/localstore.go b/swarm/storage/localstore.go index b442e6cc54..bf9eeb2e77 100644 --- a/swarm/storage/localstore.go +++ b/swarm/storage/localstore.go @@ -74,4 +74,6 @@ func (self *LocalStore) Get(key Key) (chunk *Chunk, err error) { } // Close local store -func (self *LocalStore) Close() {} +func (self *LocalStore) Close() { + self.DbStore.Close() +}