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]
};
let job = context
let job = loop {
let job_res = context
.sql
.query_row_optional(query, params, |row| {
.query_row_optional(query, params.clone(), |row| {
let job = Job {
job_id: row.get(0)?,
action: row.get(1)?,
@@ -1112,8 +1113,34 @@ LIMIT 1;
})
.await;
match job {
Ok(job) => {
dbg!(&job_res);
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 let Some(job) = job {
if job.action < Action::DeleteMsgOnImap {
@@ -1131,12 +1158,6 @@ LIMIT 1;
job
}
}
Err(err) => {
warn!(context, "Bad job from the database: {}", err);
None
}
}
}
#[cfg(test)]
mod tests {