From e45024b9f6b86007e32f4626008ed2f54bfc031c Mon Sep 17 00:00:00 2001 From: maskpp Date: Wed, 28 Aug 2024 23:43:05 +0800 Subject: [PATCH 1/4] handle error --- ethdb/pebble/pebble.go | 32 +++++++++++++++++--------------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/ethdb/pebble/pebble.go b/ethdb/pebble/pebble.go index 8203dd136dea..568b2e745c17 100644 --- a/ethdb/pebble/pebble.go +++ b/ethdb/pebble/pebble.go @@ -293,7 +293,9 @@ func (d *Database) Has(key []byte) (bool, error) { } else if err != nil { return false, err } - closer.Close() + if err = closer.Close(); err != nil { + return false, err + } return true, nil } @@ -308,10 +310,10 @@ func (d *Database) Get(key []byte) ([]byte, error) { if err != nil { return nil, err } - ret := make([]byte, len(dat)) - copy(ret, dat) - closer.Close() - return ret, nil + if err = closer.Close(); err != nil { + return nil, err + } + return common.CopyBytes(dat), nil } // Put inserts the given value into the key-value store. @@ -518,17 +520,17 @@ type batch struct { } // Put inserts the given value into the batch for later committing. -func (b *batch) Put(key, value []byte) error { - b.b.Set(key, value, nil) +func (b *batch) Put(key, value []byte) (err error) { + err = b.b.Set(key, value, nil) b.size += len(key) + len(value) - return nil + return } // Delete inserts the key removal into the batch for later committing. -func (b *batch) Delete(key []byte) error { - b.b.Delete(key, nil) +func (b *batch) Delete(key []byte) (err error) { + err = b.b.Delete(key, nil) b.size += len(key) - return nil + return } // ValueSize retrieves the amount of data queued up for writing. @@ -553,7 +555,7 @@ func (b *batch) Reset() { } // Replay replays the batch contents. -func (b *batch) Replay(w ethdb.KeyValueWriter) error { +func (b *batch) Replay(w ethdb.KeyValueWriter) (bErr error) { reader := b.b.Reader() for { kind, k, v, ok, err := reader.Next() @@ -563,14 +565,14 @@ func (b *batch) Replay(w ethdb.KeyValueWriter) error { // The (k,v) slices might be overwritten if the batch is reset/reused, // and the receiver should copy them if they are to be retained long-term. if kind == pebble.InternalKeyKindSet { - w.Put(k, v) + bErr = w.Put(k, v) } else if kind == pebble.InternalKeyKindDelete { - w.Delete(k) + bErr = w.Delete(k) } else { return fmt.Errorf("unhandled operation, keytype: %v", kind) } } - return nil + return } // pebbleIterator is a wrapper of underlying iterator in storage engine. From 490587d210c0e452c7f95a98b8a5788ac16ecf2f Mon Sep 17 00:00:00 2001 From: maskpp Date: Thu, 29 Aug 2024 07:23:00 +0800 Subject: [PATCH 2/4] handle error --- ethdb/pebble/pebble.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ethdb/pebble/pebble.go b/ethdb/pebble/pebble.go index 568b2e745c17..939a39ccbf65 100644 --- a/ethdb/pebble/pebble.go +++ b/ethdb/pebble/pebble.go @@ -557,7 +557,7 @@ func (b *batch) Reset() { // Replay replays the batch contents. func (b *batch) Replay(w ethdb.KeyValueWriter) (bErr error) { reader := b.b.Reader() - for { + for bErr == nil { kind, k, v, ok, err := reader.Next() if !ok || err != nil { break From f671be40b4bc51f3cb0490489dae8c213912105c Mon Sep 17 00:00:00 2001 From: maskpp Date: Thu, 29 Aug 2024 16:15:28 +0800 Subject: [PATCH 3/4] fix comments --- ethdb/pebble/pebble.go | 31 ++++++++++++++++++------------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/ethdb/pebble/pebble.go b/ethdb/pebble/pebble.go index 939a39ccbf65..ef3cf7c9a765 100644 --- a/ethdb/pebble/pebble.go +++ b/ethdb/pebble/pebble.go @@ -310,10 +310,12 @@ func (d *Database) Get(key []byte) ([]byte, error) { if err != nil { return nil, err } + ret := make([]byte, len(dat)) + copy(ret, dat) if err = closer.Close(); err != nil { return nil, err } - return common.CopyBytes(dat), nil + return ret, nil } // Put inserts the given value into the key-value store. @@ -520,17 +522,17 @@ type batch struct { } // Put inserts the given value into the batch for later committing. -func (b *batch) Put(key, value []byte) (err error) { - err = b.b.Set(key, value, nil) +func (b *batch) Put(key, value []byte) error { + err := b.b.Set(key, value, nil) b.size += len(key) + len(value) - return + return err } // Delete inserts the key removal into the batch for later committing. -func (b *batch) Delete(key []byte) (err error) { - err = b.b.Delete(key, nil) +func (b *batch) Delete(key []byte) error { + err := b.b.Delete(key, nil) b.size += len(key) - return + return err } // ValueSize retrieves the amount of data queued up for writing. @@ -555,24 +557,27 @@ func (b *batch) Reset() { } // Replay replays the batch contents. -func (b *batch) Replay(w ethdb.KeyValueWriter) (bErr error) { +func (b *batch) Replay(w ethdb.KeyValueWriter) error { reader := b.b.Reader() - for bErr == nil { + for { kind, k, v, ok, err := reader.Next() if !ok || err != nil { - break + return err } // The (k,v) slices might be overwritten if the batch is reset/reused, // and the receiver should copy them if they are to be retained long-term. if kind == pebble.InternalKeyKindSet { - bErr = w.Put(k, v) + if err = w.Put(k, v); err != nil { + return err + } } else if kind == pebble.InternalKeyKindDelete { - bErr = w.Delete(k) + if err = w.Delete(k); err != nil { + return err + } } else { return fmt.Errorf("unhandled operation, keytype: %v", kind) } } - return } // pebbleIterator is a wrapper of underlying iterator in storage engine. From 0cc283e747b30d36ada6404680dc03e6aa2cde49 Mon Sep 17 00:00:00 2001 From: maskpp Date: Fri, 30 Aug 2024 18:50:38 +0800 Subject: [PATCH 4/4] handle error --- ethdb/pebble/pebble.go | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/ethdb/pebble/pebble.go b/ethdb/pebble/pebble.go index ef3cf7c9a765..7a3be797a3b7 100644 --- a/ethdb/pebble/pebble.go +++ b/ethdb/pebble/pebble.go @@ -523,16 +523,20 @@ type batch struct { // Put inserts the given value into the batch for later committing. func (b *batch) Put(key, value []byte) error { - err := b.b.Set(key, value, nil) + if err := b.b.Set(key, value, nil); err != nil { + return err + } b.size += len(key) + len(value) - return err + return nil } // Delete inserts the key removal into the batch for later committing. func (b *batch) Delete(key []byte) error { - err := b.b.Delete(key, nil) + if err := b.b.Delete(key, nil); err != nil { + return err + } b.size += len(key) - return err + return nil } // ValueSize retrieves the amount of data queued up for writing.