Skip to content

Commit 8ea8742

Browse files
BE-723 | Introduce context param for CandidateRouteSearcher (#642)
1 parent decda24 commit 8ea8742

File tree

8 files changed

+32
-20
lines changed

8 files changed

+32
-20
lines changed

domain/candidate_routes.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package domain
22

33
import (
4+
"context"
5+
46
"github.com/osmosis-labs/sqs/domain/osmomath"
57
ingesttypes "github.com/osmosis-labs/sqs/ingest/types"
68

@@ -71,12 +73,12 @@ type CandidateRouteSearcher interface {
7173
// FindCandidateRoutesOutGivenIn finds candidate routes for a given tokenIn and tokenOutDenom
7274
// using the given options.
7375
// Returns the candidate routes and an error if any.
74-
FindCandidateRoutesOutGivenIn(tokenIn sdk.Coin, tokenOutDenom string, options CandidateRouteSearchOptions) (ingesttypes.CandidateRoutes, error)
76+
FindCandidateRoutesOutGivenIn(ctx context.Context, tokenIn sdk.Coin, tokenOutDenom string, options CandidateRouteSearchOptions) (ingesttypes.CandidateRoutes, error)
7577

7678
// FindCandidateRoutesInGivenOut finds candidate routes for a given tokenOut and tokenInDenom
7779
// using the given options.
7880
// Returns the candidate routes and an error if any.
79-
FindCandidateRoutesInGivenOut(tokenOut sdk.Coin, tokenInDenom string, options CandidateRouteSearchOptions) (ingesttypes.CandidateRoutes, error)
81+
FindCandidateRoutesInGivenOut(ctx context.Context, tokenOut sdk.Coin, tokenInDenom string, options CandidateRouteSearchOptions) (ingesttypes.CandidateRoutes, error)
8082
}
8183

8284
// CandidateRouteDenomData represents data structure that contains pool data

domain/mocks/candidate_route_finder_mock.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package mocks
22

33
import (
4+
"context"
5+
46
"github.com/cosmos/cosmos-sdk/types"
57
"github.com/osmosis-labs/sqs/domain"
68
ingesttypes "github.com/osmosis-labs/sqs/ingest/types"
@@ -14,11 +16,11 @@ type CandidateRouteFinderMock struct {
1416
var _ domain.CandidateRouteSearcher = CandidateRouteFinderMock{}
1517

1618
// FindCandidateRoutesOutGivenIn implements domain.CandidateRouteSearcher.
17-
func (c CandidateRouteFinderMock) FindCandidateRoutesOutGivenIn(tokenIn types.Coin, tokenOutDenom string, options domain.CandidateRouteSearchOptions) (ingesttypes.CandidateRoutes, error) {
19+
func (c CandidateRouteFinderMock) FindCandidateRoutesOutGivenIn(ctx context.Context, tokenIn types.Coin, tokenOutDenom string, options domain.CandidateRouteSearchOptions) (ingesttypes.CandidateRoutes, error) {
1820
return c.Routes, c.Error
1921
}
2022

2123
// FindCandidateRoutesInGivenOut implements domain.CandidateRouteSearcher.
22-
func (c CandidateRouteFinderMock) FindCandidateRoutesInGivenOut(tokenOut types.Coin, tokenInDenom string, options domain.CandidateRouteSearchOptions) (ingesttypes.CandidateRoutes, error) {
24+
func (c CandidateRouteFinderMock) FindCandidateRoutesInGivenOut(ctx context.Context, tokenOut types.Coin, tokenInDenom string, options domain.CandidateRouteSearchOptions) (ingesttypes.CandidateRoutes, error) {
2325
return c.Routes, c.Error
2426
}

router/usecase/candidate_routes.go

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package usecase
22

33
import (
4+
"context"
5+
46
sdk "github.com/cosmos/cosmos-sdk/types"
57
"github.com/osmosis-labs/sqs/domain"
68
"github.com/osmosis-labs/sqs/domain/mvc"
@@ -37,7 +39,7 @@ func NewCandidateRouteFinder(candidateRouteDataHolder mvc.CandidateRouteSearchDa
3739
}
3840

3941
// FindCandidateRoutesOutGivenIn implements domain.CandidateRouteFinder.
40-
func (c candidateRouteFinder) FindCandidateRoutesOutGivenIn(tokenIn sdk.Coin, tokenOutDenom string, options domain.CandidateRouteSearchOptions) (ingesttypes.CandidateRoutes, error) {
42+
func (c candidateRouteFinder) FindCandidateRoutesOutGivenIn(ctx context.Context, tokenIn sdk.Coin, tokenOutDenom string, options domain.CandidateRouteSearchOptions) (ingesttypes.CandidateRoutes, error) {
4143
routes := make([]candidateRouteWrapper, 0, options.MaxRoutes)
4244

4345
// Preallocate constant visited map size to avoid reallocations.
@@ -226,10 +228,10 @@ func (c candidateRouteFinder) FindCandidateRoutesOutGivenIn(tokenIn sdk.Coin, to
226228
}
227229

228230
// FindCandidateRoutesOutGivenIn implements domain.CandidateRouteFinder.
229-
func (c candidateRouteFinder) FindCandidateRoutesInGivenOut(tokenOut sdk.Coin, tokenInDenom string, options domain.CandidateRouteSearchOptions) (ingesttypes.CandidateRoutes, error) {
231+
func (c candidateRouteFinder) FindCandidateRoutesInGivenOut(ctx context.Context, tokenOut sdk.Coin, tokenInDenom string, options domain.CandidateRouteSearchOptions) (ingesttypes.CandidateRoutes, error) {
230232
// Fetching the candidate routes as for the exact amount of token in swap method
231233
// That will be the same as the exact amount out swap method with inverted token denominations
232-
routes, err := c.FindCandidateRoutesOutGivenIn(tokenOut, tokenInDenom, options)
234+
routes, err := c.FindCandidateRoutesOutGivenIn(ctx, tokenOut, tokenInDenom, options)
233235
if err != nil {
234236
return ingesttypes.CandidateRoutes{}, err
235237
}

router/usecase/candidate_routes_bench_test.go

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package usecase_test
22

33
import (
4+
"context"
45
"testing"
56

67
sdk "github.com/cosmos/cosmos-sdk/types"
@@ -35,10 +36,12 @@ func BenchmarkCandidateRouteSearcherFindCandidateRoutesOutGivenIn(b *testing.B)
3536

3637
b.ResetTimer()
3738

39+
ctx := context.Background()
40+
3841
// Run the benchmark
3942
for i := 0; i < b.N; i++ {
4043
// System under test
41-
_, err := usecase.CandidateRouteSearcher.FindCandidateRoutesOutGivenIn(tokenIn, tokenOutDenom, candidateRouteOptions)
44+
_, err := usecase.CandidateRouteSearcher.FindCandidateRoutesOutGivenIn(ctx, tokenIn, tokenOutDenom, candidateRouteOptions)
4245
s.Require().NoError(err)
4346
if err != nil {
4447
b.Errorf("FindCandidateRoutes returned an error: %v", err)
@@ -72,10 +75,12 @@ func BenchmarkCandidateRouteSearcherFindCandidateRoutesInGivenOut(b *testing.B)
7275

7376
b.ResetTimer()
7477

78+
ctx := context.Background()
79+
7580
// Run the benchmark
7681
for i := 0; i < b.N; i++ {
7782
// System under test
78-
_, err := usecase.CandidateRouteSearcher.FindCandidateRoutesInGivenOut(tokenIn, tokenOutDenom, candidateRouteOptions)
83+
_, err := usecase.CandidateRouteSearcher.FindCandidateRoutesInGivenOut(ctx, tokenIn, tokenOutDenom, candidateRouteOptions)
7984
s.Require().NoError(err)
8085
if err != nil {
8186
b.Errorf("FindCandidateRoutes returned an error: %v", err)

router/usecase/candidate_routes_test.go

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package usecase_test
22

33
import (
4+
"context"
45
"slices"
56
"testing"
67

@@ -167,7 +168,7 @@ func (s *RouterTestSuite) TestCandidateRouteSearcherOutGivenIn_HappyPath() {
167168
expectedMinPoolLiquidityCapInt := osmomath.NewInt(int64(routerConfig.MinPoolLiquidityCap))
168169

169170
// System under test
170-
candidateRoutes, err := usecase.CandidateRouteSearcher.FindCandidateRoutesOutGivenIn(tc.tokenIn, tc.tokenOutDenom, candidateRouteOptions)
171+
candidateRoutes, err := usecase.CandidateRouteSearcher.FindCandidateRoutesOutGivenIn(context.Background(), tc.tokenIn, tc.tokenOutDenom, candidateRouteOptions)
171172
s.Require().NoError(err)
172173

173174
// Validate that number of routes found is equal to the expected number of routes.
@@ -370,7 +371,7 @@ func (s *RouterTestSuite) TestCandidateRouteSearcherInGivenOut_HappyPath() {
370371
expectedMinPoolLiquidityCapInt := osmomath.NewInt(int64(routerConfig.MinPoolLiquidityCap))
371372

372373
// System under test
373-
candidateRoutes, err := usecase.CandidateRouteSearcher.FindCandidateRoutesInGivenOut(tc.tokenOut, tc.tokenInDenom, candidateRouteOptions)
374+
candidateRoutes, err := usecase.CandidateRouteSearcher.FindCandidateRoutesInGivenOut(context.Background(), tc.tokenOut, tc.tokenInDenom, candidateRouteOptions)
374375
s.Require().NoError(err)
375376

376377
// Validate that number of routes found is equal to the expected number of routes.
@@ -445,7 +446,7 @@ func (s *RouterTestSuite) TestCandidateRouteSearcherOutGivenIn_SkipPoolOption()
445446
const expectedPoolID = uint64(1)
446447

447448
// System under test #1
448-
candidateRoutes, err := usecase.CandidateRouteSearcher.FindCandidateRoutesOutGivenIn(oneOSMOIn, ATOM, candidateRouteOptions)
449+
candidateRoutes, err := usecase.CandidateRouteSearcher.FindCandidateRoutesOutGivenIn(context.Background(), oneOSMOIn, ATOM, candidateRouteOptions)
449450
s.Require().NoError(err)
450451

451452
// Contains default pool ID
@@ -465,7 +466,7 @@ func (s *RouterTestSuite) TestCandidateRouteSearcherOutGivenIn_SkipPoolOption()
465466
}
466467

467468
// System under test #2
468-
candidateRoutes, err = usecase.CandidateRouteSearcher.FindCandidateRoutesOutGivenIn(oneOSMOIn, ATOM, candidateRouteOptions)
469+
candidateRoutes, err = usecase.CandidateRouteSearcher.FindCandidateRoutesOutGivenIn(context.Background(), oneOSMOIn, ATOM, candidateRouteOptions)
469470
s.Require().NoError(err)
470471

471472
didFindExpectedPoolID = foundExpectedPoolID(expectedPoolID, candidateRoutes.Routes)
@@ -492,7 +493,7 @@ func (s *RouterTestSuite) TestCandidateRouteSearcherInGivenOut_SkipPoolOption()
492493
const expectedPoolID = uint64(1)
493494

494495
// System under test #1
495-
candidateRoutes, err := usecase.CandidateRouteSearcher.FindCandidateRoutesInGivenOut(oneOSMOIn, ATOM, candidateRouteOptions)
496+
candidateRoutes, err := usecase.CandidateRouteSearcher.FindCandidateRoutesInGivenOut(context.Background(), oneOSMOIn, ATOM, candidateRouteOptions)
496497
s.Require().NoError(err)
497498

498499
// Contains default pool ID
@@ -512,7 +513,7 @@ func (s *RouterTestSuite) TestCandidateRouteSearcherInGivenOut_SkipPoolOption()
512513
}
513514

514515
// System under test #2
515-
candidateRoutes, err = usecase.CandidateRouteSearcher.FindCandidateRoutesInGivenOut(oneOSMOIn, ATOM, candidateRouteOptions)
516+
candidateRoutes, err = usecase.CandidateRouteSearcher.FindCandidateRoutesInGivenOut(context.Background(), oneOSMOIn, ATOM, candidateRouteOptions)
516517
s.Require().NoError(err)
517518

518519
didFindExpectedPoolID = foundExpectedPoolID(expectedPoolID, candidateRoutes.Routes)

router/usecase/dynamic_splits_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ func (s *RouterTestSuite) setupSplitsMainnetTestCase(displayDenomIn string, amou
5555
MinPoolLiquidityCap: config.MinPoolLiquidityCap,
5656
}
5757
// Get candidate routes
58-
candidateRoutes, err := useCases.CandidateRouteSearcher.FindCandidateRoutesOutGivenIn(tokenIn, chainDenomOut, options)
58+
candidateRoutes, err := useCases.CandidateRouteSearcher.FindCandidateRoutesOutGivenIn(context.Background(), tokenIn, chainDenomOut, options)
5959
s.Require().NoError(err)
6060

6161
// TODO: consider moving to interface.

router/usecase/router_usecase.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -245,7 +245,7 @@ func (r *routerUseCaseImpl) GetSimpleQuote(ctx context.Context, tokenIn sdk.Coin
245245
MaxPoolsPerRoute: options.MaxPoolsPerRoute,
246246
MinPoolLiquidityCap: options.MinPoolLiquidityCap,
247247
}
248-
candidateRoutes, err := r.candidateRouteSearcher.FindCandidateRoutesOutGivenIn(tokenIn, tokenOutDenom, candidateRouteSearchOptions)
248+
candidateRoutes, err := r.candidateRouteSearcher.FindCandidateRoutesOutGivenIn(ctx, tokenIn, tokenOutDenom, candidateRouteSearchOptions)
249249
if err != nil {
250250
r.logger.Error("error getting candidate routes for pricing", zap.Error(err))
251251
return nil, err
@@ -686,7 +686,7 @@ func (r *routerUseCaseImpl) handleCandidateRoutes(ctx context.Context, tokenIn s
686686
r.logger.Debug("calculating routes")
687687

688688
start := time.Now()
689-
candidateRoutes, err = r.candidateRouteSearcher.FindCandidateRoutesOutGivenIn(tokenIn, tokenOutDenom, candidateRouteSearchOptions)
689+
candidateRoutes, err = r.candidateRouteSearcher.FindCandidateRoutesOutGivenIn(ctx, tokenIn, tokenOutDenom, candidateRouteSearchOptions)
690690
if err != nil {
691691
r.logger.Error("error getting candidate routes for pricing", zap.Error(err))
692692
return ingesttypes.CandidateRoutes{}, err

router/usecase/router_usecase_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -892,7 +892,7 @@ func (s *RouterTestSuite) TestGetCandidateRoutes_Chain_FindUnsupportedRoutes() {
892892
MaxPoolsPerRoute: config.Router.MaxPoolsPerRoute,
893893
}
894894

895-
routes, err := mainnetUsecase.CandidateRouteSearcher.FindCandidateRoutesOutGivenIn(sdk.NewCoin(chainDenom, one), USDC, options)
895+
routes, err := mainnetUsecase.CandidateRouteSearcher.FindCandidateRoutesOutGivenIn(context.Background(), sdk.NewCoin(chainDenom, one), USDC, options)
896896
if err != nil {
897897
fmt.Printf("Error for %s -- %s -- %v\n", chainDenom, tokenMeta.HumanDenom, err)
898898
errorCounter++
@@ -932,7 +932,7 @@ func (s *RouterTestSuite) TestGetCandidateRoutes_Chain_FindUnsupportedRoutes() {
932932
continue
933933
}
934934

935-
routes, err := mainnetUsecase.CandidateRouteSearcher.FindCandidateRoutesOutGivenIn(sdk.NewCoin(chainDenom, one), USDC, options)
935+
routes, err := mainnetUsecase.CandidateRouteSearcher.FindCandidateRoutesOutGivenIn(context.Background(), sdk.NewCoin(chainDenom, one), USDC, options)
936936
if err != nil {
937937
fmt.Printf("Error for %s -- %s -- %v\n", chainDenom, tokenMeta.HumanDenom, err)
938938
errorCounter++

0 commit comments

Comments
 (0)