Recurring jobs get permanently disabled when the database is full (SQL error 1105)
On SQL Server Express, which has a 10 GB limit per database. When it filled up, all our recurring jobs quietly stopped and never came back — even after we freed space. We had to restart the app to get them running again.
Digging in: when a recurring job can't be scheduled because the DB is full, job creation throws SqlException 1105 ("filegroup is full"). RecurringJobScheduler retries 5 times (~5 min) and then disables the job — NextExecution = null, score -1 in the recurring-jobs set. Since the scheduler never looks at negative scores again, the job is dead until something calls AddOrUpdate (app restart) or you trigger it by hand.
That makes sense for a genuinely broken job (bad cron, unloadable type), but a full disk or a timeout is a temporary storage problem, not a broken job — so disabling it permanently feels wrong.
Repro: cap a SQL Server data file (MODIFY FILE (MAXSIZE = 72MB, FILEGROWTH = 0)), fill it with junk until inserts fail with 1105, then run a * * * * * recurring job. Within ~5 minutes it's disabled, and freeing the space afterwards doesn't bring it back.
Suggestion: in RetryRecurringJob, don't count storage errors toward the disable limit — just keep retrying so the job recovers on its own once the DB is healthy. Checking for DbException would cover timeouts and connection drops too, but even just handling 1105 would fix the common case. Real job-definition errors would still disable as they do today.
Happy to open a PR if you're open to it.
Source: HangfireIO/Hangfire