mirror of
https://github.com/chatmail/core.git
synced 2026-05-20 23:36:30 +03:00
fix and improve load_next job logic
This commit is contained in:
41
src/job.rs
41
src/job.rs
@@ -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 {
|
||||||
|
|||||||
Reference in New Issue
Block a user