Skip to content

Commit

Permalink
Add release notes for 1.7.0
Browse files Browse the repository at this point in the history
  • Loading branch information
odinserj committed Mar 27, 2019
1 parent d7ddc43 commit 150955b
Show file tree
Hide file tree
Showing 5 changed files with 114 additions and 254 deletions.
11 changes: 6 additions & 5 deletions content/readme.txt
Original file line number Diff line number Diff line change
@@ -1,14 +1,15 @@
Please see http://docs.hangfire.io for more information on using Hangfire. The
`Hangfire` package is using SQL Server as a job storage and intended to run in
any OWIN-based web application.
Please see https://docs.hangfire.io for more information on using Hangfire. The
`Hangfire` meta-package is using SQL Server as a job storage and intended to run
in any OWIN-based web application when targeting full .NET Framework, or ASP.NET
Core web application on .NET Core.

+-----------------------------------------------------------------------------+
| !!! DASHBOARD REQUIRES AUTH CONFIGURATION !!! |
+-----------------------------------------------------------------------------+

By default, ONLY LOCAL requests are allowed to access the Dashboard. Please
see the `Configuring Dashboard authorization` section in Hangfire documentation:
http://docs.hangfire.io/en/latest/configuration/using-dashboard.html#configuring-authorization
https://docs.hangfire.io/en/latest/configuration/using-dashboard.html#configuring-authorization

Sample ASP.NET Core Startup class
---------------------------------
Expand All @@ -24,11 +25,11 @@ namespace MyWebApplication
public void ConfigureServices(IServiceCollection services)
{
services.AddHangfire(x => x.UseSqlServerStorage("<connection string>"));
services.AddHangfireServer();
}

public void Configure(IApplicationBuilder app)
{
app.UseHangfireServer();
app.UseHangfireDashboard();
}
}
Expand Down
23 changes: 2 additions & 21 deletions nuspecs/Hangfire.AspNetCore.nuspec
Original file line number Diff line number Diff line change
Expand Up @@ -14,31 +14,12 @@
<tags>hangfire aspnetcore</tags>
<releaseNotes>https://www.hangfire.io/blog/

1.7.0-rc2
• Changed – Allow to use registered custom low-level classes like `IBackgroundJobFactory` again.
• Fixed – `NullReferenceException` when application is stopped due to an exception during the start.

1.7.0-rc1
• Changed – Remove internal service registrations that are inconsistent with server options.
• Ported – Merged updates from version 1.6.23.

1.7.0-beta3
1.7.0
• 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.

1.7.0-beta2

Merged updates from 1.6.18 – 1.6.20:

1.6.20
• SECURITY – Use ASP.NET Core's built-in antiforgery validation to prevent CSRF attacks.

1.6.18
• Added – More Hangfire-related services are now registered in an IoC container (by @pieceofsummer).
• Fixed – Queue parameter is ignored in .NET Core when creating a job (by @pieceofsummer).
• Fixed – Fix issue with configuration block not called on .NET Core (by @pieceofsummer).
• Changed – Custom services for factory, performer and state changer interfaces will be picked up only when all of them registered.

</releaseNotes>
<dependencies>
Expand Down
97 changes: 34 additions & 63 deletions nuspecs/Hangfire.Core.nuspec
Original file line number Diff line number Diff line change
Expand Up @@ -19,103 +19,74 @@ https://www.hangfire.io/
<tags>Hangfire OWIN Long-Running Background Fire-And-Forget Delayed Recurring Tasks Jobs Scheduler Threading Queues</tags>
<releaseNotes>https://www.hangfire.io/blog/

1.7.0-rc2
• Changed – Allow `IdempotentCompletion` filter to move a job to non-final and non-processing states.
• Changed – Make `TaskScheduler.Default` the default scheduler for async jobs to avoid breaking changes.
• Changed – Increase delays between continuation state fetch attempts to reduce storage load.
• Changed – Avoid breaking changes in `BackgroundJobServer` and `RecurringJobScheduler` classes.
• Changed – Add `IBackgroundJobFactory.StateMachine` property (breaking change for low level API).
• Fixed – Deadlock in async methods when `ConfigureAwait(false)` is used (regression in RC 1).

1.7.0-rc1
1.7.0
• 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&lt;T&gt; (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 – 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.
• 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 – 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` displays `Option` 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 with `TypeConverter`.
• Fixed – Remove duplicate of argument deserialization code for obsolete `Job` class methods.
• Fixed – Decorate all the exceptions with the `SerializableAttribute`.
• Project – Add `DataCompatibilityRangeFact` and `DataCompatibilityRangeTheory` classes for compatibility checks.
• Project – Reduce test execution time by removing unnecessary waits.
• Ported – Merged updates from version 1.6.23.

1.7.0-beta4
• Changed – `StopTimeout` introduced in 1.7.0-beta3 now defaults to zero seconds.
• Fixed – `NotSupportedException` thrown by `RecurringJobScheduler` (regression).
• Fixed – `NotSupportedException` thrown by `DelayedJobScheduler` (regression).
• Fixed – `RecurringJobManager.AddOrUpdate` method doesn't preserve `LastJobId` (regression).
• Fixed – Cache results of the `IsBatchingAvailable` method per connection type.

1.7.0-beta3
• 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).
• Changed – New type serialization is disabled by default for compatibility reasons.
• Changed – Cronos package upgraded to 0.7.0 and internalized even on .NET Standard platforms.
• 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 – `ArgumentNullException` when job class contains method with non-resolvable generic arguments.
• Fixed – Re-add missing fonts as embedded resources due to a regression appeared in 1.7.0-beta2.
• 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 – Backward compatibility issue with type serialization when `TypeNameHandling.All` is used.
• 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 – `NextExecution` field of a recurring job has delay in value getting set.
• Fixed – Dashboard graphs have improper sizing.
• Ported – Merged updates from version 1.6.21 and 1.6.22.

1.7.0-beta2
• Fixed – `MissingMethodException` when using Newtonsoft.Json 11 in .NET Core 2.X with continuations (by @pieceofsummer).
• Ported – Merged updates from versions 1.6.18 – 1.6.20.

1.7.0-beta1
• 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 async jobs returning ValueTask&lt;T&gt; and other await-compatible types (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).
• Changed – Decrease the size of serialized payloads and remove version information.
• 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.
</releaseNotes>
<dependencies>
<group targetFramework="net45">
Expand Down
48 changes: 15 additions & 33 deletions nuspecs/Hangfire.SqlServer.nuspec
Original file line number Diff line number Diff line change
Expand Up @@ -14,50 +14,32 @@
<tags>Hangfire SqlServer SqlAzure LocalDB</tags>
<releaseNotes>https://www.hangfire.io/blog/

1.7.0-rc2
• Fixed – Don't use clustered index on table variable in `CountersAggregator`, works only in MSSQL 2014.
• Fixed – Don't use the `CONCAT` function in migration script, works only in MSSQL 2012.

1.7.0-rc1
• Added – `SqlServerStorageOptions.EnableHeavyMigrations` switch to automatically install even heavy migrations.
1.7.0
• 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.
• 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` and `CountersAggregator` to their previous state.
• Added – Callback method to allow to open the database with impersonation (by @BjoernHund).
• 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 – 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.

1.7.0-beta3
• Changed – Short paths for the CreateExpiredJob method to avoid some round-trips.
• 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.
• Ported – Merged updates from version 1.6.21 and 1.6.22.

1.7.0-beta2
• Added – Blocking fetch support for sliding expiration-based fetch to avoid excessive polling.
• Changed – Optimize sliding-expiration-based fetching to use even less CPU time.
• Changed – Use write reordering and fine-grained locking scheme to improve parallelism.
• Ported – Merged updates from versions 1.6.18 – 1.6.20.

1.7.0-beta1
• Added – `Schema 6` with less indexes, better physical layout and `bigint` support.
• Added – Callback method to allow to open the database with impersonation (by @BjoernHund).
• 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.
• 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.
• Fixed – Slowdown of scheduled jobs due to the missing index on the `[Set]` table.
</releaseNotes>
<dependencies>
<group targetFramework="net45">
Expand Down
Loading

0 comments on commit 150955b

Please sign in to comment.