Update runner to use engine factory pattern with Rhai packages
- Reverted from generic Package approach to factory function pattern - Factory creates Engine::new_raw() + registers package (efficient) - AsyncRunner and SyncRunner use engine_factory: Arc<dyn Fn() -> Engine> - Each job gets a fresh engine instance (cheap with factory pattern) - Package is created once inside factory, engines reuse it
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
use crate::job::Job;
|
||||
use log::{debug, error, info};
|
||||
use rhai::Engine;
|
||||
use rhai::{Engine, packages::Package};
|
||||
use std::collections::HashMap;
|
||||
use std::sync::Arc;
|
||||
use std::time::Duration;
|
||||
@@ -167,7 +167,7 @@ impl Runner for AsyncRunner {
|
||||
|
||||
// Spawn the job execution task
|
||||
let job_handle = tokio::spawn(async move {
|
||||
// Create a new engine instance for this job
|
||||
// Create a new engine instance (cheap with factory pattern)
|
||||
let mut engine = engine_factory();
|
||||
let mut db_config = rhai::Map::new();
|
||||
db_config.insert("DB_PATH".into(), db_path_clone.into());
|
||||
@@ -252,7 +252,7 @@ pub fn spawn_async_runner<F>(
|
||||
engine_factory: F,
|
||||
) -> JoinHandle<Result<(), Box<dyn std::error::Error + Send + Sync>>>
|
||||
where
|
||||
F: Fn() -> Engine + Send + Sync + 'static,
|
||||
F: Fn() -> Engine + Send + Sync + 'static,
|
||||
{
|
||||
use std::sync::Arc;
|
||||
|
||||
|
||||
@@ -15,7 +15,7 @@ pub async fn execute_script_mode<F>(
|
||||
redis_url: String,
|
||||
job_timeout: Duration,
|
||||
engine_factory: F,
|
||||
) -> Result<String, Box<dyn std::error::Error + Send + Sync>>
|
||||
) -> Result<String, Box<dyn std::error::Error + Send + Sync>>
|
||||
where
|
||||
F: Fn() -> rhai::Engine + Send + Sync + 'static,
|
||||
{
|
||||
|
||||
@@ -1,9 +1,8 @@
|
||||
use crate::job::Job;
|
||||
use log::{debug, error, info};
|
||||
use rhai::{Dynamic, Engine};
|
||||
use std::sync::Arc;
|
||||
|
||||
use crate::runner_trait::Runner;
|
||||
use log::{debug, error, info};
|
||||
use rhai::{Engine, Dynamic};
|
||||
use std::sync::Arc;
|
||||
|
||||
/// Configuration for sync runner instances
|
||||
#[derive(Debug, Clone)]
|
||||
@@ -73,7 +72,7 @@ impl Runner for SyncRunner {
|
||||
debug!("Sync Runner '{}', Job {}: Processing started.", runner_id, job_id);
|
||||
info!("Sync Runner '{}' processing job_id: {}. Script: {:.50}...", job.context_id, job_id, job.payload);
|
||||
|
||||
// Create a new engine instance for this job execution
|
||||
// Create a new engine instance (cheap with factory pattern)
|
||||
let mut engine = (self.engine_factory)();
|
||||
|
||||
// Execute the script
|
||||
|
||||
Reference in New Issue
Block a user