@@ -130,7 +130,7 @@ func TraverseByPrefix(r storage.Reader, prefix []byte, iterFunc IterationFunc, o
130130// When this returned function is executed (and only then), it will write into the `keyExists` whether
131131// the key exists.
132132// No errors are expected during normal operation.
133- func KeyExists (r storage.Reader , key []byte ) (bool , error ) {
133+ func KeyExists (r storage.Reader , key []byte ) (exist bool , errExit error ) {
134134 _ , closer , err := r .Get (key )
135135 if err != nil {
136136 // the key does not exist in the database
@@ -140,7 +140,9 @@ func KeyExists(r storage.Reader, key []byte) (bool, error) {
140140 // exception while checking for the key
141141 return false , irrecoverable .NewExceptionf ("could not load data: %w" , err )
142142 }
143- defer closer .Close ()
143+ defer func () {
144+ errExit = closer .Close ()
145+ }()
144146
145147 // the key does exist in the database
146148 return true , nil
@@ -153,13 +155,15 @@ func KeyExists(r storage.Reader, key []byte) (bool, error) {
153155// - storage.ErrNotFound if the key does not exist in the database
154156// - generic error in case of unexpected failure from the database layer, or failure
155157// to decode an existing database value
156- func RetrieveByKey (r storage.Reader , key []byte , entity interface {}) error {
158+ func RetrieveByKey (r storage.Reader , key []byte , entity interface {}) ( errExit error ) {
157159 val , closer , err := r .Get (key )
158160 if err != nil {
159161 return err
160162 }
161163
162- defer closer .Close ()
164+ defer func () {
165+ errExit = closer .Close ()
166+ }()
163167
164168 err = msgpack .Unmarshal (val , entity )
165169 if err != nil {
@@ -172,7 +176,7 @@ func RetrieveByKey(r storage.Reader, key []byte, entity interface{}) error {
172176// keys with the format prefix` + `height` (where "+" denotes concatenation of binary strings). The height
173177// is encoded as Big-Endian (entries with numerically smaller height have lexicographically smaller key).
174178// The function finds the *highest* key with the given prefix and height equal to or below the given height.
175- func FindHighestAtOrBelowByPrefix (r storage.Reader , prefix []byte , height uint64 , entity interface {}) error {
179+ func FindHighestAtOrBelowByPrefix (r storage.Reader , prefix []byte , height uint64 , entity interface {}) ( errExit error ) {
176180 if len (prefix ) == 0 {
177181 return fmt .Errorf ("prefix must not be empty" )
178182 }
@@ -182,7 +186,9 @@ func FindHighestAtOrBelowByPrefix(r storage.Reader, prefix []byte, height uint64
182186 if err != nil {
183187 return fmt .Errorf ("can not create iterator: %w" , err )
184188 }
185- defer it .Close ()
189+ defer func () {
190+ errExit = it .Close ()
191+ }()
186192
187193 var highestKey []byte
188194
@@ -203,7 +209,9 @@ func FindHighestAtOrBelowByPrefix(r storage.Reader, prefix []byte, height uint64
203209 return err
204210 }
205211
206- defer closer .Close ()
212+ defer func () {
213+ errExit = closer .Close ()
214+ }()
207215
208216 err = msgpack .Unmarshal (val , entity )
209217 if err != nil {
0 commit comments