mod run;
use super::Worker;
use crate::builder::WorkerOptions;
use graphile_worker_database::Schema;
use graphile_worker_utils::WorkerUtils;
impl Worker {
pub fn options() -> WorkerOptions {
WorkerOptions::default()
}
#[cfg(feature = "driver-sqlx")]
pub fn try_pg_pool(&self) -> Option<&sqlx::PgPool> {
self.database
.downcast_ref::<graphile_worker_database::sqlx::SqlxDatabase>()
.map(|database| database.pool())
}
#[cfg(feature = "driver-sqlx")]
pub fn pg_pool(&self) -> &sqlx::PgPool {
self.try_pg_pool()
.expect("Worker does not use the SQLx database driver")
}
pub fn schema(&self) -> &Schema {
&self.schema
}
pub(crate) fn clone_for_recovery(&self) -> Self {
Self {
worker_id: self.worker_id.clone(),
concurrency: self.concurrency,
poll_interval: self.poll_interval,
use_notification_delivery: self.use_notification_delivery,
jobs: self.jobs.clone(),
database: self.database.clone(),
schema: self.schema.clone(),
task_details: self.task_details.clone(),
forbidden_flags: self.forbidden_flags.clone(),
crontabs: self.crontabs.clone(),
use_local_time: self.use_local_time,
shutdown_signal: self.shutdown_signal.clone(),
shutdown_notifier: self.shutdown_notifier.clone(),
extensions: self.extensions.clone(),
hooks: self.hooks.clone(),
local_queue_config: self.local_queue_config.clone(),
completion_batcher: self.completion_batcher.clone(),
failure_batcher: self.failure_batcher.clone(),
recovery_config: self.recovery_config.clone(),
shutdown_config: self.shutdown_config.clone(),
}
}
pub fn create_utils(&self) -> WorkerUtils {
let utils = WorkerUtils::new(self.database.clone(), self.schema.clone())
.with_task_details(self.task_details.clone());
if self.hooks.is_empty() {
utils
} else {
utils.with_hooks(self.hooks.clone())
}
}
pub fn request_shutdown(&self) {
self.shutdown_notifier.notify_one();
}
}
impl Drop for Worker {
fn drop(&mut self) {
self.shutdown_notifier.notify_one();
}
}