@@ -18,8 +18,10 @@ type Storage interface {
18
18
GetWhitelist (jobID uint64 , workerID uint64 ) (* whitelist.Whitelist , error )
19
19
WorkerAlreadyAssigned (jobID uint64 , workerID uint64 ) (bool , error )
20
20
DeleteAssignment (workerID uint64 , jobID uint64 ) (bool , error )
21
+ DeleteAssignments (ids []uint64 ) error
21
22
UpdateAssignment (workerID uint64 , jobID uint64 , status string ) (bool , error )
22
23
CreateSettings (assignment.Settings ) (* assignment.Settings , error )
24
+ SelectExpiredAssignments () (assignment.Assignments , error )
23
25
}
24
26
25
27
type AssignmentStore struct {
@@ -33,10 +35,16 @@ func NewAssignmentStore(db *sqlx.DB) *AssignmentStore {
33
35
}
34
36
35
37
func (as * AssignmentStore ) GetAssignments (p assignment.Params ) (assignment.Assignments , error ) {
38
+ // If we're looking for expired assignments, then return them
39
+ if p .Status == assignment .Expired {
40
+ return as .SelectExpiredAssignments ()
41
+ }
42
+
36
43
assignments := assignment.Assignments {}
37
44
query := "SELECT * FROM assignments"
38
45
paramsQuery := []string {}
39
46
args := []interface {}{}
47
+
40
48
if p .WorkerID != "" {
41
49
args = append (args , p .WorkerID )
42
50
paramsQuery = append (paramsQuery , "worker_id=?" )
@@ -200,3 +208,34 @@ func (as *AssignmentStore) CreateSettings(s assignment.Settings) (*assignment.Se
200
208
201
209
return set , nil
202
210
}
211
+
212
+ func (as * AssignmentStore ) SelectExpiredAssignments () (assignment.Assignments , error ) {
213
+ assignments := assignment.Assignments {}
214
+ err := as .DB .Select (
215
+ & assignments ,
216
+ `SELECT * FROM assignments WHERE expires_at <= NOW()` ,
217
+ )
218
+ if err != nil {
219
+ return nil , err
220
+ }
221
+ return assignments , nil
222
+ }
223
+
224
+ func (as * AssignmentStore ) DeleteAssignments (ids []uint64 ) error {
225
+ query , args , _ := sqlx .In (`DELETE FROM assignments WHERE id IN (?)` , ids )
226
+ query = as .DB .Rebind (query )
227
+
228
+ res , err := as .DB .Exec (query , args ... )
229
+
230
+ if err != nil {
231
+ return err
232
+ }
233
+
234
+ numRows , _ := res .RowsAffected ()
235
+
236
+ if numRows != int64 (len (ids )) {
237
+ return RecordsMismatch {}
238
+ }
239
+
240
+ return nil
241
+ }
0 commit comments