This release contains major bug fixes, and is very recommended to upgrade. In short, OperationCanceledException doesn’t cause background processing to stop now. Dashboard UI doesn’t leak READ UNCOMMITTED isolation level, and READ_COMMITTED_SNAPSHOT option doesn’t lead background jobs to stuck in Enqueued state.

The first problem appears, when OperationCanceledException is thrown by a user code – workers considered it as a signal that shutdown request was initiated. This lead to a chain reaction, where one worker facing with an exception, re-queues a job and stops; then other worker picks up the same job, re-queues it and stops; etc, ending with all the workers are stopped. There’s now additional check whether server is going to shutdown, and this exception has special meaning only if it’s true. So methods, filters and processes can throw this exception without any side effects now.

The second exception is related to possible READ UNCOMMITTED transaction isolation level leaks. This is an old well-known problem (I even don’t understand why it wasn’t fixed yet) that exists in SQL Server ≤ 2012 (yep, it was fixed in 2014). This level is used in Dashboard UI to prevent blocking operations. Now all the dashboard queries are using NOLOCK table hint instead of transactions.

Hangfire.Core

  • FixedOperationCanceledException exceptions don’t cause background processing to stop.

Hangfire.SqlServer

  • Fixed – Don’t leak Dashboard UI’s READ UNCOMMITTED isolation level to other parts of an application.
  • FixedREAD_COMMITTED_SNAPSHOT option doesn’t prevent background jobs from being processed.

Subscribe to monthly updates

Subscribe to receive monthly blog updates. Very low traffic, you are able to unsubscribe at any time.

Comments