Skip to content

Commit fa865e9

Browse files
committed
Improve function GetStateRangeScanIterator
- Close iterators if newItrCombiner fails. - Handle nil iterators returned without errors. - Improve error messages for debugging. Signed-off-by: David Enyeart <enyeart@us.ibm.com>
1 parent d332a6d commit fa865e9

File tree

1 file changed

+13
-2
lines changed

1 file changed

+13
-2
lines changed

core/ledger/kvledger/txmgmt/queryutil/query_executer_combiner.go

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ SPDX-License-Identifier: Apache-2.0
77
package queryutil
88

99
import (
10+
"fmt"
11+
1012
"github.com/hyperledger/fabric-lib-go/common/flogging"
1113
commonledger "github.com/hyperledger/fabric/common/ledger"
1214
"github.com/hyperledger/fabric/core/ledger/kvledger/txmgmt/privacyenabledstate"
@@ -56,18 +58,27 @@ func (c *QECombiner) GetState(namespace string, key string) ([]byte, error) {
5658
// sort order of the key
5759
func (c *QECombiner) GetStateRangeScanIterator(namespace string, startKey string, endKey string) (commonledger.ResultsIterator, error) {
5860
var itrs []statedb.ResultsIterator
59-
for _, qe := range c.QueryExecuters {
61+
for i, qe := range c.QueryExecuters {
6062
itr, err := qe.GetStateRangeScanIterator(namespace, startKey, endKey)
6163
if err != nil {
6264
for _, itr := range itrs {
6365
itr.Close()
6466
}
65-
return nil, err
67+
return nil, fmt.Errorf("failed to get iterator from QueryExecuter %d: %w", i, err)
68+
}
69+
if itr == nil {
70+
for _, itr := range itrs {
71+
itr.Close()
72+
}
73+
return nil, fmt.Errorf("received nil iterator from QueryExecuter %d", i)
6674
}
6775
itrs = append(itrs, itr)
6876
}
6977
itrCombiner, err := newItrCombiner(namespace, itrs)
7078
if err != nil {
79+
for _, itr := range itrs {
80+
itr.Close()
81+
}
7182
return nil, err
7283
}
7384
return itrCombiner, nil

0 commit comments

Comments
 (0)