fix and improve load_next job logic

This commit is contained in:
dignifiedquire
2020-05-21 14:48:55 +02:00
parent e8e82d9760
commit c89d7b5b18

View File

@@ -1094,9 +1094,10 @@ LIMIT 1;
paramsv![thread_i] paramsv![thread_i]
}; };
let job = context let job = loop {
let job_res = context
.sql .sql
.query_row_optional(query, params, |row| { .query_row_optional(query, params.clone(), |row| {
let job = Job { let job = Job {
job_id: row.get(0)?, job_id: row.get(0)?,
action: row.get(1)?, action: row.get(1)?,
@@ -1112,8 +1113,34 @@ LIMIT 1;
}) })
.await; .await;
match job { dbg!(&job_res);
Ok(job) => { match job_res {
Ok(job) => break job,
Err(_) => {
// Remove invalid job from the DB
// TODO: improve by only doing a single query
match context
.sql
.query_row(query, params.clone(), |row| row.get::<_, i32>(0))
.await
{
Ok(id) => {
context
.sql
.execute("DELETE FROM jobs WHERE id=?", paramsv![id])
.await
.ok();
}
Err(err) => {
error!(context, "failed to retrieve invalid job from DB: {}", err);
break None;
}
}
}
}
};
if thread == Thread::Imap { if thread == Thread::Imap {
if let Some(job) = job { if let Some(job) = job {
if job.action < Action::DeleteMsgOnImap { if job.action < Action::DeleteMsgOnImap {
@@ -1131,12 +1158,6 @@ LIMIT 1;
job job
} }
} }
Err(err) => {
warn!(context, "Bad job from the database: {}", err);
None
}
}
}
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {