Hangfire v1.7.0 Release Notes

Release Date: 2019-03-29 // about 5 years ago
  • ๐Ÿš€ Release Notes

    โฌ†๏ธ Please see the Upgrading to Hangfire 1.7 article to learn more about the upgrade steps.

    Hangfire.Core

    • โž• Added โ€“ Full .NET Core 2.0 support by explicitly targeting .NET Standard 2.0.
    • โž• 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 in BackgroundJobServerOptions for workers.
    • โž• Added โ€“ IdempotentCompletionAttribute filter to enforce strict order for continuations.
    • โž• Added โ€“ IBackgroundJobClient.ContinueJobWith methods to replace ContinueWith ones in future for clarity.
    • โž• Added โ€“ JobStorage.LinearizableReads virtual property to avoid unnecessary waits in state changer.
    • โž• Added โ€“ Allow async methods to run their continuations on worker thread by disabling TaskScheduler.
    • โž• Added โ€“ Multi-stage shutdown to wait for graceful completion before starting to abort jobs.
    • โž• Added โ€“ Asynchronous checks for job cancellation, IJobCancellationToken can be replaced with CancellationToken (by @pieceofsummer).
    • โž• Added โ€“ Possibility to create millions of recurring jobs without stressing the scheduler.
    • โž• Added โ€“ Second-based recurring jobs are fully supported now with 6-part cron expressions.
    • โž• Added โ€“ Support for custom TimeZoneInfo resolvers in recurring jobs for interoperability purposes.
    • โž• Added โ€“ Package now explicitly targets .NET Standard 2.0, and .NET Framework 4.6 target added as well.
    • โž• Added โ€“ Type roundtrip support between .NET Core and .NET Framework for most common types.
    • โž• Added โ€“ Allow to specify queue names based on job arguments with QueueAttribute via patterns.
    • โž• Added โ€“ PerformContext.Storage property to allow server filters to spawn connections.
    • โž• Added โ€“ GetFirstByLowestScoreFromSet connection method overload that returns multiple items (by @cdschneider).
    • โž• Added โ€“ Entry point for custom job naming strategies available for dashboard (by @pieceofsummer).
    • โž• Added โ€“ JobDisplayNameAttribute class for displaying jobs in dashboard, available on .NET Core (by @pieceofsummer).
    • โž• Added โ€“ Support for async jobs returning ValueTask<T> (by @pieceofsummer).
    • โž• Added โ€“ Support for asynchronous background processes, opens the road toward async storage.
    • โž• Added โ€“ Circuit breaker pattern for background processes to reduce the logging pressure.
    • โž• Added โ€“ Processing server is now able to detect it was expired, and restart itself with the new id.
    • โž• Added โ€“ Ability to use custom delays for automatic retries of a background job.
    • โž• Added โ€“ ThreadAbortException and ThreadInterruptedException handling to keep the background process running.
    • โž• Added โ€“ Support for complex Cron expressions, including the L, W, # characters.
    • โž• Added โ€“ JobActivator.BeginScope method overload with the full PerformContext (by @jeroenvervaeke).
    • โž• Added โ€“ Support for read-only view for dashboard (by @mikechamberlain).
    • โž• Added โ€“ Storage property to control the job expiration time (by @rsilvanet).
    • โž• Added โ€“ Decrease the size of serialized type payloads and remove version information.
    • ๐Ÿ”„ Changed โ€“ Make TaskScheduler.Default the default scheduler for async jobs to avoid breaking changes.
    • ๐Ÿ”„ 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 โ€“ 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.
    • ๐Ÿ”„ Changed โ€“ Add IBackgroundJobFactory.StateMachine property (breaking change for low level API).
    • ๐Ÿ”„ Changed โ€“ Replace Rickshaw with Chart.js to have beautiful charts with less headache.
    • ๐Ÿ”„ Changed โ€“ DelayedJobScheduler is able to use the new storage method to query multiple jobs at once.
    • ๐Ÿ”„ Changed โ€“ RecurringJobScheduler now uses index-based checks to fetch only those jobs that should be scheduled.
    • ๐Ÿ›  Fixed โ€“ Worker now logs an error, when all the state change attempts failed due to an exception.
    • ๐Ÿ›  Fixed โ€“ Don't serialize arguments multiple times when showing job details in dashboard.
    • ๐Ÿ›  Fixed โ€“ DateTimeOffset conversion error when it was serialized with TypeConverter.
    • ๐Ÿ›  Fixed โ€“ Remove duplicate of argument deserialization code for obsolete Job class methods.
    • ๐Ÿ›  Fixed โ€“ Decorate all the exceptions with the SerializableAttribute.
    • ๐Ÿ›  Fixed โ€“ ArgumentNullException when job class contains method with non-resolvable generic arguments.
    • ๐Ÿ›  Fixed โ€“ "Failed to initialize CoreCLR" error, by removing reference to Microsoft.NETCore.Portable.Compatibility.
    • ๐Ÿ›  Fixed โ€“ Possible race conditions in RecurringJobScheduler that may lead to job duplicates.
    • ๐Ÿ›  Fixed โ€“ Configuration inconsistency introduced in 1.6.18 leading to issues with custom JobActivator.
    • ๐Ÿ›  Fixed โ€“ Triggering the recurring task doesn't update its last execution time.
    • ๐Ÿ›  Fixed โ€“ Recurring job which don't have next execution (intentionally or not) don't cause exception.
    • ๐Ÿ›  Fixed โ€“ Dashboard recurring jobs sorting is random (now it's based on next execution time).
    • ๐Ÿ›  Fixed โ€“ Performance problems with huge amount of recurring jobs.
    • ๐Ÿ›  Fixed โ€“ NextExecution field of a recurring job has delay in value getting set.
    • ๐Ÿ›  Fixed โ€“ Dashboard graphs have improper sizing.
    • ๐Ÿ›  Fixed โ€“ Server disappears from the list, but still performing the background processing.
    • ๐Ÿ›  Fixed โ€“ Logging is too aggressive on transient errors.
    • ๐Ÿ›  Fixed โ€“ Daylight saving time transitions now handled perfectly in recurring jobs thanks to Cronos.
    • ๐Ÿ›  Fixed โ€“ Confusing Cron scheduling, when both day-of-week and day-of-month fields set.
    • Project โ€“ Add DataCompatibilityRangeFact and DataCompatibilityRangeTheory classes for compatibility checks.
    • Project โ€“ Reduce test execution time by removing unnecessary waits.

    Hangfire.AspNetCore

    • โž• Added โ€“ Full .NET Core 2.0 support by explicitly targeting .NET Standard 2.0.
    • โž• Added โ€“ An overloaded AddHangfire method with IServiceProvider parameter (by @ericgreenmix and @denis-ivanov).
    • โž• Added โ€“ BackgroundJobServerHostedService class based on IHostedService interface.
    • โž• Added โ€“ IServiceCollection.AddHangfireServer method to register the server during configuration.
    • ๐Ÿ”„ Changed โ€“ Custom services for factory, performer and state changer interfaces will be picked up only when all of them registered.

    Hangfire.SqlServer

    • โž• Added โ€“ Full .NET Core 2.0 support by explicitly targeting .NET Standard 2.0.
    • โž• Added โ€“ Schema 7 migration to fix the IX_HangFire_Set_Score index to include the Key column.
    • โž• Added โ€“ Schema 6 migration with less indexes, better physical layout and bigint support (disabled by default).
    • โž• Added โ€“ Blocking fetch support for sliding expiration-based fetch to avoid excessive polling.
    • โž• Added โ€“ SqlServerStorageOptions.EnableHeavyMigrations switch to automatically install even heavy migrations.
    • โž• Added โ€“ SqlServerStorageOptions.DisableGlobalLocks property to avoid custom locking scheme.
    • โž• Added โ€“ SqlServerStorageOptions.UsePageLocksOnDequeue property to use less CPU consuming fetch.
    • โž• Added โ€“ Callback method to allow to open the database with impersonation (by @BjoernHund).
    • โž• Added โ€“ SqlServerStorageOptions.UseRecommendedIsolationLevel option to set the minimum possible level.
    • ๐Ÿ”„ Changed โ€“ Identity columns either converted to the bigint type, or entirely removed.
    • ๐Ÿ”„ Changed โ€“ Clustered indexes were organized according to the access patterns of their tables.
    • ๐Ÿ”„ Changed โ€“ Most of secondary indexes were either removed or made filtered.
    • ๐Ÿ”„ Changed โ€“ Optimize sliding-expiration-based fetching to use even less CPU time.
    • ๐Ÿ”„ Changed โ€“ Use write reordering and fine-grained locking scheme to improve parallelism.
    • ๐Ÿ”„ Changed โ€“ Monitoring API doesn't check state data to see state transition time.
    • ๐Ÿ”„ Changed โ€“ Allow to use zero-based poll interval when sliding invisibility timeout.
    • ๐Ÿ”„ Changed โ€“ Short paths for the CreateExpiredJob method to avoid some round-trips.
    • ๐Ÿ”„ Changed โ€“ Set SqlParameter types explicitly to not to duplicate query plans.
    • ๐Ÿ”„ Changed โ€“ Batch support for AddToQueue method when default provider is used.
    • ๐Ÿ”„ Changed โ€“ Check FetchedAt has expected value to prevent prolonging others' work.
    • ๐Ÿ”„ Changed โ€“ Use more recent Dapper 1.50.7 on all platforms except .NET Framework 4.5.
    • ๐Ÿ”„ Changed โ€“ Dapper package is internalized now even on .NET Core to avoid possible conflicts.
    • ๐Ÿ›  Fixed โ€“ Avoid unnecessary waits in state changer when job was already expired.
    • ๐Ÿ›  Fixed โ€“ Cannot resolve the collation conflict in CountersAggregator.
    • ๐Ÿ›  Fixed โ€“ Background processing stops when identity columns exceed the Int32.MaxValue.
    • ๐Ÿ›  Fixed โ€“ Slowdown of scheduled jobs due to the missing index on the [Set] table.