mirror of
https://github.com/chatmail/core.git
synced 2026-05-17 05:46:30 +03:00
fix and improve load_next job logic
This commit is contained in:
87
src/job.rs
87
src/job.rs
@@ -1094,47 +1094,68 @@ LIMIT 1;
|
|||||||
paramsv![thread_i]
|
paramsv![thread_i]
|
||||||
};
|
};
|
||||||
|
|
||||||
let job = context
|
let job = loop {
|
||||||
.sql
|
let job_res = context
|
||||||
.query_row_optional(query, params, |row| {
|
.sql
|
||||||
let job = Job {
|
.query_row_optional(query, params.clone(), |row| {
|
||||||
job_id: row.get(0)?,
|
let job = Job {
|
||||||
action: row.get(1)?,
|
job_id: row.get(0)?,
|
||||||
foreign_id: row.get(2)?,
|
action: row.get(1)?,
|
||||||
desired_timestamp: row.get(5)?,
|
foreign_id: row.get(2)?,
|
||||||
added_timestamp: row.get(4)?,
|
desired_timestamp: row.get(5)?,
|
||||||
tries: row.get(6)?,
|
added_timestamp: row.get(4)?,
|
||||||
param: row.get::<_, String>(3)?.parse().unwrap_or_default(),
|
tries: row.get(6)?,
|
||||||
pending_error: None,
|
param: row.get::<_, String>(3)?.parse().unwrap_or_default(),
|
||||||
};
|
pending_error: None,
|
||||||
|
};
|
||||||
|
|
||||||
Ok(job)
|
Ok(job)
|
||||||
})
|
})
|
||||||
.await;
|
.await;
|
||||||
|
|
||||||
match job {
|
dbg!(&job_res);
|
||||||
Ok(job) => {
|
match job_res {
|
||||||
if thread == Thread::Imap {
|
Ok(job) => break job,
|
||||||
if let Some(job) = job {
|
Err(_) => {
|
||||||
if job.action < Action::DeleteMsgOnImap {
|
// Remove invalid job from the DB
|
||||||
load_imap_deletion_job(context)
|
|
||||||
|
// 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
|
.await
|
||||||
.unwrap_or_default()
|
.ok();
|
||||||
.or(Some(job))
|
}
|
||||||
} else {
|
Err(err) => {
|
||||||
Some(job)
|
error!(context, "failed to retrieve invalid job from DB: {}", err);
|
||||||
|
break None;
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
load_imap_deletion_job(context).await.unwrap_or_default()
|
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
job
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Err(err) => {
|
};
|
||||||
warn!(context, "Bad job from the database: {}", err);
|
|
||||||
None
|
if thread == Thread::Imap {
|
||||||
|
if let Some(job) = job {
|
||||||
|
if job.action < Action::DeleteMsgOnImap {
|
||||||
|
load_imap_deletion_job(context)
|
||||||
|
.await
|
||||||
|
.unwrap_or_default()
|
||||||
|
.or(Some(job))
|
||||||
|
} else {
|
||||||
|
Some(job)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
load_imap_deletion_job(context).await.unwrap_or_default()
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
job
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user