@@ -25,42 +25,54 @@ pub async fn processor(ctx: Arc<Context>) -> Result<(), JobError> {
2525 loop {
2626 let jobs = JobStore :: list (
2727 & ctx. db . storage ,
28- JobFilter :: default ( ) . processed ( Some ( false ) ) ,
28+ JobFilter :: default ( ) . processed ( Some ( false ) ) . started ( Some ( false ) ) ,
2929 & pagination,
3030 )
3131 . await ?;
3232
3333 for job in jobs {
3434 let ctx = ctx. clone ( ) ;
3535 tokio:: spawn ( async move {
36- let location = GitHubRfdLocation {
37- owner : job. owner . clone ( ) ,
38- repo : job. repository . clone ( ) ,
39- branch : job. branch . clone ( ) ,
40- commit : job. sha . clone ( ) ,
41- default_branch : ctx. github . repository . default_branch . clone ( ) ,
42- } ;
36+ // Make the job as started
37+ match JobStore :: start ( & ctx. db . storage , job. id ) . await {
38+ Ok ( Some ( job) ) => {
4339
44- let update = GitHubRfdUpdate {
45- location,
46- number : job. rfd . into ( ) ,
47- committed_at : job. committed_at ,
48- } ;
40+ let location = GitHubRfdLocation {
41+ owner : job. owner . clone ( ) ,
42+ repo : job. repository . clone ( ) ,
43+ branch : job. branch . clone ( ) ,
44+ commit : job. sha . clone ( ) ,
45+ default_branch : ctx. github . repository . default_branch . clone ( ) ,
46+ } ;
4947
50- let updater = RfdUpdater :: new ( & ctx. actions , ctx. processor . update_mode ) ;
48+ let update = GitHubRfdUpdate {
49+ location,
50+ number : job. rfd . into ( ) ,
51+ committed_at : job. committed_at ,
52+ } ;
5153
52- match updater. handle ( & ctx, & [ update] ) . await {
53- Ok ( _) => {
54- let _ = JobStore :: complete ( & ctx. db . storage , job. id )
55- . await
56- . tap_err ( |err| {
57- tracing:: error!( ?err, "Failed to mark job as completed" )
58- } ) ;
54+ let updater = RfdUpdater :: new ( & ctx. actions , ctx. processor . update_mode ) ;
55+
56+ match updater. handle ( & ctx, & [ update] ) . await {
57+ Ok ( _) => {
58+ let _ = JobStore :: complete ( & ctx. db . storage , job. id )
59+ . await
60+ . tap_err ( |err| {
61+ tracing:: error!( ?err, "Failed to mark job as completed" )
62+ } ) ;
63+ }
64+ Err ( err) => {
65+ tracing:: error!( ?err, "RFD update failed" ) ;
66+
67+ // TODO: Mark job as failed or retry?
68+ }
69+ }
70+ }
71+ Ok ( None ) => {
72+ tracing:: error!( ?job, "Job that was scheduled to run has gone missing! Was it started by a different task?" ) ;
5973 }
6074 Err ( err) => {
61- tracing:: error!( ?err, "RFD update failed" ) ;
62-
63- // TODO: Mark job as failed or retry?
75+ tracing:: warn!( ?job, ?err, "Failed to start job. Was it previously started?" ) ;
6476 }
6577 }
6678
0 commit comments