Release Notes
This is the first release candidate of version 1.7 that adds a lot of new features and improvements and allows rolling upgrades from version 1.6.X and below. Detailed migration guide will be posted in the documentation next week, but the point of this release is to disable by default all the changes that are incompatible with 1.6 installations.
Known issues
- Due to the bug in the
CoreBackgroundJobPerformer
class, there's a race condition that leads to deadlocks when running asynchronous job methods, whenConfigureAwait(false)
method is called inside. This will be fixed in 1.7.0-rc2, and as a workaround, set theBackgroundJobServerOptions.TaskScheduler
property toTaskScheduler.Default
for your processing servers. - SQL Server 2014 is required for the
Hangfire.SqlServer
package to properly run the migration and executeCountersAggregator
process. The required version will be lowered back to SQL Server 2008 R2 in 1.7.0-rc2.
Upgrading from beta versions
If you are upgrading from 1.7.0 betas, upgrade all the servers first to the newest rc1
version and only then use add the following configuration lines to turn on the new features that were disabled by default in this release candidate. Please note that CompatibilityLevel.Version_170
contains some changes that your existing 1.7.0-beta servers may not understand.
GlobalConfiguration.Configuration
.SetDataCompatibilityLevel(CompatibilityLevel.Version_170) // Compact data representation
.UseSimpleAssemblyNameTypeSerializer() // Compact type serialization format
If you are using SQL Server as a job storage, set the following settings if you were using 1.7.0 betas just after updating the package. These settings are the same that were enabled by default for beta versions, so your existing servers are compatible with them.
.UseSqlServerStorage("connection_string", new SqlServerStorageOptions
{
CommandBatchMaxTimeout = TimeSpan.FromMinutes(5)
SlidingInvisibilityTimeout = TimeSpan.FromMinutes(5),
QueuePollInterval = TimeSpan.Zero, // Set only when using SlidingInvisibilityTimeout
DisableGlobalLocks = true, // Set only if `Schema 6` migration is applied
UsePageLocksOnDequeue = true // Set only if `Schema 6` migration is applied
})
Hangfire.Core
- Added –
IGlobalConfiguration.SetDataCompatibilityLevel
to enable rolling upgrades from version 1.6. - Added –
IGlobalConfiguration.UseRecommendedSerializerSettings
method for new installations. - Added – Assemblies now loaded automatically when resolving a type when using default type resolver.
- Added – Custom
TaskScheduler
can now be specified inBackgroundJobServerOptions
for workers. - Added –
IdempotentCompletionAttribute
filter to enforce strict order for continuations. - Added –
IBackgroundJobClient.ContinueJobWith
methods to replaceContinueWith
ones in future for clarity. - Added –
JobStorage.LinearizableReads
virtual property to avoid unnecessary waits in state changer. - Changed – Split serializer setting to Internal and User scopes to isolate them (Version_170 Switch).
- Changed – Don't allow to affect internal serialization even by
JsonConvert.DefaultSettings
(Version_170 Switch). - Changed – Share the same type binder between Hangfire itself and Newtonsoft.Json (Version_170 Switch).
- Changed – Use more compact representation of dates when using
SerializeDateTime
(Version_170 Switch). - Changed – Stop using special case for
DateTime
argument serialization (Version_170 Switch). - Changed – Don't serialize unused
AwaitingState.Expiration
field (Version_170 Switch). - Changed – Use custom
SynchronizationContext
for async methods to run their continuations on worker thread. - Changed – Specify parameter type when serializing arguments to allow using
TypeNameHandling.Auto
option. - Changed – Use case sensitive search when resolving a type as by default in .NET.
- Changed – Make
SucceededState
constructor public to allow state serialization. - Fixed – Worker now logs an error, when all the state change attempts failed due to an exception.
- Fixed – Ensure
RecurringJobScheduler
doesn't go into infinite loop when there's server of an older version. - Fixed – Implement
BackgroundTaskScheduler.MaximumConcurrencyLevel
property. - Fixed – Dashboard renderer for
AwaitingState
displaysOption
property as string again. - Fixed – Don't serialize arguments multiple times when showing job details in dashboard.
- Fixed –
DateTimeOffset
conversion error when it was serialized withTypeConverter
. - Fixed – Remove duplicate of argument deserialization code for obsolete
Job
class methods. - Fixed – Decorate all the exceptions with the
SerializableAttribute
. - Project – Add
DataCompatibilityRangeFact
andDataCompatibilityRangeTheory
classes for compatibility checks. - Project – Reduce test execution time by removing unnecessary waits.
- Ported – Merged updates from version 1.6.23.
Hangfire.AspNetCore
- Changed – Remove internal service registrations that are inconsistent with server options.
- Ported – Merged updates from version 1.6.23.
Hangfire.SqlServer
- Added –
SqlServerStorageOptions.EnableHeavyMigrations
switch to automatically install even heavy migrations. - Added –
Schema 7
migration to fix theIX_HangFire_Set_Score
index to include theKey
column. - Added –
SqlServerStorageOptions.DisableGlobalLocks
property to avoid custom locking scheme. - Added –
SqlServerStorageOptions.UsePageLocksOnDequeue
property to use less CPU consuming fetch. - Changed –
Schema 6
migration is disabled by default for existing installations, because it may take too long. - Changed – Don't throw an exception when using automatic migrations and current schema is newer than expected.
- Changed – Store arguments in the corresponding column in SQL Server again.
- Changed – Continue to use global locks by default in SQL Server storage.
- Changed – Bring
ExpirationManager
andCountersAggregator
to their previous state. - Changed – Monitoring API doesn't check state data to see state transition time.
- Changed – Update
CountersAggregator
to use clustered key for temp table. - Fixed – Avoid unnecessary waits in state changer when job was already expired.
- Fixed – Cannot resolve the collation conflict in
CountersAggregator
. - Ported – Merged updates from version 1.6.23.