These versions contain important fixes for the whole processing pipeline, including fire-and-forget, delayed and recurring jobs in the presence of custom extension filters that can throw exceptions. Also a built-in support for reliable shutdown detection of ASP.NET applications was added to the Hangfire.Core package to prevent running old code base when the new one is already deployed. And recurring jobs page in 1.7.11 now displays all the exceptions that prevent a particular recurring job from being scheduled.
Exceptions thrown from extension filters now properly handled without stalling the processing pipeline, and custom filters now being disabled when moving a job to the Failed state when all the previous state change attempts failed. This was a regression appeared in version 1.6.20 after resolving another issue with state changes, so upgrades for both 1.6.X and 1.7.X are available.
I’ve also decided to copy a reliable shutdown detection of ASP.NET applications from the Hangfire.AspNet package, to ensure that every application that use Hangfire in ASP.NET uses this feature. Long-running requests, overlapped recycle feature that’s turned on by default and strange behavior that sometimes doesn’t cause AppDomain unload after new deployments can leave old application instance running, resulting in subtle errors sometimes really hard to understand.
Hangfire.Core
- Added – Display recurring job exceptions directly in the Dashboard UI.
- Added – Add built-in support for reliable shutdown detection of ASP.NET apps.
- Changed – Internal feature to perform state changes without calling any filters.
- Changed – Decrease the number of retry attempts for recurring jobs to 5.
- Changed – Unify exception handling in recurring job scheduler.
- Fixed – Let workers to ignore any state change filters when all previous attempts to call them failed.
-
Fixed – Don’t let
RecurringJobScheduler
to stall the pipeline when extension filters throw an exception. -
Fixed – Don’t let
DelayedJobScheduler
to stall the pipeline when state filters throw an exception. -
Fixed –
JobLoadException
when new methods deployed, caused by overlapped recycles in ASP.NET applications. - Fixed – Configuration changes aren’t taken into account, caused by overlapped recycles in ASP.NET.
- Fixed – Zombie servers shown on the “Servers” page that aren’t stopped automatically unless app pool is recycled.
-
Fixed – Pass the whole exception to the
Error
field of a recurring job. - Fixed – Re-schedule recurring jobs with unsupported versions, instead of stopping the pipeline.
- Fixed – Don’t stumble over non-existing recurring jobs in a scheduler.
- Fixed – Add another check before removing non-existing jobs from delayed jobs to avoid race conditions.
-
Fixed – Avoid throwing
NullReferenceException
instead ofInvalidOperationException
when deserializing a job. - Fixed – Don’t transform queue names to upper case in the Dashboard UI.