perf: concurrent worker with claim/execute split + graceful shutdown
- JobRepository::claim_next() — atomic SELECT FOR UPDATE SKIP LOCKED + UPDATE status=processing in one query, no duplicate claims - ExecutePipelineHandler skips start() for already-claimed jobs - Sweep spawns N concurrent tasks via JoinSet, claims are fast+sequential, execution is slow+concurrent - Graceful shutdown: stop claiming, await all in-flight JoinSet tasks - WORKER_CONCURRENCY env (default: CPU cores) - DB_MAX_CONNECTIONS env (default: 20, was hardcoded 10) - VolumeFileResolver impl for InMemoryFileStorage (test fix)
This commit is contained in:
@@ -60,8 +60,10 @@ impl ExecutePipelineHandler {
|
||||
.await?
|
||||
.ok_or_else(|| DomainError::NotFound(format!("Job {} not found", cmd.job_id)))?;
|
||||
|
||||
job.start()?;
|
||||
self.job_repo.save(&job).await?;
|
||||
if job.status == domain::entities::JobStatus::Queued {
|
||||
job.start()?;
|
||||
self.job_repo.save(&job).await?;
|
||||
}
|
||||
|
||||
let trigger = job_type_to_trigger(&job.job_type);
|
||||
let pipelines = self.pipeline_repo.find_by_trigger(trigger).await?;
|
||||
|
||||
Reference in New Issue
Block a user