From d347d13da2efdde78b7015cc8255db62a55c4b39 Mon Sep 17 00:00:00 2001 From: senthil Date: Wed, 8 Apr 2020 19:34:04 +0530 Subject: [PATCH] mv rangequery option validation to ledger/internal The range query receives metadata such as pagination limit. ValidateRangeMetadata() validates the received metadata. As the ValidateRangeMetadata() is present in statedb, it is imported in both statecouchdb and stateleveldb packages. As we want these packages to be self-sufficient and only import ledger/internal packages, we move the ValidateRangeMetadata() to ledger/interal/rangequery. Further, the term metadata is confusing with the statemetadata which stores the key-based endorsement. Hence, we replace Metadata in range query API with options. Signed-off-by: senthil --- core/chaincode/handler.go | 2 +- core/chaincode/mock/tx_simulator.go | 80 +++++++++---------- .../txvalidator/mocks/query_executor.go | 19 ++--- .../txvalidator/v14/validator_test.go | 4 +- .../txvalidator/v20/mocks/query_executor.go | 19 ++--- core/common/privdata/mock/query_executor.go | 80 +++++++++---------- core/endorser/fake/query_executor.go | 80 +++++++++---------- core/endorser/fake/tx_simulator.go | 80 +++++++++---------- .../internal/rangequery/options_validation.go | 34 ++++++++ .../rangequery/options_validation_test.go | 40 ++++++++++ .../txmgmt/statedb/commontests/test_common.go | 5 +- .../txmgmt/statedb/mock/versioned_db.go | 80 +++++++++---------- .../statedb/statecouchdb/statecouchdb.go | 22 +++-- .../ledger/kvledger/txmgmt/statedb/statedb.go | 26 +----- .../kvledger/txmgmt/statedb/statedb_test.go | 29 ------- .../statedb/stateleveldb/stateleveldb.go | 20 +++-- .../txmgmt/txmgr/lockbasedtxmgr/helper.go | 10 +-- .../lockbased_query_executer.go | 8 +- .../lockbasedtxmgr/lockbased_tx_simulator.go | 6 +- .../txmgmt/txmgr/lockbasedtxmgr/txmgr_test.go | 6 +- .../txmgmt/validator/valimpl/mock/txsim.go | 80 +++++++++---------- core/ledger/ledger_interface.go | 6 +- core/ledger/mock/query_executor.go | 80 +++++++++---------- core/ledger/mock/tx_simulator.go | 80 +++++++++---------- core/scc/lscc/mock/query_executor.go | 80 +++++++++---------- 25 files changed, 495 insertions(+), 481 deletions(-) create mode 100644 core/ledger/internal/rangequery/options_validation.go create mode 100644 core/ledger/internal/rangequery/options_validation_test.go diff --git a/core/chaincode/handler.go b/core/chaincode/handler.go index 0d27d1c096c..eb838ffffe6 100644 --- a/core/chaincode/handler.go +++ b/core/chaincode/handler.go @@ -743,7 +743,7 @@ func (h *Handler) HandleGetStateByRange(msg *pb.ChaincodeMessage, txContext *Tra startKey = metadata.Bookmark } } - rangeIter, err = txContext.TXSimulator.GetStateRangeScanIteratorWithMetadata(namespaceID, + rangeIter, err = txContext.TXSimulator.GetStateRangeScanIteratorWithOptions(namespaceID, startKey, getStateByRange.EndKey, paginationInfo) } else { rangeIter, err = txContext.TXSimulator.GetStateRangeScanIterator(namespaceID, getStateByRange.StartKey, getStateByRange.EndKey) diff --git a/core/chaincode/mock/tx_simulator.go b/core/chaincode/mock/tx_simulator.go index f7bd19ad87a..1795147a43b 100644 --- a/core/chaincode/mock/tx_simulator.go +++ b/core/chaincode/mock/tx_simulator.go @@ -266,19 +266,19 @@ type TxSimulator struct { result1 ledger.ResultsIterator result2 error } - GetStateRangeScanIteratorWithMetadataStub func(string, string, string, map[string]interface{}) (ledgera.QueryResultsIterator, error) - getStateRangeScanIteratorWithMetadataMutex sync.RWMutex - getStateRangeScanIteratorWithMetadataArgsForCall []struct { + GetStateRangeScanIteratorWithOptionsStub func(string, string, string, map[string]interface{}) (ledgera.QueryResultsIterator, error) + getStateRangeScanIteratorWithOptionsMutex sync.RWMutex + getStateRangeScanIteratorWithOptionsArgsForCall []struct { arg1 string arg2 string arg3 string arg4 map[string]interface{} } - getStateRangeScanIteratorWithMetadataReturns struct { + getStateRangeScanIteratorWithOptionsReturns struct { result1 ledgera.QueryResultsIterator result2 error } - getStateRangeScanIteratorWithMetadataReturnsOnCall map[int]struct { + getStateRangeScanIteratorWithOptionsReturnsOnCall map[int]struct { result1 ledgera.QueryResultsIterator result2 error } @@ -1563,67 +1563,67 @@ func (fake *TxSimulator) GetStateRangeScanIteratorReturnsOnCall(i int, result1 l }{result1, result2} } -func (fake *TxSimulator) GetStateRangeScanIteratorWithMetadata(arg1 string, arg2 string, arg3 string, arg4 map[string]interface{}) (ledgera.QueryResultsIterator, error) { - fake.getStateRangeScanIteratorWithMetadataMutex.Lock() - ret, specificReturn := fake.getStateRangeScanIteratorWithMetadataReturnsOnCall[len(fake.getStateRangeScanIteratorWithMetadataArgsForCall)] - fake.getStateRangeScanIteratorWithMetadataArgsForCall = append(fake.getStateRangeScanIteratorWithMetadataArgsForCall, struct { +func (fake *TxSimulator) GetStateRangeScanIteratorWithOptions(arg1 string, arg2 string, arg3 string, arg4 map[string]interface{}) (ledgera.QueryResultsIterator, error) { + fake.getStateRangeScanIteratorWithOptionsMutex.Lock() + ret, specificReturn := fake.getStateRangeScanIteratorWithOptionsReturnsOnCall[len(fake.getStateRangeScanIteratorWithOptionsArgsForCall)] + fake.getStateRangeScanIteratorWithOptionsArgsForCall = append(fake.getStateRangeScanIteratorWithOptionsArgsForCall, struct { arg1 string arg2 string arg3 string arg4 map[string]interface{} }{arg1, arg2, arg3, arg4}) - fake.recordInvocation("GetStateRangeScanIteratorWithMetadata", []interface{}{arg1, arg2, arg3, arg4}) - fake.getStateRangeScanIteratorWithMetadataMutex.Unlock() - if fake.GetStateRangeScanIteratorWithMetadataStub != nil { - return fake.GetStateRangeScanIteratorWithMetadataStub(arg1, arg2, arg3, arg4) + fake.recordInvocation("GetStateRangeScanIteratorWithOptions", []interface{}{arg1, arg2, arg3, arg4}) + fake.getStateRangeScanIteratorWithOptionsMutex.Unlock() + if fake.GetStateRangeScanIteratorWithOptionsStub != nil { + return fake.GetStateRangeScanIteratorWithOptionsStub(arg1, arg2, arg3, arg4) } if specificReturn { return ret.result1, ret.result2 } - fakeReturns := fake.getStateRangeScanIteratorWithMetadataReturns + fakeReturns := fake.getStateRangeScanIteratorWithOptionsReturns return fakeReturns.result1, fakeReturns.result2 } -func (fake *TxSimulator) GetStateRangeScanIteratorWithMetadataCallCount() int { - fake.getStateRangeScanIteratorWithMetadataMutex.RLock() - defer fake.getStateRangeScanIteratorWithMetadataMutex.RUnlock() - return len(fake.getStateRangeScanIteratorWithMetadataArgsForCall) +func (fake *TxSimulator) GetStateRangeScanIteratorWithOptionsCallCount() int { + fake.getStateRangeScanIteratorWithOptionsMutex.RLock() + defer fake.getStateRangeScanIteratorWithOptionsMutex.RUnlock() + return len(fake.getStateRangeScanIteratorWithOptionsArgsForCall) } -func (fake *TxSimulator) GetStateRangeScanIteratorWithMetadataCalls(stub func(string, string, string, map[string]interface{}) (ledgera.QueryResultsIterator, error)) { - fake.getStateRangeScanIteratorWithMetadataMutex.Lock() - defer fake.getStateRangeScanIteratorWithMetadataMutex.Unlock() - fake.GetStateRangeScanIteratorWithMetadataStub = stub +func (fake *TxSimulator) GetStateRangeScanIteratorWithOptionsCalls(stub func(string, string, string, map[string]interface{}) (ledgera.QueryResultsIterator, error)) { + fake.getStateRangeScanIteratorWithOptionsMutex.Lock() + defer fake.getStateRangeScanIteratorWithOptionsMutex.Unlock() + fake.GetStateRangeScanIteratorWithOptionsStub = stub } -func (fake *TxSimulator) GetStateRangeScanIteratorWithMetadataArgsForCall(i int) (string, string, string, map[string]interface{}) { - fake.getStateRangeScanIteratorWithMetadataMutex.RLock() - defer fake.getStateRangeScanIteratorWithMetadataMutex.RUnlock() - argsForCall := fake.getStateRangeScanIteratorWithMetadataArgsForCall[i] +func (fake *TxSimulator) GetStateRangeScanIteratorWithOptionsArgsForCall(i int) (string, string, string, map[string]interface{}) { + fake.getStateRangeScanIteratorWithOptionsMutex.RLock() + defer fake.getStateRangeScanIteratorWithOptionsMutex.RUnlock() + argsForCall := fake.getStateRangeScanIteratorWithOptionsArgsForCall[i] return argsForCall.arg1, argsForCall.arg2, argsForCall.arg3, argsForCall.arg4 } -func (fake *TxSimulator) GetStateRangeScanIteratorWithMetadataReturns(result1 ledgera.QueryResultsIterator, result2 error) { - fake.getStateRangeScanIteratorWithMetadataMutex.Lock() - defer fake.getStateRangeScanIteratorWithMetadataMutex.Unlock() - fake.GetStateRangeScanIteratorWithMetadataStub = nil - fake.getStateRangeScanIteratorWithMetadataReturns = struct { +func (fake *TxSimulator) GetStateRangeScanIteratorWithOptionsReturns(result1 ledgera.QueryResultsIterator, result2 error) { + fake.getStateRangeScanIteratorWithOptionsMutex.Lock() + defer fake.getStateRangeScanIteratorWithOptionsMutex.Unlock() + fake.GetStateRangeScanIteratorWithOptionsStub = nil + fake.getStateRangeScanIteratorWithOptionsReturns = struct { result1 ledgera.QueryResultsIterator result2 error }{result1, result2} } -func (fake *TxSimulator) GetStateRangeScanIteratorWithMetadataReturnsOnCall(i int, result1 ledgera.QueryResultsIterator, result2 error) { - fake.getStateRangeScanIteratorWithMetadataMutex.Lock() - defer fake.getStateRangeScanIteratorWithMetadataMutex.Unlock() - fake.GetStateRangeScanIteratorWithMetadataStub = nil - if fake.getStateRangeScanIteratorWithMetadataReturnsOnCall == nil { - fake.getStateRangeScanIteratorWithMetadataReturnsOnCall = make(map[int]struct { +func (fake *TxSimulator) GetStateRangeScanIteratorWithOptionsReturnsOnCall(i int, result1 ledgera.QueryResultsIterator, result2 error) { + fake.getStateRangeScanIteratorWithOptionsMutex.Lock() + defer fake.getStateRangeScanIteratorWithOptionsMutex.Unlock() + fake.GetStateRangeScanIteratorWithOptionsStub = nil + if fake.getStateRangeScanIteratorWithOptionsReturnsOnCall == nil { + fake.getStateRangeScanIteratorWithOptionsReturnsOnCall = make(map[int]struct { result1 ledgera.QueryResultsIterator result2 error }) } - fake.getStateRangeScanIteratorWithMetadataReturnsOnCall[i] = struct { + fake.getStateRangeScanIteratorWithOptionsReturnsOnCall[i] = struct { result1 ledgera.QueryResultsIterator result2 error }{result1, result2} @@ -2108,8 +2108,8 @@ func (fake *TxSimulator) Invocations() map[string][][]interface{} { defer fake.getStateMultipleKeysMutex.RUnlock() fake.getStateRangeScanIteratorMutex.RLock() defer fake.getStateRangeScanIteratorMutex.RUnlock() - fake.getStateRangeScanIteratorWithMetadataMutex.RLock() - defer fake.getStateRangeScanIteratorWithMetadataMutex.RUnlock() + fake.getStateRangeScanIteratorWithOptionsMutex.RLock() + defer fake.getStateRangeScanIteratorWithOptionsMutex.RUnlock() fake.getTxSimulationResultsMutex.RLock() defer fake.getTxSimulationResultsMutex.RUnlock() fake.setPrivateDataMutex.RLock() diff --git a/core/committer/txvalidator/mocks/query_executor.go b/core/committer/txvalidator/mocks/query_executor.go index 7d6903f6a77..e9e0d6bee7e 100644 --- a/core/committer/txvalidator/mocks/query_executor.go +++ b/core/committer/txvalidator/mocks/query_executor.go @@ -2,12 +2,9 @@ package mocks -import ( - ledger "github.com/hyperledger/fabric/common/ledger" - coreledger "github.com/hyperledger/fabric/core/ledger" - - mock "github.com/stretchr/testify/mock" -) +import coreledger "github.com/hyperledger/fabric/core/ledger" +import ledger "github.com/hyperledger/fabric/common/ledger" +import mock "github.com/stretchr/testify/mock" // QueryExecutor is an autogenerated mock type for the QueryExecutor type type QueryExecutor struct { @@ -318,13 +315,13 @@ func (_m *QueryExecutor) GetStateRangeScanIterator(namespace string, startKey st return r0, r1 } -// GetStateRangeScanIteratorWithMetadata provides a mock function with given fields: namespace, startKey, endKey, metadata -func (_m *QueryExecutor) GetStateRangeScanIteratorWithMetadata(namespace string, startKey string, endKey string, metadata map[string]interface{}) (coreledger.QueryResultsIterator, error) { - ret := _m.Called(namespace, startKey, endKey, metadata) +// GetStateRangeScanIteratorWithOptions provides a mock function with given fields: namespace, startKey, endKey, options +func (_m *QueryExecutor) GetStateRangeScanIteratorWithOptions(namespace string, startKey string, endKey string, options map[string]interface{}) (coreledger.QueryResultsIterator, error) { + ret := _m.Called(namespace, startKey, endKey, options) var r0 coreledger.QueryResultsIterator if rf, ok := ret.Get(0).(func(string, string, string, map[string]interface{}) coreledger.QueryResultsIterator); ok { - r0 = rf(namespace, startKey, endKey, metadata) + r0 = rf(namespace, startKey, endKey, options) } else { if ret.Get(0) != nil { r0 = ret.Get(0).(coreledger.QueryResultsIterator) @@ -333,7 +330,7 @@ func (_m *QueryExecutor) GetStateRangeScanIteratorWithMetadata(namespace string, var r1 error if rf, ok := ret.Get(1).(func(string, string, string, map[string]interface{}) error); ok { - r1 = rf(namespace, startKey, endKey, metadata) + r1 = rf(namespace, startKey, endKey, options) } else { r1 = ret.Error(1) } diff --git a/core/committer/txvalidator/v14/validator_test.go b/core/committer/txvalidator/v14/validator_test.go index d2cc264f405..4c86e23b585 100644 --- a/core/committer/txvalidator/v14/validator_test.go +++ b/core/committer/txvalidator/v14/validator_test.go @@ -1552,8 +1552,8 @@ func (exec *mockQueryExecutor) GetStateRangeScanIterator(namespace string, start return args.Get(0).(ledger2.ResultsIterator), args.Error(1) } -func (exec *mockQueryExecutor) GetStateRangeScanIteratorWithMetadata(namespace, startKey, endKey string, metadata map[string]interface{}) (ledger.QueryResultsIterator, error) { - args := exec.Called(namespace, startKey, endKey, metadata) +func (exec *mockQueryExecutor) GetStateRangeScanIteratorWithOptions(namespace, startKey, endKey string, options map[string]interface{}) (ledger.QueryResultsIterator, error) { + args := exec.Called(namespace, startKey, endKey, options) return args.Get(0).(ledger.QueryResultsIterator), args.Error(1) } diff --git a/core/committer/txvalidator/v20/mocks/query_executor.go b/core/committer/txvalidator/v20/mocks/query_executor.go index 7d6903f6a77..e9e0d6bee7e 100644 --- a/core/committer/txvalidator/v20/mocks/query_executor.go +++ b/core/committer/txvalidator/v20/mocks/query_executor.go @@ -2,12 +2,9 @@ package mocks -import ( - ledger "github.com/hyperledger/fabric/common/ledger" - coreledger "github.com/hyperledger/fabric/core/ledger" - - mock "github.com/stretchr/testify/mock" -) +import coreledger "github.com/hyperledger/fabric/core/ledger" +import ledger "github.com/hyperledger/fabric/common/ledger" +import mock "github.com/stretchr/testify/mock" // QueryExecutor is an autogenerated mock type for the QueryExecutor type type QueryExecutor struct { @@ -318,13 +315,13 @@ func (_m *QueryExecutor) GetStateRangeScanIterator(namespace string, startKey st return r0, r1 } -// GetStateRangeScanIteratorWithMetadata provides a mock function with given fields: namespace, startKey, endKey, metadata -func (_m *QueryExecutor) GetStateRangeScanIteratorWithMetadata(namespace string, startKey string, endKey string, metadata map[string]interface{}) (coreledger.QueryResultsIterator, error) { - ret := _m.Called(namespace, startKey, endKey, metadata) +// GetStateRangeScanIteratorWithOptions provides a mock function with given fields: namespace, startKey, endKey, options +func (_m *QueryExecutor) GetStateRangeScanIteratorWithOptions(namespace string, startKey string, endKey string, options map[string]interface{}) (coreledger.QueryResultsIterator, error) { + ret := _m.Called(namespace, startKey, endKey, options) var r0 coreledger.QueryResultsIterator if rf, ok := ret.Get(0).(func(string, string, string, map[string]interface{}) coreledger.QueryResultsIterator); ok { - r0 = rf(namespace, startKey, endKey, metadata) + r0 = rf(namespace, startKey, endKey, options) } else { if ret.Get(0) != nil { r0 = ret.Get(0).(coreledger.QueryResultsIterator) @@ -333,7 +330,7 @@ func (_m *QueryExecutor) GetStateRangeScanIteratorWithMetadata(namespace string, var r1 error if rf, ok := ret.Get(1).(func(string, string, string, map[string]interface{}) error); ok { - r1 = rf(namespace, startKey, endKey, metadata) + r1 = rf(namespace, startKey, endKey, options) } else { r1 = ret.Error(1) } diff --git a/core/common/privdata/mock/query_executor.go b/core/common/privdata/mock/query_executor.go index 5c225736250..e60c748704b 100644 --- a/core/common/privdata/mock/query_executor.go +++ b/core/common/privdata/mock/query_executor.go @@ -205,19 +205,19 @@ type QueryExecutor struct { result1 ledger.ResultsIterator result2 error } - GetStateRangeScanIteratorWithMetadataStub func(string, string, string, map[string]interface{}) (ledgera.QueryResultsIterator, error) - getStateRangeScanIteratorWithMetadataMutex sync.RWMutex - getStateRangeScanIteratorWithMetadataArgsForCall []struct { + GetStateRangeScanIteratorWithOptionsStub func(string, string, string, map[string]interface{}) (ledgera.QueryResultsIterator, error) + getStateRangeScanIteratorWithOptionsMutex sync.RWMutex + getStateRangeScanIteratorWithOptionsArgsForCall []struct { arg1 string arg2 string arg3 string arg4 map[string]interface{} } - getStateRangeScanIteratorWithMetadataReturns struct { + getStateRangeScanIteratorWithOptionsReturns struct { result1 ledgera.QueryResultsIterator result2 error } - getStateRangeScanIteratorWithMetadataReturnsOnCall map[int]struct { + getStateRangeScanIteratorWithOptionsReturnsOnCall map[int]struct { result1 ledgera.QueryResultsIterator result2 error } @@ -1105,67 +1105,67 @@ func (fake *QueryExecutor) GetStateRangeScanIteratorReturnsOnCall(i int, result1 }{result1, result2} } -func (fake *QueryExecutor) GetStateRangeScanIteratorWithMetadata(arg1 string, arg2 string, arg3 string, arg4 map[string]interface{}) (ledgera.QueryResultsIterator, error) { - fake.getStateRangeScanIteratorWithMetadataMutex.Lock() - ret, specificReturn := fake.getStateRangeScanIteratorWithMetadataReturnsOnCall[len(fake.getStateRangeScanIteratorWithMetadataArgsForCall)] - fake.getStateRangeScanIteratorWithMetadataArgsForCall = append(fake.getStateRangeScanIteratorWithMetadataArgsForCall, struct { +func (fake *QueryExecutor) GetStateRangeScanIteratorWithOptions(arg1 string, arg2 string, arg3 string, arg4 map[string]interface{}) (ledgera.QueryResultsIterator, error) { + fake.getStateRangeScanIteratorWithOptionsMutex.Lock() + ret, specificReturn := fake.getStateRangeScanIteratorWithOptionsReturnsOnCall[len(fake.getStateRangeScanIteratorWithOptionsArgsForCall)] + fake.getStateRangeScanIteratorWithOptionsArgsForCall = append(fake.getStateRangeScanIteratorWithOptionsArgsForCall, struct { arg1 string arg2 string arg3 string arg4 map[string]interface{} }{arg1, arg2, arg3, arg4}) - fake.recordInvocation("GetStateRangeScanIteratorWithMetadata", []interface{}{arg1, arg2, arg3, arg4}) - fake.getStateRangeScanIteratorWithMetadataMutex.Unlock() - if fake.GetStateRangeScanIteratorWithMetadataStub != nil { - return fake.GetStateRangeScanIteratorWithMetadataStub(arg1, arg2, arg3, arg4) + fake.recordInvocation("GetStateRangeScanIteratorWithOptions", []interface{}{arg1, arg2, arg3, arg4}) + fake.getStateRangeScanIteratorWithOptionsMutex.Unlock() + if fake.GetStateRangeScanIteratorWithOptionsStub != nil { + return fake.GetStateRangeScanIteratorWithOptionsStub(arg1, arg2, arg3, arg4) } if specificReturn { return ret.result1, ret.result2 } - fakeReturns := fake.getStateRangeScanIteratorWithMetadataReturns + fakeReturns := fake.getStateRangeScanIteratorWithOptionsReturns return fakeReturns.result1, fakeReturns.result2 } -func (fake *QueryExecutor) GetStateRangeScanIteratorWithMetadataCallCount() int { - fake.getStateRangeScanIteratorWithMetadataMutex.RLock() - defer fake.getStateRangeScanIteratorWithMetadataMutex.RUnlock() - return len(fake.getStateRangeScanIteratorWithMetadataArgsForCall) +func (fake *QueryExecutor) GetStateRangeScanIteratorWithOptionsCallCount() int { + fake.getStateRangeScanIteratorWithOptionsMutex.RLock() + defer fake.getStateRangeScanIteratorWithOptionsMutex.RUnlock() + return len(fake.getStateRangeScanIteratorWithOptionsArgsForCall) } -func (fake *QueryExecutor) GetStateRangeScanIteratorWithMetadataCalls(stub func(string, string, string, map[string]interface{}) (ledgera.QueryResultsIterator, error)) { - fake.getStateRangeScanIteratorWithMetadataMutex.Lock() - defer fake.getStateRangeScanIteratorWithMetadataMutex.Unlock() - fake.GetStateRangeScanIteratorWithMetadataStub = stub +func (fake *QueryExecutor) GetStateRangeScanIteratorWithOptionsCalls(stub func(string, string, string, map[string]interface{}) (ledgera.QueryResultsIterator, error)) { + fake.getStateRangeScanIteratorWithOptionsMutex.Lock() + defer fake.getStateRangeScanIteratorWithOptionsMutex.Unlock() + fake.GetStateRangeScanIteratorWithOptionsStub = stub } -func (fake *QueryExecutor) GetStateRangeScanIteratorWithMetadataArgsForCall(i int) (string, string, string, map[string]interface{}) { - fake.getStateRangeScanIteratorWithMetadataMutex.RLock() - defer fake.getStateRangeScanIteratorWithMetadataMutex.RUnlock() - argsForCall := fake.getStateRangeScanIteratorWithMetadataArgsForCall[i] +func (fake *QueryExecutor) GetStateRangeScanIteratorWithOptionsArgsForCall(i int) (string, string, string, map[string]interface{}) { + fake.getStateRangeScanIteratorWithOptionsMutex.RLock() + defer fake.getStateRangeScanIteratorWithOptionsMutex.RUnlock() + argsForCall := fake.getStateRangeScanIteratorWithOptionsArgsForCall[i] return argsForCall.arg1, argsForCall.arg2, argsForCall.arg3, argsForCall.arg4 } -func (fake *QueryExecutor) GetStateRangeScanIteratorWithMetadataReturns(result1 ledgera.QueryResultsIterator, result2 error) { - fake.getStateRangeScanIteratorWithMetadataMutex.Lock() - defer fake.getStateRangeScanIteratorWithMetadataMutex.Unlock() - fake.GetStateRangeScanIteratorWithMetadataStub = nil - fake.getStateRangeScanIteratorWithMetadataReturns = struct { +func (fake *QueryExecutor) GetStateRangeScanIteratorWithOptionsReturns(result1 ledgera.QueryResultsIterator, result2 error) { + fake.getStateRangeScanIteratorWithOptionsMutex.Lock() + defer fake.getStateRangeScanIteratorWithOptionsMutex.Unlock() + fake.GetStateRangeScanIteratorWithOptionsStub = nil + fake.getStateRangeScanIteratorWithOptionsReturns = struct { result1 ledgera.QueryResultsIterator result2 error }{result1, result2} } -func (fake *QueryExecutor) GetStateRangeScanIteratorWithMetadataReturnsOnCall(i int, result1 ledgera.QueryResultsIterator, result2 error) { - fake.getStateRangeScanIteratorWithMetadataMutex.Lock() - defer fake.getStateRangeScanIteratorWithMetadataMutex.Unlock() - fake.GetStateRangeScanIteratorWithMetadataStub = nil - if fake.getStateRangeScanIteratorWithMetadataReturnsOnCall == nil { - fake.getStateRangeScanIteratorWithMetadataReturnsOnCall = make(map[int]struct { +func (fake *QueryExecutor) GetStateRangeScanIteratorWithOptionsReturnsOnCall(i int, result1 ledgera.QueryResultsIterator, result2 error) { + fake.getStateRangeScanIteratorWithOptionsMutex.Lock() + defer fake.getStateRangeScanIteratorWithOptionsMutex.Unlock() + fake.GetStateRangeScanIteratorWithOptionsStub = nil + if fake.getStateRangeScanIteratorWithOptionsReturnsOnCall == nil { + fake.getStateRangeScanIteratorWithOptionsReturnsOnCall = make(map[int]struct { result1 ledgera.QueryResultsIterator result2 error }) } - fake.getStateRangeScanIteratorWithMetadataReturnsOnCall[i] = struct { + fake.getStateRangeScanIteratorWithOptionsReturnsOnCall[i] = struct { result1 ledgera.QueryResultsIterator result2 error }{result1, result2} @@ -1202,8 +1202,8 @@ func (fake *QueryExecutor) Invocations() map[string][][]interface{} { defer fake.getStateMultipleKeysMutex.RUnlock() fake.getStateRangeScanIteratorMutex.RLock() defer fake.getStateRangeScanIteratorMutex.RUnlock() - fake.getStateRangeScanIteratorWithMetadataMutex.RLock() - defer fake.getStateRangeScanIteratorWithMetadataMutex.RUnlock() + fake.getStateRangeScanIteratorWithOptionsMutex.RLock() + defer fake.getStateRangeScanIteratorWithOptionsMutex.RUnlock() copiedInvocations := map[string][][]interface{}{} for key, value := range fake.invocations { copiedInvocations[key] = value diff --git a/core/endorser/fake/query_executor.go b/core/endorser/fake/query_executor.go index ab779305591..4a1d2922053 100644 --- a/core/endorser/fake/query_executor.go +++ b/core/endorser/fake/query_executor.go @@ -205,19 +205,19 @@ type QueryExecutor struct { result1 ledger.ResultsIterator result2 error } - GetStateRangeScanIteratorWithMetadataStub func(string, string, string, map[string]interface{}) (ledgera.QueryResultsIterator, error) - getStateRangeScanIteratorWithMetadataMutex sync.RWMutex - getStateRangeScanIteratorWithMetadataArgsForCall []struct { + GetStateRangeScanIteratorWithOptionsStub func(string, string, string, map[string]interface{}) (ledgera.QueryResultsIterator, error) + getStateRangeScanIteratorWithOptionsMutex sync.RWMutex + getStateRangeScanIteratorWithOptionsArgsForCall []struct { arg1 string arg2 string arg3 string arg4 map[string]interface{} } - getStateRangeScanIteratorWithMetadataReturns struct { + getStateRangeScanIteratorWithOptionsReturns struct { result1 ledgera.QueryResultsIterator result2 error } - getStateRangeScanIteratorWithMetadataReturnsOnCall map[int]struct { + getStateRangeScanIteratorWithOptionsReturnsOnCall map[int]struct { result1 ledgera.QueryResultsIterator result2 error } @@ -1105,67 +1105,67 @@ func (fake *QueryExecutor) GetStateRangeScanIteratorReturnsOnCall(i int, result1 }{result1, result2} } -func (fake *QueryExecutor) GetStateRangeScanIteratorWithMetadata(arg1 string, arg2 string, arg3 string, arg4 map[string]interface{}) (ledgera.QueryResultsIterator, error) { - fake.getStateRangeScanIteratorWithMetadataMutex.Lock() - ret, specificReturn := fake.getStateRangeScanIteratorWithMetadataReturnsOnCall[len(fake.getStateRangeScanIteratorWithMetadataArgsForCall)] - fake.getStateRangeScanIteratorWithMetadataArgsForCall = append(fake.getStateRangeScanIteratorWithMetadataArgsForCall, struct { +func (fake *QueryExecutor) GetStateRangeScanIteratorWithOptions(arg1 string, arg2 string, arg3 string, arg4 map[string]interface{}) (ledgera.QueryResultsIterator, error) { + fake.getStateRangeScanIteratorWithOptionsMutex.Lock() + ret, specificReturn := fake.getStateRangeScanIteratorWithOptionsReturnsOnCall[len(fake.getStateRangeScanIteratorWithOptionsArgsForCall)] + fake.getStateRangeScanIteratorWithOptionsArgsForCall = append(fake.getStateRangeScanIteratorWithOptionsArgsForCall, struct { arg1 string arg2 string arg3 string arg4 map[string]interface{} }{arg1, arg2, arg3, arg4}) - fake.recordInvocation("GetStateRangeScanIteratorWithMetadata", []interface{}{arg1, arg2, arg3, arg4}) - fake.getStateRangeScanIteratorWithMetadataMutex.Unlock() - if fake.GetStateRangeScanIteratorWithMetadataStub != nil { - return fake.GetStateRangeScanIteratorWithMetadataStub(arg1, arg2, arg3, arg4) + fake.recordInvocation("GetStateRangeScanIteratorWithOptions", []interface{}{arg1, arg2, arg3, arg4}) + fake.getStateRangeScanIteratorWithOptionsMutex.Unlock() + if fake.GetStateRangeScanIteratorWithOptionsStub != nil { + return fake.GetStateRangeScanIteratorWithOptionsStub(arg1, arg2, arg3, arg4) } if specificReturn { return ret.result1, ret.result2 } - fakeReturns := fake.getStateRangeScanIteratorWithMetadataReturns + fakeReturns := fake.getStateRangeScanIteratorWithOptionsReturns return fakeReturns.result1, fakeReturns.result2 } -func (fake *QueryExecutor) GetStateRangeScanIteratorWithMetadataCallCount() int { - fake.getStateRangeScanIteratorWithMetadataMutex.RLock() - defer fake.getStateRangeScanIteratorWithMetadataMutex.RUnlock() - return len(fake.getStateRangeScanIteratorWithMetadataArgsForCall) +func (fake *QueryExecutor) GetStateRangeScanIteratorWithOptionsCallCount() int { + fake.getStateRangeScanIteratorWithOptionsMutex.RLock() + defer fake.getStateRangeScanIteratorWithOptionsMutex.RUnlock() + return len(fake.getStateRangeScanIteratorWithOptionsArgsForCall) } -func (fake *QueryExecutor) GetStateRangeScanIteratorWithMetadataCalls(stub func(string, string, string, map[string]interface{}) (ledgera.QueryResultsIterator, error)) { - fake.getStateRangeScanIteratorWithMetadataMutex.Lock() - defer fake.getStateRangeScanIteratorWithMetadataMutex.Unlock() - fake.GetStateRangeScanIteratorWithMetadataStub = stub +func (fake *QueryExecutor) GetStateRangeScanIteratorWithOptionsCalls(stub func(string, string, string, map[string]interface{}) (ledgera.QueryResultsIterator, error)) { + fake.getStateRangeScanIteratorWithOptionsMutex.Lock() + defer fake.getStateRangeScanIteratorWithOptionsMutex.Unlock() + fake.GetStateRangeScanIteratorWithOptionsStub = stub } -func (fake *QueryExecutor) GetStateRangeScanIteratorWithMetadataArgsForCall(i int) (string, string, string, map[string]interface{}) { - fake.getStateRangeScanIteratorWithMetadataMutex.RLock() - defer fake.getStateRangeScanIteratorWithMetadataMutex.RUnlock() - argsForCall := fake.getStateRangeScanIteratorWithMetadataArgsForCall[i] +func (fake *QueryExecutor) GetStateRangeScanIteratorWithOptionsArgsForCall(i int) (string, string, string, map[string]interface{}) { + fake.getStateRangeScanIteratorWithOptionsMutex.RLock() + defer fake.getStateRangeScanIteratorWithOptionsMutex.RUnlock() + argsForCall := fake.getStateRangeScanIteratorWithOptionsArgsForCall[i] return argsForCall.arg1, argsForCall.arg2, argsForCall.arg3, argsForCall.arg4 } -func (fake *QueryExecutor) GetStateRangeScanIteratorWithMetadataReturns(result1 ledgera.QueryResultsIterator, result2 error) { - fake.getStateRangeScanIteratorWithMetadataMutex.Lock() - defer fake.getStateRangeScanIteratorWithMetadataMutex.Unlock() - fake.GetStateRangeScanIteratorWithMetadataStub = nil - fake.getStateRangeScanIteratorWithMetadataReturns = struct { +func (fake *QueryExecutor) GetStateRangeScanIteratorWithOptionsReturns(result1 ledgera.QueryResultsIterator, result2 error) { + fake.getStateRangeScanIteratorWithOptionsMutex.Lock() + defer fake.getStateRangeScanIteratorWithOptionsMutex.Unlock() + fake.GetStateRangeScanIteratorWithOptionsStub = nil + fake.getStateRangeScanIteratorWithOptionsReturns = struct { result1 ledgera.QueryResultsIterator result2 error }{result1, result2} } -func (fake *QueryExecutor) GetStateRangeScanIteratorWithMetadataReturnsOnCall(i int, result1 ledgera.QueryResultsIterator, result2 error) { - fake.getStateRangeScanIteratorWithMetadataMutex.Lock() - defer fake.getStateRangeScanIteratorWithMetadataMutex.Unlock() - fake.GetStateRangeScanIteratorWithMetadataStub = nil - if fake.getStateRangeScanIteratorWithMetadataReturnsOnCall == nil { - fake.getStateRangeScanIteratorWithMetadataReturnsOnCall = make(map[int]struct { +func (fake *QueryExecutor) GetStateRangeScanIteratorWithOptionsReturnsOnCall(i int, result1 ledgera.QueryResultsIterator, result2 error) { + fake.getStateRangeScanIteratorWithOptionsMutex.Lock() + defer fake.getStateRangeScanIteratorWithOptionsMutex.Unlock() + fake.GetStateRangeScanIteratorWithOptionsStub = nil + if fake.getStateRangeScanIteratorWithOptionsReturnsOnCall == nil { + fake.getStateRangeScanIteratorWithOptionsReturnsOnCall = make(map[int]struct { result1 ledgera.QueryResultsIterator result2 error }) } - fake.getStateRangeScanIteratorWithMetadataReturnsOnCall[i] = struct { + fake.getStateRangeScanIteratorWithOptionsReturnsOnCall[i] = struct { result1 ledgera.QueryResultsIterator result2 error }{result1, result2} @@ -1202,8 +1202,8 @@ func (fake *QueryExecutor) Invocations() map[string][][]interface{} { defer fake.getStateMultipleKeysMutex.RUnlock() fake.getStateRangeScanIteratorMutex.RLock() defer fake.getStateRangeScanIteratorMutex.RUnlock() - fake.getStateRangeScanIteratorWithMetadataMutex.RLock() - defer fake.getStateRangeScanIteratorWithMetadataMutex.RUnlock() + fake.getStateRangeScanIteratorWithOptionsMutex.RLock() + defer fake.getStateRangeScanIteratorWithOptionsMutex.RUnlock() copiedInvocations := map[string][][]interface{}{} for key, value := range fake.invocations { copiedInvocations[key] = value diff --git a/core/endorser/fake/tx_simulator.go b/core/endorser/fake/tx_simulator.go index cec503866ef..5468f4349ef 100644 --- a/core/endorser/fake/tx_simulator.go +++ b/core/endorser/fake/tx_simulator.go @@ -266,19 +266,19 @@ type TxSimulator struct { result1 ledger.ResultsIterator result2 error } - GetStateRangeScanIteratorWithMetadataStub func(string, string, string, map[string]interface{}) (ledgera.QueryResultsIterator, error) - getStateRangeScanIteratorWithMetadataMutex sync.RWMutex - getStateRangeScanIteratorWithMetadataArgsForCall []struct { + GetStateRangeScanIteratorWithOptionsStub func(string, string, string, map[string]interface{}) (ledgera.QueryResultsIterator, error) + getStateRangeScanIteratorWithOptionsMutex sync.RWMutex + getStateRangeScanIteratorWithOptionsArgsForCall []struct { arg1 string arg2 string arg3 string arg4 map[string]interface{} } - getStateRangeScanIteratorWithMetadataReturns struct { + getStateRangeScanIteratorWithOptionsReturns struct { result1 ledgera.QueryResultsIterator result2 error } - getStateRangeScanIteratorWithMetadataReturnsOnCall map[int]struct { + getStateRangeScanIteratorWithOptionsReturnsOnCall map[int]struct { result1 ledgera.QueryResultsIterator result2 error } @@ -1563,67 +1563,67 @@ func (fake *TxSimulator) GetStateRangeScanIteratorReturnsOnCall(i int, result1 l }{result1, result2} } -func (fake *TxSimulator) GetStateRangeScanIteratorWithMetadata(arg1 string, arg2 string, arg3 string, arg4 map[string]interface{}) (ledgera.QueryResultsIterator, error) { - fake.getStateRangeScanIteratorWithMetadataMutex.Lock() - ret, specificReturn := fake.getStateRangeScanIteratorWithMetadataReturnsOnCall[len(fake.getStateRangeScanIteratorWithMetadataArgsForCall)] - fake.getStateRangeScanIteratorWithMetadataArgsForCall = append(fake.getStateRangeScanIteratorWithMetadataArgsForCall, struct { +func (fake *TxSimulator) GetStateRangeScanIteratorWithOptions(arg1 string, arg2 string, arg3 string, arg4 map[string]interface{}) (ledgera.QueryResultsIterator, error) { + fake.getStateRangeScanIteratorWithOptionsMutex.Lock() + ret, specificReturn := fake.getStateRangeScanIteratorWithOptionsReturnsOnCall[len(fake.getStateRangeScanIteratorWithOptionsArgsForCall)] + fake.getStateRangeScanIteratorWithOptionsArgsForCall = append(fake.getStateRangeScanIteratorWithOptionsArgsForCall, struct { arg1 string arg2 string arg3 string arg4 map[string]interface{} }{arg1, arg2, arg3, arg4}) - fake.recordInvocation("GetStateRangeScanIteratorWithMetadata", []interface{}{arg1, arg2, arg3, arg4}) - fake.getStateRangeScanIteratorWithMetadataMutex.Unlock() - if fake.GetStateRangeScanIteratorWithMetadataStub != nil { - return fake.GetStateRangeScanIteratorWithMetadataStub(arg1, arg2, arg3, arg4) + fake.recordInvocation("GetStateRangeScanIteratorWithOptions", []interface{}{arg1, arg2, arg3, arg4}) + fake.getStateRangeScanIteratorWithOptionsMutex.Unlock() + if fake.GetStateRangeScanIteratorWithOptionsStub != nil { + return fake.GetStateRangeScanIteratorWithOptionsStub(arg1, arg2, arg3, arg4) } if specificReturn { return ret.result1, ret.result2 } - fakeReturns := fake.getStateRangeScanIteratorWithMetadataReturns + fakeReturns := fake.getStateRangeScanIteratorWithOptionsReturns return fakeReturns.result1, fakeReturns.result2 } -func (fake *TxSimulator) GetStateRangeScanIteratorWithMetadataCallCount() int { - fake.getStateRangeScanIteratorWithMetadataMutex.RLock() - defer fake.getStateRangeScanIteratorWithMetadataMutex.RUnlock() - return len(fake.getStateRangeScanIteratorWithMetadataArgsForCall) +func (fake *TxSimulator) GetStateRangeScanIteratorWithOptionsCallCount() int { + fake.getStateRangeScanIteratorWithOptionsMutex.RLock() + defer fake.getStateRangeScanIteratorWithOptionsMutex.RUnlock() + return len(fake.getStateRangeScanIteratorWithOptionsArgsForCall) } -func (fake *TxSimulator) GetStateRangeScanIteratorWithMetadataCalls(stub func(string, string, string, map[string]interface{}) (ledgera.QueryResultsIterator, error)) { - fake.getStateRangeScanIteratorWithMetadataMutex.Lock() - defer fake.getStateRangeScanIteratorWithMetadataMutex.Unlock() - fake.GetStateRangeScanIteratorWithMetadataStub = stub +func (fake *TxSimulator) GetStateRangeScanIteratorWithOptionsCalls(stub func(string, string, string, map[string]interface{}) (ledgera.QueryResultsIterator, error)) { + fake.getStateRangeScanIteratorWithOptionsMutex.Lock() + defer fake.getStateRangeScanIteratorWithOptionsMutex.Unlock() + fake.GetStateRangeScanIteratorWithOptionsStub = stub } -func (fake *TxSimulator) GetStateRangeScanIteratorWithMetadataArgsForCall(i int) (string, string, string, map[string]interface{}) { - fake.getStateRangeScanIteratorWithMetadataMutex.RLock() - defer fake.getStateRangeScanIteratorWithMetadataMutex.RUnlock() - argsForCall := fake.getStateRangeScanIteratorWithMetadataArgsForCall[i] +func (fake *TxSimulator) GetStateRangeScanIteratorWithOptionsArgsForCall(i int) (string, string, string, map[string]interface{}) { + fake.getStateRangeScanIteratorWithOptionsMutex.RLock() + defer fake.getStateRangeScanIteratorWithOptionsMutex.RUnlock() + argsForCall := fake.getStateRangeScanIteratorWithOptionsArgsForCall[i] return argsForCall.arg1, argsForCall.arg2, argsForCall.arg3, argsForCall.arg4 } -func (fake *TxSimulator) GetStateRangeScanIteratorWithMetadataReturns(result1 ledgera.QueryResultsIterator, result2 error) { - fake.getStateRangeScanIteratorWithMetadataMutex.Lock() - defer fake.getStateRangeScanIteratorWithMetadataMutex.Unlock() - fake.GetStateRangeScanIteratorWithMetadataStub = nil - fake.getStateRangeScanIteratorWithMetadataReturns = struct { +func (fake *TxSimulator) GetStateRangeScanIteratorWithOptionsReturns(result1 ledgera.QueryResultsIterator, result2 error) { + fake.getStateRangeScanIteratorWithOptionsMutex.Lock() + defer fake.getStateRangeScanIteratorWithOptionsMutex.Unlock() + fake.GetStateRangeScanIteratorWithOptionsStub = nil + fake.getStateRangeScanIteratorWithOptionsReturns = struct { result1 ledgera.QueryResultsIterator result2 error }{result1, result2} } -func (fake *TxSimulator) GetStateRangeScanIteratorWithMetadataReturnsOnCall(i int, result1 ledgera.QueryResultsIterator, result2 error) { - fake.getStateRangeScanIteratorWithMetadataMutex.Lock() - defer fake.getStateRangeScanIteratorWithMetadataMutex.Unlock() - fake.GetStateRangeScanIteratorWithMetadataStub = nil - if fake.getStateRangeScanIteratorWithMetadataReturnsOnCall == nil { - fake.getStateRangeScanIteratorWithMetadataReturnsOnCall = make(map[int]struct { +func (fake *TxSimulator) GetStateRangeScanIteratorWithOptionsReturnsOnCall(i int, result1 ledgera.QueryResultsIterator, result2 error) { + fake.getStateRangeScanIteratorWithOptionsMutex.Lock() + defer fake.getStateRangeScanIteratorWithOptionsMutex.Unlock() + fake.GetStateRangeScanIteratorWithOptionsStub = nil + if fake.getStateRangeScanIteratorWithOptionsReturnsOnCall == nil { + fake.getStateRangeScanIteratorWithOptionsReturnsOnCall = make(map[int]struct { result1 ledgera.QueryResultsIterator result2 error }) } - fake.getStateRangeScanIteratorWithMetadataReturnsOnCall[i] = struct { + fake.getStateRangeScanIteratorWithOptionsReturnsOnCall[i] = struct { result1 ledgera.QueryResultsIterator result2 error }{result1, result2} @@ -2108,8 +2108,8 @@ func (fake *TxSimulator) Invocations() map[string][][]interface{} { defer fake.getStateMultipleKeysMutex.RUnlock() fake.getStateRangeScanIteratorMutex.RLock() defer fake.getStateRangeScanIteratorMutex.RUnlock() - fake.getStateRangeScanIteratorWithMetadataMutex.RLock() - defer fake.getStateRangeScanIteratorWithMetadataMutex.RUnlock() + fake.getStateRangeScanIteratorWithOptionsMutex.RLock() + defer fake.getStateRangeScanIteratorWithOptionsMutex.RUnlock() fake.getTxSimulationResultsMutex.RLock() defer fake.getTxSimulationResultsMutex.RUnlock() fake.setPrivateDataMutex.RLock() diff --git a/core/ledger/internal/rangequery/options_validation.go b/core/ledger/internal/rangequery/options_validation.go new file mode 100644 index 00000000000..1958f492918 --- /dev/null +++ b/core/ledger/internal/rangequery/options_validation.go @@ -0,0 +1,34 @@ +/* +Copyright IBM Corp. All Rights Reserved. + +SPDX-License-Identifier: Apache-2.0 +*/ + +package rangequery + +import ( + "fmt" + + "github.com/pkg/errors" +) + +// LimitOpt holds the name of the result limit key +const LimitOpt = "limit" + +// ValidateOptions validates the JSON containing options for the range query +func ValidateOptions(options map[string]interface{}) error { + for key, keyVal := range options { + switch key { + + case LimitOpt: + if _, ok := keyVal.(int32); ok { + continue + } + return errors.New("invalid entry, \"limit\" must be a int32") + + default: + return errors.New(fmt.Sprintf("invalid entry, option %s not recognized", key)) + } + } + return nil +} diff --git a/core/ledger/internal/rangequery/options_validation_test.go b/core/ledger/internal/rangequery/options_validation_test.go new file mode 100644 index 00000000000..64244ef0031 --- /dev/null +++ b/core/ledger/internal/rangequery/options_validation_test.go @@ -0,0 +1,40 @@ +/* +Copyright IBM Corp. All Rights Reserved. + +SPDX-License-Identifier: Apache-2.0 +*/ + +package rangequery + +import ( + "testing" + + "github.com/stretchr/testify/assert" +) + +// TestPaginatedQueryOptionsValidation tests queries with pagination +func TestPaginatedQueryOptionValidation(t *testing.T) { + queryOptions := make(map[string]interface{}) + queryOptions["limit"] = int32(10) + + err := ValidateOptions(queryOptions) + assert.NoError(t, err, "an error was thrown for a valid option") + + queryOptions = make(map[string]interface{}) + queryOptions["limit"] = float32(10.2) + + err = ValidateOptions(queryOptions) + assert.Error(t, err, "an error should have been thrown for an invalid option") + + queryOptions = make(map[string]interface{}) + queryOptions["limit"] = "10" + + err = ValidateOptions(queryOptions) + assert.Error(t, err, "an error should have been thrown for an invalid option") + + queryOptions = make(map[string]interface{}) + queryOptions["limit1"] = int32(10) + + err = ValidateOptions(queryOptions) + assert.Error(t, err, "an error should have been thrown for an invalid option") +} diff --git a/core/ledger/kvledger/txmgmt/statedb/commontests/test_common.go b/core/ledger/kvledger/txmgmt/statedb/commontests/test_common.go index 5c2f2c56a95..39982f10bc2 100644 --- a/core/ledger/kvledger/txmgmt/statedb/commontests/test_common.go +++ b/core/ledger/kvledger/txmgmt/statedb/commontests/test_common.go @@ -10,6 +10,7 @@ import ( "strings" "testing" + "github.com/hyperledger/fabric/core/ledger/internal/rangequery" "github.com/hyperledger/fabric/core/ledger/internal/version" "github.com/hyperledger/fabric/core/ledger/kvledger/txmgmt/statedb" "github.com/stretchr/testify/assert" @@ -934,9 +935,9 @@ func executeRangeQuery(t *testing.T, db statedb.VersionedDB, namespace, startKey queryOptions := make(map[string]interface{}) if limit != 0 { - queryOptions["limit"] = limit + queryOptions[rangequery.LimitOpt] = limit } - itr, err = db.GetStateRangeScanIteratorWithMetadata(namespace, startKey, endKey, queryOptions) + itr, err = db.GetStateRangeScanIteratorWithOptions(namespace, startKey, endKey, queryOptions) if err != nil { return "", err } diff --git a/core/ledger/kvledger/txmgmt/statedb/mock/versioned_db.go b/core/ledger/kvledger/txmgmt/statedb/mock/versioned_db.go index bee67acc309..519a3b9cdd5 100644 --- a/core/ledger/kvledger/txmgmt/statedb/mock/versioned_db.go +++ b/core/ledger/kvledger/txmgmt/statedb/mock/versioned_db.go @@ -119,19 +119,19 @@ type VersionedDB struct { result1 statedb.ResultsIterator result2 error } - GetStateRangeScanIteratorWithMetadataStub func(string, string, string, map[string]interface{}) (statedb.QueryResultsIterator, error) - getStateRangeScanIteratorWithMetadataMutex sync.RWMutex - getStateRangeScanIteratorWithMetadataArgsForCall []struct { + GetStateRangeScanIteratorWithOptionsStub func(string, string, string, map[string]interface{}) (statedb.QueryResultsIterator, error) + getStateRangeScanIteratorWithOptionsMutex sync.RWMutex + getStateRangeScanIteratorWithOptionsArgsForCall []struct { arg1 string arg2 string arg3 string arg4 map[string]interface{} } - getStateRangeScanIteratorWithMetadataReturns struct { + getStateRangeScanIteratorWithOptionsReturns struct { result1 statedb.QueryResultsIterator result2 error } - getStateRangeScanIteratorWithMetadataReturnsOnCall map[int]struct { + getStateRangeScanIteratorWithOptionsReturnsOnCall map[int]struct { result1 statedb.QueryResultsIterator result2 error } @@ -693,67 +693,67 @@ func (fake *VersionedDB) GetStateRangeScanIteratorReturnsOnCall(i int, result1 s }{result1, result2} } -func (fake *VersionedDB) GetStateRangeScanIteratorWithMetadata(arg1 string, arg2 string, arg3 string, arg4 map[string]interface{}) (statedb.QueryResultsIterator, error) { - fake.getStateRangeScanIteratorWithMetadataMutex.Lock() - ret, specificReturn := fake.getStateRangeScanIteratorWithMetadataReturnsOnCall[len(fake.getStateRangeScanIteratorWithMetadataArgsForCall)] - fake.getStateRangeScanIteratorWithMetadataArgsForCall = append(fake.getStateRangeScanIteratorWithMetadataArgsForCall, struct { +func (fake *VersionedDB) GetStateRangeScanIteratorWithOptions(arg1 string, arg2 string, arg3 string, arg4 map[string]interface{}) (statedb.QueryResultsIterator, error) { + fake.getStateRangeScanIteratorWithOptionsMutex.Lock() + ret, specificReturn := fake.getStateRangeScanIteratorWithOptionsReturnsOnCall[len(fake.getStateRangeScanIteratorWithOptionsArgsForCall)] + fake.getStateRangeScanIteratorWithOptionsArgsForCall = append(fake.getStateRangeScanIteratorWithOptionsArgsForCall, struct { arg1 string arg2 string arg3 string arg4 map[string]interface{} }{arg1, arg2, arg3, arg4}) - fake.recordInvocation("GetStateRangeScanIteratorWithMetadata", []interface{}{arg1, arg2, arg3, arg4}) - fake.getStateRangeScanIteratorWithMetadataMutex.Unlock() - if fake.GetStateRangeScanIteratorWithMetadataStub != nil { - return fake.GetStateRangeScanIteratorWithMetadataStub(arg1, arg2, arg3, arg4) + fake.recordInvocation("GetStateRangeScanIteratorWithOptions", []interface{}{arg1, arg2, arg3, arg4}) + fake.getStateRangeScanIteratorWithOptionsMutex.Unlock() + if fake.GetStateRangeScanIteratorWithOptionsStub != nil { + return fake.GetStateRangeScanIteratorWithOptionsStub(arg1, arg2, arg3, arg4) } if specificReturn { return ret.result1, ret.result2 } - fakeReturns := fake.getStateRangeScanIteratorWithMetadataReturns + fakeReturns := fake.getStateRangeScanIteratorWithOptionsReturns return fakeReturns.result1, fakeReturns.result2 } -func (fake *VersionedDB) GetStateRangeScanIteratorWithMetadataCallCount() int { - fake.getStateRangeScanIteratorWithMetadataMutex.RLock() - defer fake.getStateRangeScanIteratorWithMetadataMutex.RUnlock() - return len(fake.getStateRangeScanIteratorWithMetadataArgsForCall) +func (fake *VersionedDB) GetStateRangeScanIteratorWithOptionsCallCount() int { + fake.getStateRangeScanIteratorWithOptionsMutex.RLock() + defer fake.getStateRangeScanIteratorWithOptionsMutex.RUnlock() + return len(fake.getStateRangeScanIteratorWithOptionsArgsForCall) } -func (fake *VersionedDB) GetStateRangeScanIteratorWithMetadataCalls(stub func(string, string, string, map[string]interface{}) (statedb.QueryResultsIterator, error)) { - fake.getStateRangeScanIteratorWithMetadataMutex.Lock() - defer fake.getStateRangeScanIteratorWithMetadataMutex.Unlock() - fake.GetStateRangeScanIteratorWithMetadataStub = stub +func (fake *VersionedDB) GetStateRangeScanIteratorWithOptionsCalls(stub func(string, string, string, map[string]interface{}) (statedb.QueryResultsIterator, error)) { + fake.getStateRangeScanIteratorWithOptionsMutex.Lock() + defer fake.getStateRangeScanIteratorWithOptionsMutex.Unlock() + fake.GetStateRangeScanIteratorWithOptionsStub = stub } -func (fake *VersionedDB) GetStateRangeScanIteratorWithMetadataArgsForCall(i int) (string, string, string, map[string]interface{}) { - fake.getStateRangeScanIteratorWithMetadataMutex.RLock() - defer fake.getStateRangeScanIteratorWithMetadataMutex.RUnlock() - argsForCall := fake.getStateRangeScanIteratorWithMetadataArgsForCall[i] +func (fake *VersionedDB) GetStateRangeScanIteratorWithOptionsArgsForCall(i int) (string, string, string, map[string]interface{}) { + fake.getStateRangeScanIteratorWithOptionsMutex.RLock() + defer fake.getStateRangeScanIteratorWithOptionsMutex.RUnlock() + argsForCall := fake.getStateRangeScanIteratorWithOptionsArgsForCall[i] return argsForCall.arg1, argsForCall.arg2, argsForCall.arg3, argsForCall.arg4 } -func (fake *VersionedDB) GetStateRangeScanIteratorWithMetadataReturns(result1 statedb.QueryResultsIterator, result2 error) { - fake.getStateRangeScanIteratorWithMetadataMutex.Lock() - defer fake.getStateRangeScanIteratorWithMetadataMutex.Unlock() - fake.GetStateRangeScanIteratorWithMetadataStub = nil - fake.getStateRangeScanIteratorWithMetadataReturns = struct { +func (fake *VersionedDB) GetStateRangeScanIteratorWithOptionsReturns(result1 statedb.QueryResultsIterator, result2 error) { + fake.getStateRangeScanIteratorWithOptionsMutex.Lock() + defer fake.getStateRangeScanIteratorWithOptionsMutex.Unlock() + fake.GetStateRangeScanIteratorWithOptionsStub = nil + fake.getStateRangeScanIteratorWithOptionsReturns = struct { result1 statedb.QueryResultsIterator result2 error }{result1, result2} } -func (fake *VersionedDB) GetStateRangeScanIteratorWithMetadataReturnsOnCall(i int, result1 statedb.QueryResultsIterator, result2 error) { - fake.getStateRangeScanIteratorWithMetadataMutex.Lock() - defer fake.getStateRangeScanIteratorWithMetadataMutex.Unlock() - fake.GetStateRangeScanIteratorWithMetadataStub = nil - if fake.getStateRangeScanIteratorWithMetadataReturnsOnCall == nil { - fake.getStateRangeScanIteratorWithMetadataReturnsOnCall = make(map[int]struct { +func (fake *VersionedDB) GetStateRangeScanIteratorWithOptionsReturnsOnCall(i int, result1 statedb.QueryResultsIterator, result2 error) { + fake.getStateRangeScanIteratorWithOptionsMutex.Lock() + defer fake.getStateRangeScanIteratorWithOptionsMutex.Unlock() + fake.GetStateRangeScanIteratorWithOptionsStub = nil + if fake.getStateRangeScanIteratorWithOptionsReturnsOnCall == nil { + fake.getStateRangeScanIteratorWithOptionsReturnsOnCall = make(map[int]struct { result1 statedb.QueryResultsIterator result2 error }) } - fake.getStateRangeScanIteratorWithMetadataReturnsOnCall[i] = struct { + fake.getStateRangeScanIteratorWithOptionsReturnsOnCall[i] = struct { result1 statedb.QueryResultsIterator result2 error }{result1, result2} @@ -962,8 +962,8 @@ func (fake *VersionedDB) Invocations() map[string][][]interface{} { defer fake.getStateMultipleKeysMutex.RUnlock() fake.getStateRangeScanIteratorMutex.RLock() defer fake.getStateRangeScanIteratorMutex.RUnlock() - fake.getStateRangeScanIteratorWithMetadataMutex.RLock() - defer fake.getStateRangeScanIteratorWithMetadataMutex.RUnlock() + fake.getStateRangeScanIteratorWithOptionsMutex.RLock() + defer fake.getStateRangeScanIteratorWithOptionsMutex.RUnlock() fake.getVersionMutex.RLock() defer fake.getVersionMutex.RUnlock() fake.openMutex.RLock() diff --git a/core/ledger/kvledger/txmgmt/statedb/statecouchdb/statecouchdb.go b/core/ledger/kvledger/txmgmt/statedb/statecouchdb/statecouchdb.go index 51c600d176c..2a624afed5d 100644 --- a/core/ledger/kvledger/txmgmt/statedb/statecouchdb/statecouchdb.go +++ b/core/ledger/kvledger/txmgmt/statedb/statecouchdb/statecouchdb.go @@ -16,6 +16,7 @@ import ( "github.com/hyperledger/fabric/common/flogging" "github.com/hyperledger/fabric/common/ledger/dataformat" "github.com/hyperledger/fabric/common/metrics" + "github.com/hyperledger/fabric/core/ledger/internal/rangequery" "github.com/hyperledger/fabric/core/ledger/internal/version" "github.com/hyperledger/fabric/core/ledger/kvledger/txmgmt/statedb" "github.com/hyperledger/fabric/core/ledger/util/couchdb" @@ -439,30 +440,27 @@ func (vdb *VersionedDB) GetStateMultipleKeys(namespace string, keys []string) ([ // startKey is inclusive // endKey is exclusive func (vdb *VersionedDB) GetStateRangeScanIterator(namespace string, startKey string, endKey string) (statedb.ResultsIterator, error) { - return vdb.GetStateRangeScanIteratorWithMetadata(namespace, startKey, endKey, nil) + return vdb.GetStateRangeScanIteratorWithOptions(namespace, startKey, endKey, nil) } const optionBookmark = "bookmark" const optionLimit = "limit" -// GetStateRangeScanIteratorWithMetadata implements method in VersionedDB interface +// GetStateRangeScanIteratorWithOptions implements method in VersionedDB interface // startKey is inclusive // endKey is exclusive -// metadata contains a map of additional query options -func (vdb *VersionedDB) GetStateRangeScanIteratorWithMetadata(namespace string, startKey string, endKey string, metadata map[string]interface{}) (statedb.QueryResultsIterator, error) { - logger.Debugf("Entering GetStateRangeScanIteratorWithMetadata namespace: %s startKey: %s endKey: %s metadata: %v", namespace, startKey, endKey, metadata) - // Get the internalQueryLimit from core.yaml +// options contains a map of additional query options +func (vdb *VersionedDB) GetStateRangeScanIteratorWithOptions(namespace string, startKey string, endKey string, options map[string]interface{}) (statedb.QueryResultsIterator, error) { + logger.Debugf("Entering GetStateRangeScanIteratorWithOptions namespace: %s startKey: %s endKey: %s options: %v", namespace, startKey, endKey, options) internalQueryLimit := vdb.couchInstance.InternalQueryLimit() requestedLimit := int32(0) - // if metadata is provided, validate and apply options - if metadata != nil { - //validate the metadata - err := statedb.ValidateRangeMetadata(metadata) + if options != nil { + err := rangequery.ValidateOptions(options) if err != nil { return nil, err } - if limitOption, ok := metadata[optionLimit]; ok { - requestedLimit = limitOption.(int32) + if limit, ok := options[rangequery.LimitOpt]; ok { + requestedLimit = limit.(int32) } } db, err := vdb.getNamespaceDBHandle(namespace) diff --git a/core/ledger/kvledger/txmgmt/statedb/statedb.go b/core/ledger/kvledger/txmgmt/statedb/statedb.go index e854150c0d6..70b3f79d50c 100644 --- a/core/ledger/kvledger/txmgmt/statedb/statedb.go +++ b/core/ledger/kvledger/txmgmt/statedb/statedb.go @@ -7,7 +7,6 @@ SPDX-License-Identifier: Apache-2.0 package statedb import ( - "fmt" "sort" "github.com/hyperledger/fabric/core/ledger/internal/version" @@ -41,9 +40,9 @@ type VersionedDB interface { // GetStateRangeScanIteratorWithMetadata returns an iterator that contains all the key-values between given key ranges. // startKey is inclusive // endKey is exclusive - // metadata is a map of additional query parameters + // options is a map of additional query parameters // The returned ResultsIterator contains results of type *VersionedKV - GetStateRangeScanIteratorWithMetadata(namespace string, startKey string, endKey string, metadata map[string]interface{}) (QueryResultsIterator, error) + GetStateRangeScanIteratorWithOptions(namespace string, startKey string, endKey string, options map[string]interface{}) (QueryResultsIterator, error) // ExecuteQuery executes the given query and returns an iterator that contains results of type *VersionedKV. ExecuteQuery(namespace, query string) (ResultsIterator, error) // ExecuteQueryWithMetadata executes the given query with associated query options and @@ -292,24 +291,3 @@ func (itr *nsIterator) GetBookmarkAndClose() string { // do nothing return "" } - -const optionLimit = "limit" - -// ValidateRangeMetadata validates the JSON containing attributes for the range query -func ValidateRangeMetadata(metadata map[string]interface{}) error { - for key, keyVal := range metadata { - switch key { - - case optionLimit: - //Verify the pageSize is an integer - if _, ok := keyVal.(int32); ok { - continue - } - return fmt.Errorf("Invalid entry, \"limit\" must be a int32") - - default: - return fmt.Errorf("Invalid entry, option %s not recognized", key) - } - } - return nil -} diff --git a/core/ledger/kvledger/txmgmt/statedb/statedb_test.go b/core/ledger/kvledger/txmgmt/statedb/statedb_test.go index 80f808483bd..fb5adb82d36 100644 --- a/core/ledger/kvledger/txmgmt/statedb/statedb_test.go +++ b/core/ledger/kvledger/txmgmt/statedb/statedb_test.go @@ -125,35 +125,6 @@ func checkItrResults(t *testing.T, itr QueryResultsIterator, expectedResults []* itr.Close() } -// TestPaginatedRangeValidation tests queries with pagination -func TestPaginatedRangeValidation(t *testing.T) { - - queryOptions := make(map[string]interface{}) - queryOptions["limit"] = int32(10) - - err := ValidateRangeMetadata(queryOptions) - assert.NoError(t, err, "An error was thrown for a valid option") - - queryOptions = make(map[string]interface{}) - queryOptions["limit"] = float32(10.2) - - err = ValidateRangeMetadata(queryOptions) - assert.Error(t, err, "An should have been thrown for an invalid option") - - queryOptions = make(map[string]interface{}) - queryOptions["limit"] = "10" - - err = ValidateRangeMetadata(queryOptions) - assert.Error(t, err, "An should have been thrown for an invalid option") - - queryOptions = make(map[string]interface{}) - queryOptions["limit1"] = int32(10) - - err = ValidateRangeMetadata(queryOptions) - assert.Error(t, err, "An should have been thrown for an invalid option") - -} - func TestMergeUpdateBatch(t *testing.T) { batch1 := NewUpdateBatch() batch1.Put("ns1", "key1", []byte("batch1_value1"), version.NewHeight(1, 1)) diff --git a/core/ledger/kvledger/txmgmt/statedb/stateleveldb/stateleveldb.go b/core/ledger/kvledger/txmgmt/statedb/stateleveldb/stateleveldb.go index 4dfc028cf55..0d408cc1a85 100644 --- a/core/ledger/kvledger/txmgmt/statedb/stateleveldb/stateleveldb.go +++ b/core/ledger/kvledger/txmgmt/statedb/stateleveldb/stateleveldb.go @@ -12,6 +12,7 @@ import ( "github.com/hyperledger/fabric/common/flogging" "github.com/hyperledger/fabric/common/ledger/dataformat" "github.com/hyperledger/fabric/common/ledger/util/leveldbhelper" + "github.com/hyperledger/fabric/core/ledger/internal/rangequery" "github.com/hyperledger/fabric/core/ledger/internal/version" "github.com/hyperledger/fabric/core/ledger/kvledger/txmgmt/statedb" "github.com/pkg/errors" @@ -130,24 +131,21 @@ func (vdb *versionedDB) GetStateMultipleKeys(namespace string, keys []string) ([ // startKey is inclusive // endKey is exclusive func (vdb *versionedDB) GetStateRangeScanIterator(namespace string, startKey string, endKey string) (statedb.ResultsIterator, error) { - return vdb.GetStateRangeScanIteratorWithMetadata(namespace, startKey, endKey, nil) + return vdb.GetStateRangeScanIteratorWithOptions(namespace, startKey, endKey, nil) } -const optionLimit = "limit" - -// GetStateRangeScanIteratorWithMetadata implements method in VersionedDB interface -func (vdb *versionedDB) GetStateRangeScanIteratorWithMetadata(namespace string, startKey string, endKey string, metadata map[string]interface{}) (statedb.QueryResultsIterator, error) { +// GetStateRangeScanIteratorWithOptions implements method in VersionedDB interface +func (vdb *versionedDB) GetStateRangeScanIteratorWithOptions(namespace string, startKey string, endKey string, + options map[string]interface{}) (statedb.QueryResultsIterator, error) { requestedLimit := int32(0) - // if metadata is provided, validate and apply options - if metadata != nil { - //validate the metadata - err := statedb.ValidateRangeMetadata(metadata) + if options != nil { + err := rangequery.ValidateOptions(options) if err != nil { return nil, err } - if limitOption, ok := metadata[optionLimit]; ok { - requestedLimit = limitOption.(int32) + if limit, ok := options[rangequery.LimitOpt]; ok { + requestedLimit = limit.(int32) } } diff --git a/core/ledger/kvledger/txmgmt/txmgr/lockbasedtxmgr/helper.go b/core/ledger/kvledger/txmgmt/txmgr/lockbasedtxmgr/helper.go index b490c792c59..5407ae7921b 100644 --- a/core/ledger/kvledger/txmgmt/txmgr/lockbasedtxmgr/helper.go +++ b/core/ledger/kvledger/txmgmt/txmgr/lockbasedtxmgr/helper.go @@ -104,7 +104,7 @@ func (h *queryHelper) getStateRangeScanIterator(namespace string, startKey strin return itr, nil } -func (h *queryHelper) getStateRangeScanIteratorWithMetadata(namespace string, startKey string, endKey string, metadata map[string]interface{}) (ledger.QueryResultsIterator, error) { +func (h *queryHelper) getStateRangeScanIteratorWithOptions(namespace string, startKey string, endKey string, options map[string]interface{}) (ledger.QueryResultsIterator, error) { if err := h.checkDone(); err != nil { return nil, err } @@ -112,7 +112,7 @@ func (h *queryHelper) getStateRangeScanIteratorWithMetadata(namespace string, st namespace, startKey, endKey, - metadata, + options, h.txmgr.db, h.rwsetBuilder, queryReadsHashingEnabled, @@ -362,14 +362,14 @@ type resultsItr struct { rangeQueryResultsHelper *rwsetutil.RangeQueryResultsHelper } -func newResultsItr(ns string, startKey string, endKey string, metadata map[string]interface{}, +func newResultsItr(ns string, startKey string, endKey string, options map[string]interface{}, db statedb.VersionedDB, rwsetBuilder *rwsetutil.RWSetBuilder, enableHashing bool, maxDegree uint32, hasher ledger.Hasher) (*resultsItr, error) { var err error var dbItr statedb.ResultsIterator - if metadata == nil { + if options == nil { dbItr, err = db.GetStateRangeScanIterator(ns, startKey, endKey) } else { - dbItr, err = db.GetStateRangeScanIteratorWithMetadata(ns, startKey, endKey, metadata) + dbItr, err = db.GetStateRangeScanIteratorWithOptions(ns, startKey, endKey, options) } if err != nil { return nil, err diff --git a/core/ledger/kvledger/txmgmt/txmgr/lockbasedtxmgr/lockbased_query_executer.go b/core/ledger/kvledger/txmgmt/txmgr/lockbasedtxmgr/lockbased_query_executer.go index ffccda97d41..64cfb51d7ea 100644 --- a/core/ledger/kvledger/txmgmt/txmgr/lockbasedtxmgr/lockbased_query_executer.go +++ b/core/ledger/kvledger/txmgmt/txmgr/lockbasedtxmgr/lockbased_query_executer.go @@ -47,13 +47,13 @@ func (q *lockBasedQueryExecutor) GetStateRangeScanIterator(namespace string, sta return q.helper.getStateRangeScanIterator(namespace, startKey, endKey) } -// GetStateRangeScanIteratorWithMetadata implements method in interface `ledger.QueryExecutor` +// GetStateRangeScanIteratorWithOptions implements method in interface `ledger.QueryExecutor` // startKey is included in the results and endKey is excluded. An empty startKey refers to the first available key // and an empty endKey refers to the last available key. For scanning all the keys, both the startKey and the endKey // can be supplied as empty strings. However, a full scan should be used judiciously for performance reasons. -// metadata is a map of additional query parameters -func (q *lockBasedQueryExecutor) GetStateRangeScanIteratorWithMetadata(namespace string, startKey string, endKey string, metadata map[string]interface{}) (ledger.QueryResultsIterator, error) { - return q.helper.getStateRangeScanIteratorWithMetadata(namespace, startKey, endKey, metadata) +// options is a map of additional query parameters +func (q *lockBasedQueryExecutor) GetStateRangeScanIteratorWithOptions(namespace string, startKey string, endKey string, options map[string]interface{}) (ledger.QueryResultsIterator, error) { + return q.helper.getStateRangeScanIteratorWithOptions(namespace, startKey, endKey, options) } // ExecuteQuery implements method in interface `ledger.QueryExecutor` diff --git a/core/ledger/kvledger/txmgmt/txmgr/lockbasedtxmgr/lockbased_tx_simulator.go b/core/ledger/kvledger/txmgmt/txmgr/lockbasedtxmgr/lockbased_tx_simulator.go index 83e556ceeb1..e27c1ad587b 100644 --- a/core/ledger/kvledger/txmgmt/txmgr/lockbasedtxmgr/lockbased_tx_simulator.go +++ b/core/ledger/kvledger/txmgmt/txmgr/lockbasedtxmgr/lockbased_tx_simulator.go @@ -132,12 +132,12 @@ func (s *lockBasedTxSimulator) ExecuteQueryOnPrivateData(namespace, collection, return s.lockBasedQueryExecutor.ExecuteQueryOnPrivateData(namespace, collection, query) } -// GetStateRangeScanIteratorWithMetadata implements method in interface `ledger.QueryExecutor` -func (s *lockBasedTxSimulator) GetStateRangeScanIteratorWithMetadata(namespace string, startKey string, endKey string, metadata map[string]interface{}) (ledger.QueryResultsIterator, error) { +// GetStateRangeScanIteratorWithOptions implements method in interface `ledger.QueryExecutor` +func (s *lockBasedTxSimulator) GetStateRangeScanIteratorWithOptions(namespace string, startKey string, endKey string, options map[string]interface{}) (ledger.QueryResultsIterator, error) { if err := s.checkBeforePaginatedQueries(); err != nil { return nil, err } - return s.lockBasedQueryExecutor.GetStateRangeScanIteratorWithMetadata(namespace, startKey, endKey, metadata) + return s.lockBasedQueryExecutor.GetStateRangeScanIteratorWithOptions(namespace, startKey, endKey, options) } // ExecuteQueryWithMetadata implements method in interface `ledger.QueryExecutor` diff --git a/core/ledger/kvledger/txmgmt/txmgr/lockbasedtxmgr/txmgr_test.go b/core/ledger/kvledger/txmgmt/txmgr/lockbasedtxmgr/txmgr_test.go index 79bdbdf4fe8..5d2c74e2def 100644 --- a/core/ledger/kvledger/txmgmt/txmgr/lockbasedtxmgr/txmgr_test.go +++ b/core/ledger/kvledger/txmgmt/txmgr/lockbasedtxmgr/txmgr_test.go @@ -456,7 +456,7 @@ func testIteratorPaging(t *testing.T, env testEnv, numKeys int, startKey, endKey } queryExecuter, _ := txMgr.NewQueryExecutor("test_tx2") - itr, _ := queryExecuter.GetStateRangeScanIteratorWithMetadata(cID, startKey, endKey, queryOptions) + itr, _ := queryExecuter.GetStateRangeScanIteratorWithOptions(cID, startKey, endKey, queryOptions) // Verify the keys returned testItrWithoutClose(t, itr, expectedKeys) @@ -874,12 +874,12 @@ func TestTxSimulatorUnsupportedTx(t *testing.T) { simulator, _ = txMgr.NewTxSimulator("txid3") err = simulator.SetState("ns", "key", []byte("value")) assert.NoError(t, err) - _, err = simulator.GetStateRangeScanIteratorWithMetadata("ns1", "startKey", "endKey", queryOptions) + _, err = simulator.GetStateRangeScanIteratorWithOptions("ns1", "startKey", "endKey", queryOptions) _, ok = err.(*txmgr.ErrUnsupportedTransaction) assert.True(t, ok) simulator, _ = txMgr.NewTxSimulator("txid4") - _, err = simulator.GetStateRangeScanIteratorWithMetadata("ns1", "startKey", "endKey", queryOptions) + _, err = simulator.GetStateRangeScanIteratorWithOptions("ns1", "startKey", "endKey", queryOptions) assert.NoError(t, err) err = simulator.SetState("ns", "key", []byte("value")) _, ok = err.(*txmgr.ErrUnsupportedTransaction) diff --git a/core/ledger/kvledger/txmgmt/validator/valimpl/mock/txsim.go b/core/ledger/kvledger/txmgmt/validator/valimpl/mock/txsim.go index f7bd19ad87a..1795147a43b 100644 --- a/core/ledger/kvledger/txmgmt/validator/valimpl/mock/txsim.go +++ b/core/ledger/kvledger/txmgmt/validator/valimpl/mock/txsim.go @@ -266,19 +266,19 @@ type TxSimulator struct { result1 ledger.ResultsIterator result2 error } - GetStateRangeScanIteratorWithMetadataStub func(string, string, string, map[string]interface{}) (ledgera.QueryResultsIterator, error) - getStateRangeScanIteratorWithMetadataMutex sync.RWMutex - getStateRangeScanIteratorWithMetadataArgsForCall []struct { + GetStateRangeScanIteratorWithOptionsStub func(string, string, string, map[string]interface{}) (ledgera.QueryResultsIterator, error) + getStateRangeScanIteratorWithOptionsMutex sync.RWMutex + getStateRangeScanIteratorWithOptionsArgsForCall []struct { arg1 string arg2 string arg3 string arg4 map[string]interface{} } - getStateRangeScanIteratorWithMetadataReturns struct { + getStateRangeScanIteratorWithOptionsReturns struct { result1 ledgera.QueryResultsIterator result2 error } - getStateRangeScanIteratorWithMetadataReturnsOnCall map[int]struct { + getStateRangeScanIteratorWithOptionsReturnsOnCall map[int]struct { result1 ledgera.QueryResultsIterator result2 error } @@ -1563,67 +1563,67 @@ func (fake *TxSimulator) GetStateRangeScanIteratorReturnsOnCall(i int, result1 l }{result1, result2} } -func (fake *TxSimulator) GetStateRangeScanIteratorWithMetadata(arg1 string, arg2 string, arg3 string, arg4 map[string]interface{}) (ledgera.QueryResultsIterator, error) { - fake.getStateRangeScanIteratorWithMetadataMutex.Lock() - ret, specificReturn := fake.getStateRangeScanIteratorWithMetadataReturnsOnCall[len(fake.getStateRangeScanIteratorWithMetadataArgsForCall)] - fake.getStateRangeScanIteratorWithMetadataArgsForCall = append(fake.getStateRangeScanIteratorWithMetadataArgsForCall, struct { +func (fake *TxSimulator) GetStateRangeScanIteratorWithOptions(arg1 string, arg2 string, arg3 string, arg4 map[string]interface{}) (ledgera.QueryResultsIterator, error) { + fake.getStateRangeScanIteratorWithOptionsMutex.Lock() + ret, specificReturn := fake.getStateRangeScanIteratorWithOptionsReturnsOnCall[len(fake.getStateRangeScanIteratorWithOptionsArgsForCall)] + fake.getStateRangeScanIteratorWithOptionsArgsForCall = append(fake.getStateRangeScanIteratorWithOptionsArgsForCall, struct { arg1 string arg2 string arg3 string arg4 map[string]interface{} }{arg1, arg2, arg3, arg4}) - fake.recordInvocation("GetStateRangeScanIteratorWithMetadata", []interface{}{arg1, arg2, arg3, arg4}) - fake.getStateRangeScanIteratorWithMetadataMutex.Unlock() - if fake.GetStateRangeScanIteratorWithMetadataStub != nil { - return fake.GetStateRangeScanIteratorWithMetadataStub(arg1, arg2, arg3, arg4) + fake.recordInvocation("GetStateRangeScanIteratorWithOptions", []interface{}{arg1, arg2, arg3, arg4}) + fake.getStateRangeScanIteratorWithOptionsMutex.Unlock() + if fake.GetStateRangeScanIteratorWithOptionsStub != nil { + return fake.GetStateRangeScanIteratorWithOptionsStub(arg1, arg2, arg3, arg4) } if specificReturn { return ret.result1, ret.result2 } - fakeReturns := fake.getStateRangeScanIteratorWithMetadataReturns + fakeReturns := fake.getStateRangeScanIteratorWithOptionsReturns return fakeReturns.result1, fakeReturns.result2 } -func (fake *TxSimulator) GetStateRangeScanIteratorWithMetadataCallCount() int { - fake.getStateRangeScanIteratorWithMetadataMutex.RLock() - defer fake.getStateRangeScanIteratorWithMetadataMutex.RUnlock() - return len(fake.getStateRangeScanIteratorWithMetadataArgsForCall) +func (fake *TxSimulator) GetStateRangeScanIteratorWithOptionsCallCount() int { + fake.getStateRangeScanIteratorWithOptionsMutex.RLock() + defer fake.getStateRangeScanIteratorWithOptionsMutex.RUnlock() + return len(fake.getStateRangeScanIteratorWithOptionsArgsForCall) } -func (fake *TxSimulator) GetStateRangeScanIteratorWithMetadataCalls(stub func(string, string, string, map[string]interface{}) (ledgera.QueryResultsIterator, error)) { - fake.getStateRangeScanIteratorWithMetadataMutex.Lock() - defer fake.getStateRangeScanIteratorWithMetadataMutex.Unlock() - fake.GetStateRangeScanIteratorWithMetadataStub = stub +func (fake *TxSimulator) GetStateRangeScanIteratorWithOptionsCalls(stub func(string, string, string, map[string]interface{}) (ledgera.QueryResultsIterator, error)) { + fake.getStateRangeScanIteratorWithOptionsMutex.Lock() + defer fake.getStateRangeScanIteratorWithOptionsMutex.Unlock() + fake.GetStateRangeScanIteratorWithOptionsStub = stub } -func (fake *TxSimulator) GetStateRangeScanIteratorWithMetadataArgsForCall(i int) (string, string, string, map[string]interface{}) { - fake.getStateRangeScanIteratorWithMetadataMutex.RLock() - defer fake.getStateRangeScanIteratorWithMetadataMutex.RUnlock() - argsForCall := fake.getStateRangeScanIteratorWithMetadataArgsForCall[i] +func (fake *TxSimulator) GetStateRangeScanIteratorWithOptionsArgsForCall(i int) (string, string, string, map[string]interface{}) { + fake.getStateRangeScanIteratorWithOptionsMutex.RLock() + defer fake.getStateRangeScanIteratorWithOptionsMutex.RUnlock() + argsForCall := fake.getStateRangeScanIteratorWithOptionsArgsForCall[i] return argsForCall.arg1, argsForCall.arg2, argsForCall.arg3, argsForCall.arg4 } -func (fake *TxSimulator) GetStateRangeScanIteratorWithMetadataReturns(result1 ledgera.QueryResultsIterator, result2 error) { - fake.getStateRangeScanIteratorWithMetadataMutex.Lock() - defer fake.getStateRangeScanIteratorWithMetadataMutex.Unlock() - fake.GetStateRangeScanIteratorWithMetadataStub = nil - fake.getStateRangeScanIteratorWithMetadataReturns = struct { +func (fake *TxSimulator) GetStateRangeScanIteratorWithOptionsReturns(result1 ledgera.QueryResultsIterator, result2 error) { + fake.getStateRangeScanIteratorWithOptionsMutex.Lock() + defer fake.getStateRangeScanIteratorWithOptionsMutex.Unlock() + fake.GetStateRangeScanIteratorWithOptionsStub = nil + fake.getStateRangeScanIteratorWithOptionsReturns = struct { result1 ledgera.QueryResultsIterator result2 error }{result1, result2} } -func (fake *TxSimulator) GetStateRangeScanIteratorWithMetadataReturnsOnCall(i int, result1 ledgera.QueryResultsIterator, result2 error) { - fake.getStateRangeScanIteratorWithMetadataMutex.Lock() - defer fake.getStateRangeScanIteratorWithMetadataMutex.Unlock() - fake.GetStateRangeScanIteratorWithMetadataStub = nil - if fake.getStateRangeScanIteratorWithMetadataReturnsOnCall == nil { - fake.getStateRangeScanIteratorWithMetadataReturnsOnCall = make(map[int]struct { +func (fake *TxSimulator) GetStateRangeScanIteratorWithOptionsReturnsOnCall(i int, result1 ledgera.QueryResultsIterator, result2 error) { + fake.getStateRangeScanIteratorWithOptionsMutex.Lock() + defer fake.getStateRangeScanIteratorWithOptionsMutex.Unlock() + fake.GetStateRangeScanIteratorWithOptionsStub = nil + if fake.getStateRangeScanIteratorWithOptionsReturnsOnCall == nil { + fake.getStateRangeScanIteratorWithOptionsReturnsOnCall = make(map[int]struct { result1 ledgera.QueryResultsIterator result2 error }) } - fake.getStateRangeScanIteratorWithMetadataReturnsOnCall[i] = struct { + fake.getStateRangeScanIteratorWithOptionsReturnsOnCall[i] = struct { result1 ledgera.QueryResultsIterator result2 error }{result1, result2} @@ -2108,8 +2108,8 @@ func (fake *TxSimulator) Invocations() map[string][][]interface{} { defer fake.getStateMultipleKeysMutex.RUnlock() fake.getStateRangeScanIteratorMutex.RLock() defer fake.getStateRangeScanIteratorMutex.RUnlock() - fake.getStateRangeScanIteratorWithMetadataMutex.RLock() - defer fake.getStateRangeScanIteratorWithMetadataMutex.RUnlock() + fake.getStateRangeScanIteratorWithOptionsMutex.RLock() + defer fake.getStateRangeScanIteratorWithOptionsMutex.RUnlock() fake.getTxSimulationResultsMutex.RLock() defer fake.getTxSimulationResultsMutex.RUnlock() fake.setPrivateDataMutex.RLock() diff --git a/core/ledger/ledger_interface.go b/core/ledger/ledger_interface.go index 972a37e2fd2..96a408b2916 100644 --- a/core/ledger/ledger_interface.go +++ b/core/ledger/ledger_interface.go @@ -170,13 +170,13 @@ type QueryExecutor interface { GetStateMetadata(namespace, key string) (map[string][]byte, error) // GetStateMultipleKeys gets the values for multiple keys in a single call GetStateMultipleKeys(namespace string, keys []string) ([][]byte, error) - // GetStateRangeScanIteratorWithMetadata returns an iterator that contains all the key-values between given key ranges. + // GetStateRangeScanIteratorWithOptions returns an iterator that contains all the key-values between given key ranges. // startKey is included in the results and endKey is excluded. An empty startKey refers to the first available key // and an empty endKey refers to the last available key. For scanning all the keys, both the startKey and the endKey // can be supplied as empty strings. However, a full scan should be used judiciously for performance reasons. - // metadata is a map of additional query parameters + // options is a map of additional query parameters // The returned ResultsIterator contains results of type *KV which is defined in fabric-protos/ledger/queryresult. - GetStateRangeScanIteratorWithMetadata(namespace string, startKey, endKey string, metadata map[string]interface{}) (QueryResultsIterator, error) + GetStateRangeScanIteratorWithOptions(namespace string, startKey, endKey string, options map[string]interface{}) (QueryResultsIterator, error) // ExecuteQuery executes the given query and returns an iterator that contains results of type specific to the underlying data store. // Only used for state databases that support query // For a chaincode, the namespace corresponds to the chaincodeId diff --git a/core/ledger/mock/query_executor.go b/core/ledger/mock/query_executor.go index 491070a036f..56113567b2b 100644 --- a/core/ledger/mock/query_executor.go +++ b/core/ledger/mock/query_executor.go @@ -205,19 +205,19 @@ type QueryExecutor struct { result1 ledgera.ResultsIterator result2 error } - GetStateRangeScanIteratorWithMetadataStub func(string, string, string, map[string]interface{}) (ledger.QueryResultsIterator, error) - getStateRangeScanIteratorWithMetadataMutex sync.RWMutex - getStateRangeScanIteratorWithMetadataArgsForCall []struct { + GetStateRangeScanIteratorWithOptionsStub func(string, string, string, map[string]interface{}) (ledger.QueryResultsIterator, error) + getStateRangeScanIteratorWithOptionsMutex sync.RWMutex + getStateRangeScanIteratorWithOptionsArgsForCall []struct { arg1 string arg2 string arg3 string arg4 map[string]interface{} } - getStateRangeScanIteratorWithMetadataReturns struct { + getStateRangeScanIteratorWithOptionsReturns struct { result1 ledger.QueryResultsIterator result2 error } - getStateRangeScanIteratorWithMetadataReturnsOnCall map[int]struct { + getStateRangeScanIteratorWithOptionsReturnsOnCall map[int]struct { result1 ledger.QueryResultsIterator result2 error } @@ -1105,67 +1105,67 @@ func (fake *QueryExecutor) GetStateRangeScanIteratorReturnsOnCall(i int, result1 }{result1, result2} } -func (fake *QueryExecutor) GetStateRangeScanIteratorWithMetadata(arg1 string, arg2 string, arg3 string, arg4 map[string]interface{}) (ledger.QueryResultsIterator, error) { - fake.getStateRangeScanIteratorWithMetadataMutex.Lock() - ret, specificReturn := fake.getStateRangeScanIteratorWithMetadataReturnsOnCall[len(fake.getStateRangeScanIteratorWithMetadataArgsForCall)] - fake.getStateRangeScanIteratorWithMetadataArgsForCall = append(fake.getStateRangeScanIteratorWithMetadataArgsForCall, struct { +func (fake *QueryExecutor) GetStateRangeScanIteratorWithOptions(arg1 string, arg2 string, arg3 string, arg4 map[string]interface{}) (ledger.QueryResultsIterator, error) { + fake.getStateRangeScanIteratorWithOptionsMutex.Lock() + ret, specificReturn := fake.getStateRangeScanIteratorWithOptionsReturnsOnCall[len(fake.getStateRangeScanIteratorWithOptionsArgsForCall)] + fake.getStateRangeScanIteratorWithOptionsArgsForCall = append(fake.getStateRangeScanIteratorWithOptionsArgsForCall, struct { arg1 string arg2 string arg3 string arg4 map[string]interface{} }{arg1, arg2, arg3, arg4}) - fake.recordInvocation("GetStateRangeScanIteratorWithMetadata", []interface{}{arg1, arg2, arg3, arg4}) - fake.getStateRangeScanIteratorWithMetadataMutex.Unlock() - if fake.GetStateRangeScanIteratorWithMetadataStub != nil { - return fake.GetStateRangeScanIteratorWithMetadataStub(arg1, arg2, arg3, arg4) + fake.recordInvocation("GetStateRangeScanIteratorWithOptions", []interface{}{arg1, arg2, arg3, arg4}) + fake.getStateRangeScanIteratorWithOptionsMutex.Unlock() + if fake.GetStateRangeScanIteratorWithOptionsStub != nil { + return fake.GetStateRangeScanIteratorWithOptionsStub(arg1, arg2, arg3, arg4) } if specificReturn { return ret.result1, ret.result2 } - fakeReturns := fake.getStateRangeScanIteratorWithMetadataReturns + fakeReturns := fake.getStateRangeScanIteratorWithOptionsReturns return fakeReturns.result1, fakeReturns.result2 } -func (fake *QueryExecutor) GetStateRangeScanIteratorWithMetadataCallCount() int { - fake.getStateRangeScanIteratorWithMetadataMutex.RLock() - defer fake.getStateRangeScanIteratorWithMetadataMutex.RUnlock() - return len(fake.getStateRangeScanIteratorWithMetadataArgsForCall) +func (fake *QueryExecutor) GetStateRangeScanIteratorWithOptionsCallCount() int { + fake.getStateRangeScanIteratorWithOptionsMutex.RLock() + defer fake.getStateRangeScanIteratorWithOptionsMutex.RUnlock() + return len(fake.getStateRangeScanIteratorWithOptionsArgsForCall) } -func (fake *QueryExecutor) GetStateRangeScanIteratorWithMetadataCalls(stub func(string, string, string, map[string]interface{}) (ledger.QueryResultsIterator, error)) { - fake.getStateRangeScanIteratorWithMetadataMutex.Lock() - defer fake.getStateRangeScanIteratorWithMetadataMutex.Unlock() - fake.GetStateRangeScanIteratorWithMetadataStub = stub +func (fake *QueryExecutor) GetStateRangeScanIteratorWithOptionsCalls(stub func(string, string, string, map[string]interface{}) (ledger.QueryResultsIterator, error)) { + fake.getStateRangeScanIteratorWithOptionsMutex.Lock() + defer fake.getStateRangeScanIteratorWithOptionsMutex.Unlock() + fake.GetStateRangeScanIteratorWithOptionsStub = stub } -func (fake *QueryExecutor) GetStateRangeScanIteratorWithMetadataArgsForCall(i int) (string, string, string, map[string]interface{}) { - fake.getStateRangeScanIteratorWithMetadataMutex.RLock() - defer fake.getStateRangeScanIteratorWithMetadataMutex.RUnlock() - argsForCall := fake.getStateRangeScanIteratorWithMetadataArgsForCall[i] +func (fake *QueryExecutor) GetStateRangeScanIteratorWithOptionsArgsForCall(i int) (string, string, string, map[string]interface{}) { + fake.getStateRangeScanIteratorWithOptionsMutex.RLock() + defer fake.getStateRangeScanIteratorWithOptionsMutex.RUnlock() + argsForCall := fake.getStateRangeScanIteratorWithOptionsArgsForCall[i] return argsForCall.arg1, argsForCall.arg2, argsForCall.arg3, argsForCall.arg4 } -func (fake *QueryExecutor) GetStateRangeScanIteratorWithMetadataReturns(result1 ledger.QueryResultsIterator, result2 error) { - fake.getStateRangeScanIteratorWithMetadataMutex.Lock() - defer fake.getStateRangeScanIteratorWithMetadataMutex.Unlock() - fake.GetStateRangeScanIteratorWithMetadataStub = nil - fake.getStateRangeScanIteratorWithMetadataReturns = struct { +func (fake *QueryExecutor) GetStateRangeScanIteratorWithOptionsReturns(result1 ledger.QueryResultsIterator, result2 error) { + fake.getStateRangeScanIteratorWithOptionsMutex.Lock() + defer fake.getStateRangeScanIteratorWithOptionsMutex.Unlock() + fake.GetStateRangeScanIteratorWithOptionsStub = nil + fake.getStateRangeScanIteratorWithOptionsReturns = struct { result1 ledger.QueryResultsIterator result2 error }{result1, result2} } -func (fake *QueryExecutor) GetStateRangeScanIteratorWithMetadataReturnsOnCall(i int, result1 ledger.QueryResultsIterator, result2 error) { - fake.getStateRangeScanIteratorWithMetadataMutex.Lock() - defer fake.getStateRangeScanIteratorWithMetadataMutex.Unlock() - fake.GetStateRangeScanIteratorWithMetadataStub = nil - if fake.getStateRangeScanIteratorWithMetadataReturnsOnCall == nil { - fake.getStateRangeScanIteratorWithMetadataReturnsOnCall = make(map[int]struct { +func (fake *QueryExecutor) GetStateRangeScanIteratorWithOptionsReturnsOnCall(i int, result1 ledger.QueryResultsIterator, result2 error) { + fake.getStateRangeScanIteratorWithOptionsMutex.Lock() + defer fake.getStateRangeScanIteratorWithOptionsMutex.Unlock() + fake.GetStateRangeScanIteratorWithOptionsStub = nil + if fake.getStateRangeScanIteratorWithOptionsReturnsOnCall == nil { + fake.getStateRangeScanIteratorWithOptionsReturnsOnCall = make(map[int]struct { result1 ledger.QueryResultsIterator result2 error }) } - fake.getStateRangeScanIteratorWithMetadataReturnsOnCall[i] = struct { + fake.getStateRangeScanIteratorWithOptionsReturnsOnCall[i] = struct { result1 ledger.QueryResultsIterator result2 error }{result1, result2} @@ -1202,8 +1202,8 @@ func (fake *QueryExecutor) Invocations() map[string][][]interface{} { defer fake.getStateMultipleKeysMutex.RUnlock() fake.getStateRangeScanIteratorMutex.RLock() defer fake.getStateRangeScanIteratorMutex.RUnlock() - fake.getStateRangeScanIteratorWithMetadataMutex.RLock() - defer fake.getStateRangeScanIteratorWithMetadataMutex.RUnlock() + fake.getStateRangeScanIteratorWithOptionsMutex.RLock() + defer fake.getStateRangeScanIteratorWithOptionsMutex.RUnlock() copiedInvocations := map[string][][]interface{}{} for key, value := range fake.invocations { copiedInvocations[key] = value diff --git a/core/ledger/mock/tx_simulator.go b/core/ledger/mock/tx_simulator.go index f6366b419b5..9c509a7fe91 100644 --- a/core/ledger/mock/tx_simulator.go +++ b/core/ledger/mock/tx_simulator.go @@ -266,19 +266,19 @@ type TxSimulator struct { result1 ledgera.ResultsIterator result2 error } - GetStateRangeScanIteratorWithMetadataStub func(string, string, string, map[string]interface{}) (ledger.QueryResultsIterator, error) - getStateRangeScanIteratorWithMetadataMutex sync.RWMutex - getStateRangeScanIteratorWithMetadataArgsForCall []struct { + GetStateRangeScanIteratorWithOptionsStub func(string, string, string, map[string]interface{}) (ledger.QueryResultsIterator, error) + getStateRangeScanIteratorWithOptionsMutex sync.RWMutex + getStateRangeScanIteratorWithOptionsArgsForCall []struct { arg1 string arg2 string arg3 string arg4 map[string]interface{} } - getStateRangeScanIteratorWithMetadataReturns struct { + getStateRangeScanIteratorWithOptionsReturns struct { result1 ledger.QueryResultsIterator result2 error } - getStateRangeScanIteratorWithMetadataReturnsOnCall map[int]struct { + getStateRangeScanIteratorWithOptionsReturnsOnCall map[int]struct { result1 ledger.QueryResultsIterator result2 error } @@ -1563,67 +1563,67 @@ func (fake *TxSimulator) GetStateRangeScanIteratorReturnsOnCall(i int, result1 l }{result1, result2} } -func (fake *TxSimulator) GetStateRangeScanIteratorWithMetadata(arg1 string, arg2 string, arg3 string, arg4 map[string]interface{}) (ledger.QueryResultsIterator, error) { - fake.getStateRangeScanIteratorWithMetadataMutex.Lock() - ret, specificReturn := fake.getStateRangeScanIteratorWithMetadataReturnsOnCall[len(fake.getStateRangeScanIteratorWithMetadataArgsForCall)] - fake.getStateRangeScanIteratorWithMetadataArgsForCall = append(fake.getStateRangeScanIteratorWithMetadataArgsForCall, struct { +func (fake *TxSimulator) GetStateRangeScanIteratorWithOptions(arg1 string, arg2 string, arg3 string, arg4 map[string]interface{}) (ledger.QueryResultsIterator, error) { + fake.getStateRangeScanIteratorWithOptionsMutex.Lock() + ret, specificReturn := fake.getStateRangeScanIteratorWithOptionsReturnsOnCall[len(fake.getStateRangeScanIteratorWithOptionsArgsForCall)] + fake.getStateRangeScanIteratorWithOptionsArgsForCall = append(fake.getStateRangeScanIteratorWithOptionsArgsForCall, struct { arg1 string arg2 string arg3 string arg4 map[string]interface{} }{arg1, arg2, arg3, arg4}) - fake.recordInvocation("GetStateRangeScanIteratorWithMetadata", []interface{}{arg1, arg2, arg3, arg4}) - fake.getStateRangeScanIteratorWithMetadataMutex.Unlock() - if fake.GetStateRangeScanIteratorWithMetadataStub != nil { - return fake.GetStateRangeScanIteratorWithMetadataStub(arg1, arg2, arg3, arg4) + fake.recordInvocation("GetStateRangeScanIteratorWithOptions", []interface{}{arg1, arg2, arg3, arg4}) + fake.getStateRangeScanIteratorWithOptionsMutex.Unlock() + if fake.GetStateRangeScanIteratorWithOptionsStub != nil { + return fake.GetStateRangeScanIteratorWithOptionsStub(arg1, arg2, arg3, arg4) } if specificReturn { return ret.result1, ret.result2 } - fakeReturns := fake.getStateRangeScanIteratorWithMetadataReturns + fakeReturns := fake.getStateRangeScanIteratorWithOptionsReturns return fakeReturns.result1, fakeReturns.result2 } -func (fake *TxSimulator) GetStateRangeScanIteratorWithMetadataCallCount() int { - fake.getStateRangeScanIteratorWithMetadataMutex.RLock() - defer fake.getStateRangeScanIteratorWithMetadataMutex.RUnlock() - return len(fake.getStateRangeScanIteratorWithMetadataArgsForCall) +func (fake *TxSimulator) GetStateRangeScanIteratorWithOptionsCallCount() int { + fake.getStateRangeScanIteratorWithOptionsMutex.RLock() + defer fake.getStateRangeScanIteratorWithOptionsMutex.RUnlock() + return len(fake.getStateRangeScanIteratorWithOptionsArgsForCall) } -func (fake *TxSimulator) GetStateRangeScanIteratorWithMetadataCalls(stub func(string, string, string, map[string]interface{}) (ledger.QueryResultsIterator, error)) { - fake.getStateRangeScanIteratorWithMetadataMutex.Lock() - defer fake.getStateRangeScanIteratorWithMetadataMutex.Unlock() - fake.GetStateRangeScanIteratorWithMetadataStub = stub +func (fake *TxSimulator) GetStateRangeScanIteratorWithOptionsCalls(stub func(string, string, string, map[string]interface{}) (ledger.QueryResultsIterator, error)) { + fake.getStateRangeScanIteratorWithOptionsMutex.Lock() + defer fake.getStateRangeScanIteratorWithOptionsMutex.Unlock() + fake.GetStateRangeScanIteratorWithOptionsStub = stub } -func (fake *TxSimulator) GetStateRangeScanIteratorWithMetadataArgsForCall(i int) (string, string, string, map[string]interface{}) { - fake.getStateRangeScanIteratorWithMetadataMutex.RLock() - defer fake.getStateRangeScanIteratorWithMetadataMutex.RUnlock() - argsForCall := fake.getStateRangeScanIteratorWithMetadataArgsForCall[i] +func (fake *TxSimulator) GetStateRangeScanIteratorWithOptionsArgsForCall(i int) (string, string, string, map[string]interface{}) { + fake.getStateRangeScanIteratorWithOptionsMutex.RLock() + defer fake.getStateRangeScanIteratorWithOptionsMutex.RUnlock() + argsForCall := fake.getStateRangeScanIteratorWithOptionsArgsForCall[i] return argsForCall.arg1, argsForCall.arg2, argsForCall.arg3, argsForCall.arg4 } -func (fake *TxSimulator) GetStateRangeScanIteratorWithMetadataReturns(result1 ledger.QueryResultsIterator, result2 error) { - fake.getStateRangeScanIteratorWithMetadataMutex.Lock() - defer fake.getStateRangeScanIteratorWithMetadataMutex.Unlock() - fake.GetStateRangeScanIteratorWithMetadataStub = nil - fake.getStateRangeScanIteratorWithMetadataReturns = struct { +func (fake *TxSimulator) GetStateRangeScanIteratorWithOptionsReturns(result1 ledger.QueryResultsIterator, result2 error) { + fake.getStateRangeScanIteratorWithOptionsMutex.Lock() + defer fake.getStateRangeScanIteratorWithOptionsMutex.Unlock() + fake.GetStateRangeScanIteratorWithOptionsStub = nil + fake.getStateRangeScanIteratorWithOptionsReturns = struct { result1 ledger.QueryResultsIterator result2 error }{result1, result2} } -func (fake *TxSimulator) GetStateRangeScanIteratorWithMetadataReturnsOnCall(i int, result1 ledger.QueryResultsIterator, result2 error) { - fake.getStateRangeScanIteratorWithMetadataMutex.Lock() - defer fake.getStateRangeScanIteratorWithMetadataMutex.Unlock() - fake.GetStateRangeScanIteratorWithMetadataStub = nil - if fake.getStateRangeScanIteratorWithMetadataReturnsOnCall == nil { - fake.getStateRangeScanIteratorWithMetadataReturnsOnCall = make(map[int]struct { +func (fake *TxSimulator) GetStateRangeScanIteratorWithOptionsReturnsOnCall(i int, result1 ledger.QueryResultsIterator, result2 error) { + fake.getStateRangeScanIteratorWithOptionsMutex.Lock() + defer fake.getStateRangeScanIteratorWithOptionsMutex.Unlock() + fake.GetStateRangeScanIteratorWithOptionsStub = nil + if fake.getStateRangeScanIteratorWithOptionsReturnsOnCall == nil { + fake.getStateRangeScanIteratorWithOptionsReturnsOnCall = make(map[int]struct { result1 ledger.QueryResultsIterator result2 error }) } - fake.getStateRangeScanIteratorWithMetadataReturnsOnCall[i] = struct { + fake.getStateRangeScanIteratorWithOptionsReturnsOnCall[i] = struct { result1 ledger.QueryResultsIterator result2 error }{result1, result2} @@ -2108,8 +2108,8 @@ func (fake *TxSimulator) Invocations() map[string][][]interface{} { defer fake.getStateMultipleKeysMutex.RUnlock() fake.getStateRangeScanIteratorMutex.RLock() defer fake.getStateRangeScanIteratorMutex.RUnlock() - fake.getStateRangeScanIteratorWithMetadataMutex.RLock() - defer fake.getStateRangeScanIteratorWithMetadataMutex.RUnlock() + fake.getStateRangeScanIteratorWithOptionsMutex.RLock() + defer fake.getStateRangeScanIteratorWithOptionsMutex.RUnlock() fake.getTxSimulationResultsMutex.RLock() defer fake.getTxSimulationResultsMutex.RUnlock() fake.setPrivateDataMutex.RLock() diff --git a/core/scc/lscc/mock/query_executor.go b/core/scc/lscc/mock/query_executor.go index 5c225736250..e60c748704b 100644 --- a/core/scc/lscc/mock/query_executor.go +++ b/core/scc/lscc/mock/query_executor.go @@ -205,19 +205,19 @@ type QueryExecutor struct { result1 ledger.ResultsIterator result2 error } - GetStateRangeScanIteratorWithMetadataStub func(string, string, string, map[string]interface{}) (ledgera.QueryResultsIterator, error) - getStateRangeScanIteratorWithMetadataMutex sync.RWMutex - getStateRangeScanIteratorWithMetadataArgsForCall []struct { + GetStateRangeScanIteratorWithOptionsStub func(string, string, string, map[string]interface{}) (ledgera.QueryResultsIterator, error) + getStateRangeScanIteratorWithOptionsMutex sync.RWMutex + getStateRangeScanIteratorWithOptionsArgsForCall []struct { arg1 string arg2 string arg3 string arg4 map[string]interface{} } - getStateRangeScanIteratorWithMetadataReturns struct { + getStateRangeScanIteratorWithOptionsReturns struct { result1 ledgera.QueryResultsIterator result2 error } - getStateRangeScanIteratorWithMetadataReturnsOnCall map[int]struct { + getStateRangeScanIteratorWithOptionsReturnsOnCall map[int]struct { result1 ledgera.QueryResultsIterator result2 error } @@ -1105,67 +1105,67 @@ func (fake *QueryExecutor) GetStateRangeScanIteratorReturnsOnCall(i int, result1 }{result1, result2} } -func (fake *QueryExecutor) GetStateRangeScanIteratorWithMetadata(arg1 string, arg2 string, arg3 string, arg4 map[string]interface{}) (ledgera.QueryResultsIterator, error) { - fake.getStateRangeScanIteratorWithMetadataMutex.Lock() - ret, specificReturn := fake.getStateRangeScanIteratorWithMetadataReturnsOnCall[len(fake.getStateRangeScanIteratorWithMetadataArgsForCall)] - fake.getStateRangeScanIteratorWithMetadataArgsForCall = append(fake.getStateRangeScanIteratorWithMetadataArgsForCall, struct { +func (fake *QueryExecutor) GetStateRangeScanIteratorWithOptions(arg1 string, arg2 string, arg3 string, arg4 map[string]interface{}) (ledgera.QueryResultsIterator, error) { + fake.getStateRangeScanIteratorWithOptionsMutex.Lock() + ret, specificReturn := fake.getStateRangeScanIteratorWithOptionsReturnsOnCall[len(fake.getStateRangeScanIteratorWithOptionsArgsForCall)] + fake.getStateRangeScanIteratorWithOptionsArgsForCall = append(fake.getStateRangeScanIteratorWithOptionsArgsForCall, struct { arg1 string arg2 string arg3 string arg4 map[string]interface{} }{arg1, arg2, arg3, arg4}) - fake.recordInvocation("GetStateRangeScanIteratorWithMetadata", []interface{}{arg1, arg2, arg3, arg4}) - fake.getStateRangeScanIteratorWithMetadataMutex.Unlock() - if fake.GetStateRangeScanIteratorWithMetadataStub != nil { - return fake.GetStateRangeScanIteratorWithMetadataStub(arg1, arg2, arg3, arg4) + fake.recordInvocation("GetStateRangeScanIteratorWithOptions", []interface{}{arg1, arg2, arg3, arg4}) + fake.getStateRangeScanIteratorWithOptionsMutex.Unlock() + if fake.GetStateRangeScanIteratorWithOptionsStub != nil { + return fake.GetStateRangeScanIteratorWithOptionsStub(arg1, arg2, arg3, arg4) } if specificReturn { return ret.result1, ret.result2 } - fakeReturns := fake.getStateRangeScanIteratorWithMetadataReturns + fakeReturns := fake.getStateRangeScanIteratorWithOptionsReturns return fakeReturns.result1, fakeReturns.result2 } -func (fake *QueryExecutor) GetStateRangeScanIteratorWithMetadataCallCount() int { - fake.getStateRangeScanIteratorWithMetadataMutex.RLock() - defer fake.getStateRangeScanIteratorWithMetadataMutex.RUnlock() - return len(fake.getStateRangeScanIteratorWithMetadataArgsForCall) +func (fake *QueryExecutor) GetStateRangeScanIteratorWithOptionsCallCount() int { + fake.getStateRangeScanIteratorWithOptionsMutex.RLock() + defer fake.getStateRangeScanIteratorWithOptionsMutex.RUnlock() + return len(fake.getStateRangeScanIteratorWithOptionsArgsForCall) } -func (fake *QueryExecutor) GetStateRangeScanIteratorWithMetadataCalls(stub func(string, string, string, map[string]interface{}) (ledgera.QueryResultsIterator, error)) { - fake.getStateRangeScanIteratorWithMetadataMutex.Lock() - defer fake.getStateRangeScanIteratorWithMetadataMutex.Unlock() - fake.GetStateRangeScanIteratorWithMetadataStub = stub +func (fake *QueryExecutor) GetStateRangeScanIteratorWithOptionsCalls(stub func(string, string, string, map[string]interface{}) (ledgera.QueryResultsIterator, error)) { + fake.getStateRangeScanIteratorWithOptionsMutex.Lock() + defer fake.getStateRangeScanIteratorWithOptionsMutex.Unlock() + fake.GetStateRangeScanIteratorWithOptionsStub = stub } -func (fake *QueryExecutor) GetStateRangeScanIteratorWithMetadataArgsForCall(i int) (string, string, string, map[string]interface{}) { - fake.getStateRangeScanIteratorWithMetadataMutex.RLock() - defer fake.getStateRangeScanIteratorWithMetadataMutex.RUnlock() - argsForCall := fake.getStateRangeScanIteratorWithMetadataArgsForCall[i] +func (fake *QueryExecutor) GetStateRangeScanIteratorWithOptionsArgsForCall(i int) (string, string, string, map[string]interface{}) { + fake.getStateRangeScanIteratorWithOptionsMutex.RLock() + defer fake.getStateRangeScanIteratorWithOptionsMutex.RUnlock() + argsForCall := fake.getStateRangeScanIteratorWithOptionsArgsForCall[i] return argsForCall.arg1, argsForCall.arg2, argsForCall.arg3, argsForCall.arg4 } -func (fake *QueryExecutor) GetStateRangeScanIteratorWithMetadataReturns(result1 ledgera.QueryResultsIterator, result2 error) { - fake.getStateRangeScanIteratorWithMetadataMutex.Lock() - defer fake.getStateRangeScanIteratorWithMetadataMutex.Unlock() - fake.GetStateRangeScanIteratorWithMetadataStub = nil - fake.getStateRangeScanIteratorWithMetadataReturns = struct { +func (fake *QueryExecutor) GetStateRangeScanIteratorWithOptionsReturns(result1 ledgera.QueryResultsIterator, result2 error) { + fake.getStateRangeScanIteratorWithOptionsMutex.Lock() + defer fake.getStateRangeScanIteratorWithOptionsMutex.Unlock() + fake.GetStateRangeScanIteratorWithOptionsStub = nil + fake.getStateRangeScanIteratorWithOptionsReturns = struct { result1 ledgera.QueryResultsIterator result2 error }{result1, result2} } -func (fake *QueryExecutor) GetStateRangeScanIteratorWithMetadataReturnsOnCall(i int, result1 ledgera.QueryResultsIterator, result2 error) { - fake.getStateRangeScanIteratorWithMetadataMutex.Lock() - defer fake.getStateRangeScanIteratorWithMetadataMutex.Unlock() - fake.GetStateRangeScanIteratorWithMetadataStub = nil - if fake.getStateRangeScanIteratorWithMetadataReturnsOnCall == nil { - fake.getStateRangeScanIteratorWithMetadataReturnsOnCall = make(map[int]struct { +func (fake *QueryExecutor) GetStateRangeScanIteratorWithOptionsReturnsOnCall(i int, result1 ledgera.QueryResultsIterator, result2 error) { + fake.getStateRangeScanIteratorWithOptionsMutex.Lock() + defer fake.getStateRangeScanIteratorWithOptionsMutex.Unlock() + fake.GetStateRangeScanIteratorWithOptionsStub = nil + if fake.getStateRangeScanIteratorWithOptionsReturnsOnCall == nil { + fake.getStateRangeScanIteratorWithOptionsReturnsOnCall = make(map[int]struct { result1 ledgera.QueryResultsIterator result2 error }) } - fake.getStateRangeScanIteratorWithMetadataReturnsOnCall[i] = struct { + fake.getStateRangeScanIteratorWithOptionsReturnsOnCall[i] = struct { result1 ledgera.QueryResultsIterator result2 error }{result1, result2} @@ -1202,8 +1202,8 @@ func (fake *QueryExecutor) Invocations() map[string][][]interface{} { defer fake.getStateMultipleKeysMutex.RUnlock() fake.getStateRangeScanIteratorMutex.RLock() defer fake.getStateRangeScanIteratorMutex.RUnlock() - fake.getStateRangeScanIteratorWithMetadataMutex.RLock() - defer fake.getStateRangeScanIteratorWithMetadataMutex.RUnlock() + fake.getStateRangeScanIteratorWithOptionsMutex.RLock() + defer fake.getStateRangeScanIteratorWithOptionsMutex.RUnlock() copiedInvocations := map[string][][]interface{}{} for key, value := range fake.invocations { copiedInvocations[key] = value