Skip to content

Commit 0c78477

Browse files
author
sheldon
committed
Merge branch 'main' into sheldon/bump-cosmos-sdk-v0.45
2 parents 46d0b81 + 2819712 commit 0c78477

File tree

13 files changed

+300
-12
lines changed

13 files changed

+300
-12
lines changed

modules/nft/keeper/collection.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ func (k Keeper) GetPaginateCollection(ctx sdk.Context, request *types.QueryColle
5252
var nfts []exported.NFT
5353
store := ctx.KVStore(k.storeKey)
5454
nftStore := prefix.NewStore(store, types.KeyNFT(denomID, ""))
55-
pageRes, err := query.Paginate(nftStore, request.Pagination, func(key []byte, value []byte) error {
55+
pageRes, err := query.Paginate(nftStore, shapePageRequest(request.Pagination), func(key []byte, value []byte) error {
5656
var baseNFT types.BaseNFT
5757
k.cdc.MustUnmarshal(value, &baseNFT)
5858
nfts = append(nfts, baseNFT)

modules/nft/keeper/grpc_query.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ func (k Keeper) Owner(c context.Context, request *types.QueryOwnerRequest) (*typ
4848
idsMap := make(map[string][]string)
4949
store := ctx.KVStore(k.storeKey)
5050
nftStore := prefix.NewStore(store, types.KeyOwner(ownerAddress, request.DenomId, ""))
51-
pageRes, err := query.Paginate(nftStore, request.Pagination, func(key []byte, value []byte) error {
51+
pageRes, err := query.Paginate(nftStore, shapePageRequest(request.Pagination), func(key []byte, value []byte) error {
5252
denomID := request.DenomId
5353
tokenID := string(key)
5454
if len(request.DenomId) == 0 {
@@ -101,7 +101,7 @@ func (k Keeper) Denoms(c context.Context, req *types.QueryDenomsRequest) (*types
101101
var denoms []types.Denom
102102
store := ctx.KVStore(k.storeKey)
103103
denomStore := prefix.NewStore(store, types.KeyDenomID(""))
104-
pageRes, err := query.Paginate(denomStore, req.Pagination, func(key []byte, value []byte) error {
104+
pageRes, err := query.Paginate(denomStore, shapePageRequest(req.Pagination), func(key []byte, value []byte) error {
105105
var denom types.Denom
106106
k.cdc.MustUnmarshal(value, &denom)
107107
denoms = append(denoms, denom)

modules/nft/keeper/pagination.go

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package keeper
2+
3+
import "github.com/cosmos/cosmos-sdk/types/query"
4+
5+
var (
6+
paginationDefaultLimit uint64 = 100
7+
paginationMaxLimit uint64 = 100
8+
)
9+
10+
// shapePageRequest shapes the PageRequest params to avoid querying all items.
11+
// PageRequest.offset is forbidden and PageRequest.count_total must be zero.
12+
// PageRequest.limit mustn't exceed paginationMaxLimit and is set to
13+
// paginationDefaultLimit when unset.
14+
func shapePageRequest(req *query.PageRequest) *query.PageRequest {
15+
res := newDefaultPageRequest()
16+
17+
if req == nil {
18+
return res
19+
}
20+
21+
res.Key = req.Key
22+
res.Reverse = req.Reverse
23+
if req.Limit > 0 && req.Limit <= paginationMaxLimit {
24+
res.Limit = req.Limit
25+
}
26+
27+
return res
28+
}
29+
30+
// newDefaultPageRequest returns a default PageRequest.
31+
func newDefaultPageRequest() *query.PageRequest {
32+
return &query.PageRequest{
33+
Key: nil,
34+
Offset: 0,
35+
Limit: paginationDefaultLimit,
36+
CountTotal: false,
37+
Reverse: false,
38+
}
39+
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package keeper
2+
3+
import (
4+
"github.com/cosmos/cosmos-sdk/types/query"
5+
"github.com/stretchr/testify/require"
6+
"testing"
7+
)
8+
9+
var ShapePageRequest = shapePageRequest
10+
11+
func TestShapePageRequest(t *testing.T) {
12+
defaultRequest := newDefaultPageRequest()
13+
14+
res1 := ShapePageRequest(nil)
15+
require.NotNil(t, res1)
16+
require.Equal(t, res1.Limit, defaultRequest.Limit) // limit == paginationDefaultLimit
17+
require.Equal(t, res1.Offset, defaultRequest.Offset) // offset == 0
18+
require.Equal(t, res1.CountTotal, defaultRequest.CountTotal) // count_total == false
19+
20+
request := &query.PageRequest{
21+
Key: nil,
22+
Offset: 100,
23+
Limit: 10000,
24+
CountTotal: true,
25+
Reverse: true,
26+
}
27+
28+
res2 := ShapePageRequest(request)
29+
require.NotNil(t, res2)
30+
require.Equal(t, res2.Limit, defaultRequest.Limit) // limit == paginationDefaultLimit
31+
require.Equal(t, res2.Offset, defaultRequest.Offset) // offset == 0
32+
require.Equal(t, res2.CountTotal, defaultRequest.CountTotal) // count_total == false
33+
}

modules/oracle/keeper/grpc_query.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ func (k Keeper) Feeds(c context.Context, req *types.QueryFeedsRequest) (*types.Q
4444
store := ctx.KVStore(k.storeKey)
4545
if len(req.State) == 0 {
4646
feedStore := prefix.NewStore(store, types.GetFeedPrefixKey())
47-
pageRes, err = query.Paginate(feedStore, req.Pagination, func(key []byte, value []byte) error {
47+
pageRes, err = query.Paginate(feedStore, shapePageRequest(req.Pagination), func(key []byte, value []byte) error {
4848
var feed types.Feed
4949
k.cdc.MustUnmarshal(value, &feed)
5050
result = append(result, BuildFeedContext(ctx, k, feed))
@@ -60,7 +60,7 @@ func (k Keeper) Feeds(c context.Context, req *types.QueryFeedsRequest) (*types.Q
6060

6161
}
6262
feedStore := prefix.NewStore(store, types.GetFeedStatePrefixKey(state))
63-
pageRes, err = query.Paginate(feedStore, req.Pagination, func(key []byte, value []byte) error {
63+
pageRes, err = query.Paginate(feedStore, shapePageRequest(req.Pagination), func(key []byte, value []byte) error {
6464
var feedName gogotypes.StringValue
6565
k.cdc.MustUnmarshal(value, &feedName)
6666
if feed, found := k.GetFeed(ctx, feedName.Value); found {
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package keeper
2+
3+
import "github.com/cosmos/cosmos-sdk/types/query"
4+
5+
var (
6+
paginationDefaultLimit uint64 = 100
7+
paginationMaxLimit uint64 = 100
8+
)
9+
10+
// shapePageRequest shapes the PageRequest params to avoid querying all items.
11+
// PageRequest.offset is forbidden and PageRequest.count_total must be zero.
12+
// PageRequest.limit mustn't exceed paginationMaxLimit and is set to
13+
// paginationDefaultLimit when unset.
14+
func shapePageRequest(req *query.PageRequest) *query.PageRequest {
15+
res := newDefaultPageRequest()
16+
17+
if req == nil {
18+
return res
19+
}
20+
21+
res.Key = req.Key
22+
res.Reverse = req.Reverse
23+
if req.Limit > 0 && req.Limit <= paginationMaxLimit {
24+
res.Limit = req.Limit
25+
}
26+
27+
return res
28+
}
29+
30+
// newDefaultPageRequest returns a default PageRequest.
31+
func newDefaultPageRequest() *query.PageRequest {
32+
return &query.PageRequest{
33+
Key: nil,
34+
Offset: 0,
35+
Limit: paginationDefaultLimit,
36+
CountTotal: false,
37+
Reverse: false,
38+
}
39+
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package keeper
2+
3+
import (
4+
"github.com/cosmos/cosmos-sdk/types/query"
5+
"github.com/stretchr/testify/require"
6+
"testing"
7+
)
8+
9+
var ShapePageRequest = shapePageRequest
10+
11+
func TestShapePageRequest(t *testing.T) {
12+
defaultRequest := newDefaultPageRequest()
13+
14+
res1 := ShapePageRequest(nil)
15+
require.NotNil(t, res1)
16+
require.Equal(t, res1.Limit, defaultRequest.Limit) // limit == paginationDefaultLimit
17+
require.Equal(t, res1.Offset, defaultRequest.Offset) // offset == 0
18+
require.Equal(t, res1.CountTotal, defaultRequest.CountTotal) // count_total == false
19+
20+
request := &query.PageRequest{
21+
Key: nil,
22+
Offset: 100,
23+
Limit: 10000,
24+
CountTotal: true,
25+
Reverse: true,
26+
}
27+
28+
res2 := ShapePageRequest(request)
29+
require.NotNil(t, res2)
30+
require.Equal(t, res2.Limit, defaultRequest.Limit) // limit == paginationDefaultLimit
31+
require.Equal(t, res2.Offset, defaultRequest.Offset) // offset == 0
32+
require.Equal(t, res2.CountTotal, defaultRequest.CountTotal) // count_total == false
33+
}

modules/service/keeper/grpc_query.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ func (k Keeper) Bindings(c context.Context, req *types.QueryBindingsRequest) (*t
6565
var err error
6666
if len(req.Owner) == 0 {
6767
bindingStore := prefix.NewStore(store, types.GetBindingsSubspace(req.ServiceName))
68-
pageRes, err = query.Paginate(bindingStore, req.Pagination, func(key []byte, value []byte) error {
68+
pageRes, err = query.Paginate(bindingStore, shapePageRequest(req.Pagination), func(key []byte, value []byte) error {
6969
var binding types.ServiceBinding
7070
k.cdc.MustUnmarshal(value, &binding)
7171
bindings = append(bindings, &binding)
@@ -80,7 +80,7 @@ func (k Keeper) Bindings(c context.Context, req *types.QueryBindingsRequest) (*t
8080
return nil, sdkerrors.Wrapf(sdkerrors.ErrInvalidAddress, "invalid owner address (%s)", err)
8181
}
8282
bindingStore := prefix.NewStore(store, types.GetOwnerBindingsSubspace(owner, req.ServiceName))
83-
pageRes, err = query.Paginate(bindingStore, req.Pagination, func(key []byte, value []byte) error {
83+
pageRes, err = query.Paginate(bindingStore, shapePageRequest(req.Pagination), func(key []byte, value []byte) error {
8484
provider := sdk.AccAddress(key)
8585

8686
if binding, found := k.GetServiceBinding(ctx, req.ServiceName, provider); found {
@@ -171,7 +171,7 @@ func (k Keeper) Requests(c context.Context, req *types.QueryRequestsRequest) (*t
171171
requests := make([]*types.Request, 0)
172172
store := ctx.KVStore(k.storeKey)
173173
requestStore := prefix.NewStore(store, types.GetActiveRequestSubspace(req.ServiceName, provider))
174-
pageRes, err := query.Paginate(requestStore, req.Pagination, func(key []byte, value []byte) error {
174+
pageRes, err := query.Paginate(requestStore, shapePageRequest(req.Pagination), func(key []byte, value []byte) error {
175175
var requestID gogotypes.BytesValue
176176
k.cdc.MustUnmarshal(value, &requestID)
177177
request, _ := k.GetRequest(ctx, requestID.Value)
@@ -202,7 +202,7 @@ func (k Keeper) RequestsByReqCtx(c context.Context, req *types.QueryRequestsByRe
202202
requests := make([]*types.Request, 0)
203203
store := ctx.KVStore(k.storeKey)
204204
requestStore := prefix.NewStore(store, types.GetRequestSubspaceByReqCtx(requestContextId, req.BatchCounter))
205-
pageRes, err := query.Paginate(requestStore, req.Pagination, func(key []byte, value []byte) error {
205+
pageRes, err := query.Paginate(requestStore, shapePageRequest(req.Pagination), func(key []byte, value []byte) error {
206206
requestID := append(append(requestContextId, sdk.Uint64ToBigEndian(req.BatchCounter)...), key...)
207207
request, _ := k.GetRequest(ctx, requestID)
208208
requests = append(requests, &request)
@@ -256,7 +256,7 @@ func (k Keeper) Responses(c context.Context, req *types.QueryResponsesRequest) (
256256
store := ctx.KVStore(k.storeKey)
257257

258258
responseStore := prefix.NewStore(store, types.GetResponseSubspaceByReqCtx(requestContextId, req.BatchCounter))
259-
pageRes, err := query.Paginate(responseStore, req.Pagination, func(key []byte, value []byte) error {
259+
pageRes, err := query.Paginate(responseStore, shapePageRequest(req.Pagination), func(key []byte, value []byte) error {
260260
var response types.Response
261261
k.cdc.MustUnmarshal(value, &response)
262262
responses = append(responses, &response)
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package keeper
2+
3+
import "github.com/cosmos/cosmos-sdk/types/query"
4+
5+
var (
6+
paginationDefaultLimit uint64 = 100
7+
paginationMaxLimit uint64 = 100
8+
)
9+
10+
// shapePageRequest shapes the PageRequest params to avoid querying all items.
11+
// PageRequest.offset is forbidden and PageRequest.count_total must be zero.
12+
// PageRequest.limit mustn't exceed paginationMaxLimit and is set to
13+
// paginationDefaultLimit when unset.
14+
func shapePageRequest(req *query.PageRequest) *query.PageRequest {
15+
res := newDefaultPageRequest()
16+
17+
if req == nil {
18+
return res
19+
}
20+
21+
res.Key = req.Key
22+
res.Reverse = req.Reverse
23+
if req.Limit > 0 && req.Limit <= paginationMaxLimit {
24+
res.Limit = req.Limit
25+
}
26+
27+
return res
28+
}
29+
30+
// newDefaultPageRequest returns a default PageRequest.
31+
func newDefaultPageRequest() *query.PageRequest {
32+
return &query.PageRequest{
33+
Key: nil,
34+
Offset: 0,
35+
Limit: paginationDefaultLimit,
36+
CountTotal: false,
37+
Reverse: false,
38+
}
39+
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package keeper
2+
3+
import (
4+
"github.com/cosmos/cosmos-sdk/types/query"
5+
"github.com/stretchr/testify/require"
6+
"testing"
7+
)
8+
9+
var ShapePageRequest = shapePageRequest
10+
11+
func TestShapePageRequest(t *testing.T) {
12+
defaultRequest := newDefaultPageRequest()
13+
14+
res1 := ShapePageRequest(nil)
15+
require.NotNil(t, res1)
16+
require.Equal(t, res1.Limit, defaultRequest.Limit) // limit == paginationDefaultLimit
17+
require.Equal(t, res1.Offset, defaultRequest.Offset) // offset == 0
18+
require.Equal(t, res1.CountTotal, defaultRequest.CountTotal) // count_total == false
19+
20+
request := &query.PageRequest{
21+
Key: nil,
22+
Offset: 100,
23+
Limit: 10000,
24+
CountTotal: true,
25+
Reverse: true,
26+
}
27+
28+
res2 := ShapePageRequest(request)
29+
require.NotNil(t, res2)
30+
require.Equal(t, res2.Limit, defaultRequest.Limit) // limit == paginationDefaultLimit
31+
require.Equal(t, res2.Offset, defaultRequest.Offset) // offset == 0
32+
require.Equal(t, res2.CountTotal, defaultRequest.CountTotal) // count_total == false
33+
}

0 commit comments

Comments
 (0)