From d0fd6c6c8269b20c87eb353af8f8ada53b8a69c0 Mon Sep 17 00:00:00 2001 From: greatroar <61184462+greatroar@users.noreply.github.com> Date: Sun, 13 Mar 2022 20:53:34 +0100 Subject: [PATCH] lib/db: Make err(Closed|NotFound) values (#8215) --- lib/db/backend/backend.go | 24 +++++++----------------- lib/db/backend/leveldb_backend.go | 10 +++++----- 2 files changed, 12 insertions(+), 22 deletions(-) diff --git a/lib/db/backend/backend.go b/lib/db/backend/backend.go index 7ef26c1ad..146a38520 100644 --- a/lib/db/backend/backend.go +++ b/lib/db/backend/backend.go @@ -133,23 +133,13 @@ func OpenMemory() Backend { return OpenLevelDBMemory() } -type errClosed struct{} +var ( + errClosed = errors.New("database is closed") + errNotFound = errors.New("key not found") +) -func (*errClosed) Error() string { return "database is closed" } - -type errNotFound struct{} - -func (*errNotFound) Error() string { return "key not found" } - -func IsClosed(err error) bool { - e := &errClosed{} - return errors.As(err, &e) -} - -func IsNotFound(err error) bool { - e := &errNotFound{} - return errors.As(err, &e) -} +func IsClosed(err error) bool { return errors.Is(err, errClosed) } +func IsNotFound(err error) bool { return errors.Is(err, errNotFound) } // releaser manages counting on top of a waitgroup type releaser struct { @@ -183,7 +173,7 @@ func (cg *closeWaitGroup) Add(i int) error { cg.closeMut.RLock() defer cg.closeMut.RUnlock() if cg.closed { - return &errClosed{} + return errClosed } cg.WaitGroup.Add(i) return nil diff --git a/lib/db/backend/leveldb_backend.go b/lib/db/backend/leveldb_backend.go index c7882ecb7..577ff4b82 100644 --- a/lib/db/backend/leveldb_backend.go +++ b/lib/db/backend/leveldb_backend.go @@ -223,11 +223,11 @@ func (it *leveldbIterator) Error() error { // wrapLeveldbErr wraps errors so that the backend package can recognize them func wrapLeveldbErr(err error) error { - if err == leveldb.ErrClosed { - return &errClosed{} - } - if err == leveldb.ErrNotFound { - return &errNotFound{} + switch err { + case leveldb.ErrClosed: + return errClosed + case leveldb.ErrNotFound: + return errNotFound } return err }