From 9f89cf810d9f7e5f3c660a2176c2ac145e65be5b Mon Sep 17 00:00:00 2001 From: Andrew Ashikhmin <34320705+yperbasis@users.noreply.github.com> Date: Sat, 23 May 2020 12:27:05 +0200 Subject: [PATCH] mutation.puts.Size was confused for its number of entries (#570) --- ethdb/mutation.go | 4 ++-- ethdb/mutation_puts.go | 12 +++++++++--- ethdb/mutation_puts_test.go | 34 ---------------------------------- 3 files changed, 11 insertions(+), 39 deletions(-) delete mode 100644 ethdb/mutation_puts_test.go diff --git a/ethdb/mutation.go b/ethdb/mutation.go index 14f947ad72..d793004ea5 100644 --- a/ethdb/mutation.go +++ b/ethdb/mutation.go @@ -160,7 +160,7 @@ func (m *mutation) Commit() (uint64, error) { } m.mu.Lock() defer m.mu.Unlock() - tuples := make(MultiPutTuples, 0, m.puts.Size()*3) + tuples := make(MultiPutTuples, 0, m.puts.Len()*3) for bucketStr, bt := range m.puts.mp { bucketB := []byte(bucketStr) for key := range bt { @@ -188,7 +188,7 @@ func (m *mutation) Rollback() { func (m *mutation) Keys() ([][]byte, error) { m.mu.RLock() defer m.mu.RUnlock() - tuples := common.NewTuples(m.puts.Size(), 2, 1) + tuples := common.NewTuples(m.puts.Len(), 2, 1) for bucketStr, bt := range m.puts.mp { bucketB := []byte(bucketStr) for key := range bt { diff --git a/ethdb/mutation_puts.go b/ethdb/mutation_puts.go index 5413b10133..894e746093 100644 --- a/ethdb/mutation_puts.go +++ b/ethdb/mutation_puts.go @@ -3,12 +3,12 @@ package ethdb type puts struct { mp map[string]putsBucket //map[bucket]putsBucket size int + len int } func newPuts() *puts { return &puts{ - mp: make(map[string]putsBucket), - size: 0, + mp: make(map[string]putsBucket), } } @@ -19,14 +19,16 @@ func (p *puts) set(bucket, key, value []byte) { bucketPuts = make(putsBucket) p.mp[string(bucket)] = bucketPuts } + oldLen := len(bucketPuts) skey := string(key) if oldVal, ok := bucketPuts[skey]; ok { p.size -= len(oldVal) } else { p.size += len(skey) + 32 // Add fixed overhead per key } - bucketPuts[string(key)] = value + bucketPuts[skey] = value p.size += len(value) + p.len += len(bucketPuts) - oldLen } func (p *puts) get(bucket, key []byte) ([]byte, bool) { @@ -42,6 +44,10 @@ func (p *puts) Delete(bucket, key []byte) { p.set(bucket, key, nil) } +func (p *puts) Len() int { + return p.len +} + func (p *puts) Size() int { return p.size } diff --git a/ethdb/mutation_puts_test.go b/ethdb/mutation_puts_test.go deleted file mode 100644 index de225aadee..0000000000 --- a/ethdb/mutation_puts_test.go +++ /dev/null @@ -1,34 +0,0 @@ -package ethdb - -// -//func TestIndexMapper(t *testing.T) { -// im:=indexMapper{ -// cache: make(map[string]*dbutils.HistoryIndexBytes), -// chunkIDs: make(map[string][]uint64), -// } -// -// key:=[]byte("some key") -// if err:=im.Put(key,dbutils.NewHistoryIndex().Append(1)); err!=nil { -// t.Fatal(1, err) -// } -// index,err:=im.LastChunk(key) -// if err!=nil { -// t.Fatal(err) -// } -// if v,ok:= index.FirstElement(); !ok || v!=1 { -// t.Fatal(v, ok,im) -// } -// -// if err:=im.Put(key,dbutils.NewHistoryIndex().Append(2)); err!=nil { -// t.Fatal(2, err) -// } -// -// index,err=im.LastChunk(key) -// if err!=nil { -// t.Fatal(err) -// } -// -// if v,ok:= index.FirstElement(); !ok || v!=2 { -// t.Fatal(v, ok, im) -// } -//} -- GitLab