relay/src/jobs/mod.rs

67 lines
1.5 KiB
Rust
Raw Normal View History

mod deliver;
mod deliver_many;
2020-03-22 21:18:36 +00:00
mod storage;
pub use self::{deliver::Deliver, deliver_many::DeliverMany};
use crate::{
2020-03-22 21:18:36 +00:00
db::Db,
error::MyError,
2020-03-22 21:18:36 +00:00
jobs::{deliver::DeliverProcessor, deliver_many::DeliverManyProcessor, storage::Storage},
requests::Requests,
state::State,
};
2020-03-22 21:18:36 +00:00
use background_jobs::{Job, QueueHandle, WorkerConfig};
2020-03-22 21:18:36 +00:00
pub fn create_server(db: Db) -> JobServer {
JobServer::new(background_jobs::create_server(Storage::new(db)))
}
pub fn create_workers(state: State, job_server: JobServer) {
let queue_handle = job_server.queue_handle();
WorkerConfig::new(move || JobState::new(state.requests(), job_server.clone()))
.register(DeliverProcessor)
.register(DeliverManyProcessor)
.set_processor_count("default", 4)
.start(queue_handle);
}
#[derive(Clone)]
pub struct JobState {
requests: Requests,
job_server: JobServer,
}
#[derive(Clone)]
pub struct JobServer {
inner: QueueHandle,
}
impl JobState {
fn new(requests: Requests, job_server: JobServer) -> Self {
JobState {
requests,
job_server,
}
}
}
impl JobServer {
fn new(queue_handle: QueueHandle) -> Self {
JobServer {
inner: queue_handle,
}
}
pub fn queue_handle(&self) -> QueueHandle {
self.inner.clone()
}
pub fn queue<J>(&self, job: J) -> Result<(), MyError>
where
J: Job,
{
self.inner.queue(job).map_err(MyError::Queue)
}
}