Skip to content

Commit

Permalink
feat: Combine cancelled filter queries
Browse files Browse the repository at this point in the history
The cancelled filter query now includes the include cancelled, which was
our mechanism for requesting all job offers. The cancelled filter query
includes all when nil, or cancelled or not when true or false.
  • Loading branch information
bgins committed Feb 17, 2025
1 parent 46de5f8 commit e226757
Show file tree
Hide file tree
Showing 8 changed files with 45 additions and 36 deletions.
2 changes: 1 addition & 1 deletion pkg/solver/controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
1 change: 1 addition & 0 deletions pkg/solver/matcher/matcher.go
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down
10 changes: 8 additions & 2 deletions pkg/solver/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import (
"os"
"path/filepath"
"slices"
"strconv"
"strings"
"time"

Expand Down Expand Up @@ -245,9 +246,14 @@ func (solverServer *solverServer) getJobOffers(res corehttp.ResponseWriter, req
if active := req.URL.Query().Get("active"); active == "true" {
query.Active = 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)
}

Expand Down
22 changes: 12 additions & 10 deletions pkg/solver/store/db/db.go
Original file line number Diff line number Diff line change
Expand Up @@ -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")
Expand Down
21 changes: 12 additions & 9 deletions pkg/solver/store/memory/store.go
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down
8 changes: 3 additions & 5 deletions pkg/solver/store/store.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"`
Expand Down
13 changes: 7 additions & 6 deletions pkg/solver/store/store_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"
)

Expand Down Expand Up @@ -159,7 +160,7 @@ func TestJobOfferQuery(t *testing.T) {
},
},
query: store.GetJobOffersQuery{
IncludeCancelled: false,
Cancelled: system.BoolPointer(false),
},
expected: []string{"QmY8JwJh3bYDUuAnwfpxwStjUY1nQwyhJJ4SPpdV3bZ9Kx"},
},
Expand Down Expand Up @@ -258,7 +259,7 @@ func TestJobOfferQuery(t *testing.T) {
},
},
query: store.GetJobOffersQuery{
IncludeCancelled: true,
Cancelled: nil,
},
expected: []string{
"QmY8JwJh3bYDUuAnwfpxwStjUY1nQwyhJJ4SPpdV3bZ9Kx",
Expand Down Expand Up @@ -289,7 +290,7 @@ func TestJobOfferQuery(t *testing.T) {
},
},
query: store.GetJobOffersQuery{
Cancelled: true,
Cancelled: system.BoolPointer(true),
},
expected: []string{
"QmX9JwJh3bYDUuAnwfpxwStjUY1nQwyhJJ4SPpdV3bZ9Ky",
Expand Down Expand Up @@ -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"},
},
Expand Down
4 changes: 1 addition & 3 deletions pkg/solver/testing.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)
}
Expand Down

0 comments on commit e226757

Please sign in to comment.