diff --git a/pkg/solver/controller.go b/pkg/solver/controller.go index 3a8b2cd3..3eb2b1fa 100644 --- a/pkg/solver/controller.go +++ b/pkg/solver/controller.go @@ -320,7 +320,7 @@ func (controller *SolverController) solve(ctx context.Context) error { span.RecordError(err) return err } - jobOffers, err := controller.store.GetJobOffers(store.GetJobOffersQuery{Cancelled: true}) + jobOffers, err := controller.store.GetJobOffers(store.GetJobOffersQuery{Cancelled: system.BoolPointer(true)}) if err != nil { span.SetStatus(codes.Error, "get cancelled job offers failed") span.RecordError(err) diff --git a/pkg/solver/matcher/matcher.go b/pkg/solver/matcher/matcher.go index 7c92a823..27191592 100644 --- a/pkg/solver/matcher/matcher.go +++ b/pkg/solver/matcher/matcher.go @@ -52,6 +52,7 @@ func GetMatchingDeals( span.AddEvent("db.get_job_offers.start") jobOffers, err := db.GetJobOffers(store.GetJobOffersQuery{ NotMatched: true, + Cancelled: system.BoolPointer(false), OrderOldestFirst: true, }) if err != nil { diff --git a/pkg/solver/server.go b/pkg/solver/server.go index 67adeb21..dccaed3d 100644 --- a/pkg/solver/server.go +++ b/pkg/solver/server.go @@ -10,6 +10,7 @@ import ( "os" "path/filepath" "slices" + "strconv" "strings" "time" @@ -242,9 +243,14 @@ func (solverServer *solverServer) getJobOffers(res corehttp.ResponseWriter, req if notMatched := req.URL.Query().Get("not_matched"); notMatched == "true" { query.NotMatched = true } - if includeCancelled := req.URL.Query().Get("include_cancelled"); includeCancelled == "true" { - query.IncludeCancelled = true + if cancelled := req.URL.Query().Get("cancelled"); cancelled != "" { + if val, err := strconv.ParseBool(cancelled); err == nil { + query.Cancelled = &val + } else { + return nil, fmt.Errorf("invalid cancelled filter value: %s", cancelled) + } } + return solverServer.store.GetJobOffers(query) } diff --git a/pkg/solver/store/db/db.go b/pkg/solver/store/db/db.go index b40f8119..c47b0de0 100644 --- a/pkg/solver/store/db/db.go +++ b/pkg/solver/store/db/db.go @@ -166,16 +166,18 @@ func (store *SolverStoreDatabase) GetJobOffers(query store.GetJobOffersQuery) ([ data.GetAgreementStateIndex("ResultsSubmitted"), }) } - if query.Cancelled { - q = q.Where("state IN (?)", []uint8{ - data.GetAgreementStateIndex("JobOfferCancelled"), - data.GetAgreementStateIndex("JobTimedOut"), - }) - } else if !query.IncludeCancelled { - q = q.Where("state NOT IN (?)", []uint8{ - data.GetAgreementStateIndex("JobOfferCancelled"), - data.GetAgreementStateIndex("JobTimedOut"), - }) + if query.Cancelled != nil { + if *query.Cancelled { + q = q.Where("state IN (?)", []uint8{ + data.GetAgreementStateIndex("JobOfferCancelled"), + data.GetAgreementStateIndex("JobTimedOut"), + }) + } else { + q = q.Where("state NOT IN (?)", []uint8{ + data.GetAgreementStateIndex("JobOfferCancelled"), + data.GetAgreementStateIndex("JobTimedOut"), + }) + } } if query.OrderOldestFirst { q = q.Order("created_at ASC") diff --git a/pkg/solver/store/memory/store.go b/pkg/solver/store/memory/store.go index 31bf317f..03be2ffc 100644 --- a/pkg/solver/store/memory/store.go +++ b/pkg/solver/store/memory/store.go @@ -111,15 +111,18 @@ func (s *SolverStoreMemory) GetJobOffers(query store.GetJobOffersQuery) ([]data. jobOffer.State != data.GetAgreementStateIndex("ResultsSubmitted") { matching = false } - if query.Cancelled { - if jobOffer.State != data.GetAgreementStateIndex("JobOfferCancelled") && - jobOffer.State != data.GetAgreementStateIndex("JobTimedOut") { - matching = false - } - } else if !query.IncludeCancelled { - if jobOffer.State == data.GetAgreementStateIndex("JobOfferCancelled") || - jobOffer.State == data.GetAgreementStateIndex("JobTimedOut") { - matching = false + if query.Cancelled != nil { + isCancelled := jobOffer.State == data.GetAgreementStateIndex("JobOfferCancelled") || + jobOffer.State == data.GetAgreementStateIndex("JobTimedOut") + + if *query.Cancelled { + if !isCancelled { + matching = false + } + } else { + if isCancelled { + matching = false + } } } if matching { diff --git a/pkg/solver/store/store.go b/pkg/solver/store/store.go index 4156a6a9..64186a97 100644 --- a/pkg/solver/store/store.go +++ b/pkg/solver/store/store.go @@ -24,11 +24,9 @@ type GetJobOffersQuery struct { // This includes the DealNegotiating, DealAgreed, or ResultsSubmitted states. Active bool `json:"in_progress"` - // Cancelled job offers are in a JobOfferCancelled or JobTimedOut state - Cancelled bool `json:"cancelled"` - - // this will include cancelled job offers in the results - IncludeCancelled bool `json:"include_cancelled"` + // Cancelled job offers are in a JobOfferCancelled or JobTimedOut state. + // All job offers are included when Cancelled is nil. + Cancelled *bool `json:"cancelled"` // Sort job offers oldest first OrderOldestFirst bool `json:"order_oldest_first"` diff --git a/pkg/solver/store/store_test.go b/pkg/solver/store/store_test.go index 334e56ea..f6bcd27d 100644 --- a/pkg/solver/store/store_test.go +++ b/pkg/solver/store/store_test.go @@ -14,6 +14,7 @@ import ( "github.com/lilypad-tech/lilypad/pkg/solver" "github.com/lilypad-tech/lilypad/pkg/solver/store" solverstore "github.com/lilypad-tech/lilypad/pkg/solver/store" + "github.com/lilypad-tech/lilypad/pkg/system" "golang.org/x/exp/rand" ) @@ -159,7 +160,7 @@ func TestJobOfferQuery(t *testing.T) { }, }, query: store.GetJobOffersQuery{ - IncludeCancelled: false, + Cancelled: system.BoolPointer(false), }, expected: []string{"QmY8JwJh3bYDUuAnwfpxwStjUY1nQwyhJJ4SPpdV3bZ9Kx"}, }, @@ -258,7 +259,7 @@ func TestJobOfferQuery(t *testing.T) { }, }, query: store.GetJobOffersQuery{ - IncludeCancelled: true, + Cancelled: nil, }, expected: []string{ "QmY8JwJh3bYDUuAnwfpxwStjUY1nQwyhJJ4SPpdV3bZ9Kx", @@ -289,7 +290,7 @@ func TestJobOfferQuery(t *testing.T) { }, }, query: store.GetJobOffersQuery{ - Cancelled: true, + Cancelled: system.BoolPointer(true), }, expected: []string{ "QmX9JwJh3bYDUuAnwfpxwStjUY1nQwyhJJ4SPpdV3bZ9Ky", @@ -325,9 +326,9 @@ func TestJobOfferQuery(t *testing.T) { }, }, query: store.GetJobOffersQuery{ - JobCreator: "0x1234567890123456789012345678901234567890", - NotMatched: true, - IncludeCancelled: false, + JobCreator: "0x1234567890123456789012345678901234567890", + NotMatched: true, + Cancelled: system.BoolPointer(false), }, expected: []string{"QmY8JwJh3bYDUuAnwfpxwStjUY1nQwyhJJ4SPpdV3bZ9Kx"}, }, diff --git a/pkg/solver/testing.go b/pkg/solver/testing.go index acf1b983..3ab1cf5b 100644 --- a/pkg/solver/testing.go +++ b/pkg/solver/testing.go @@ -59,9 +59,7 @@ func SetupTestStores(t *testing.T) []TestStoreConfig { func clearStoreDatabase(t *testing.T, s store.SolverStore) { // Delete job offers - jobOffers, err := s.GetJobOffers(store.GetJobOffersQuery{ - IncludeCancelled: true, - }) + jobOffers, err := s.GetJobOffers(store.GetJobOffersQuery{}) if err != nil { t.Fatalf("Failed to get existing job offers: %v", err) }