quarkusio/quarkus · error · RuntimeException
Unable to resume job
Error message
Unable to resume job
What it means
Quarkus wraps a Quartz SchedulerException thrown while resuming a single paused job via Scheduler.resume(identity) into this RuntimeException. It calls scheduler.resumeJob(new JobKey(identity, ...)) on the underlying Quartz scheduler; JobStore failures surface here with the SchedulerException as cause.
Source
Thrown at extensions/quartz/runtime/src/main/java/io/quarkus/quartz/runtime/QuartzSchedulerImpl.java:447
@Override
public void resume(String identity) {
if (!isStarted()) {
throw notStarted();
}
Objects.requireNonNull(identity, "Cannot resume - identity is null");
if (identity.isEmpty()) {
LOGGER.warn("Cannot resume - identity is empty");
return;
}
try {
String parsedIdentity = SchedulerUtils.lookUpPropertyValue(identity);
QuartzTrigger trigger = scheduledTasks.get(parsedIdentity);
if (trigger != null) {
scheduler.resumeJob(new JobKey(SchedulerUtils.lookUpPropertyValue(parsedIdentity), Scheduler.class.getName()));
events.fireScheduledJobResumed(new ScheduledJobResumed(trigger));
}
} catch (SchedulerException e) {
throw new RuntimeException("Unable to resume job", e);
}
}
@Override
public boolean isRunning() {
if (!isStarted()) {
return false;
} else {
try {
return !scheduler.isInStandbyMode();
} catch (SchedulerException e) {
throw new IllegalStateException("Could not evaluate standby mode", e);
}
}
}
@Override
public List<Trigger> getScheduledJobs() {View on GitHub (pinned to e1c734241f)
Solutions
- Inspect the cause SchedulerException for the underlying store error
- Verify datasource connectivity when using the jdbc store
- Check for stale rows/locks in the Quartz cluster tables (qrtz_locks, qrtz_scheduler_state)
- Retry the resume after the store is healthy
Example fix
// before
scheduler.resume("myJob");
// after
try {
scheduler.resume("myJob");
} catch (RuntimeException e) {
LOGGER.errorf(e.getCause(), "resume failed for job");
} Defensive patterns
Strategy: try-catch
Validate before calling
Trigger t = scheduler.getScheduledJob(identity);
if (t == null) { LOGGER.warnf("Job %s not registered; resume skipped", identity); } Try / catch
try {
scheduler.resume(identity);
} catch (RuntimeException e) {
LOGGER.errorf(e.getCause(), "Cannot resume job %s", identity);
} Prevention
- Verify the job exists and is paused before resuming
- Check store connectivity when using the jdbc store
- Track pause/resume state per identity to make operations idempotent
When it happens
Trigger: Calling Scheduler.resume(identity) for a known paused job when the underlying resumeJob call fails — JDBC JobStore DB error, cluster lock failure, or store state inconsistency for the job's triggers.
Common situations: JDBC store database outage or connection-pool exhaustion; job paused while the app ran against one DB then resumed against another; clustered mode with a stale scheduler entry holding locks.
Related errors
- Unable to pause scheduler
- Unable to pause job
- Unable to resume scheduler
- Unable to unschedule job with identity: ${identity}
- Unable to start Scheduler
AI-assisted analysis of quarkusio/quarkus@e1c734241f (2026-09-05).
Data as JSON: /api/errors/e649fa42ba809ce5.
Report an issue: GitHub.