Foundatio Versions Save

Pluggable foundation blocks for building distributed apps.

v9.0.0

4 years ago

What's Changed

Full Changelog: https://github.com/FoundatioFx/Foundatio/compare/v8.1...v9.0.0

v8.0.0

5 years ago

What’s New

With the 8.0 release we focused on adding new features, improving the build process using containers, and squashing some bugs.

New Features

  • Added support for Startup Actions that can be run when you startup your application. You can register an expression or implement IStartupAction and have a method called on startup.
  • We are taking Jobs to the next Level via new HostedJobService implementation. This new functionality allows you to register jobs to run jobs as background tasks in ASP.NET Core. You can find this new functionality in the Foundatio.Hosting NuGet package. Below are some of the awesome things we enabled out of the box:
    • Ability to define jobs via services.AddJob<MyJob>()
    • Ability to define Cron jobs via services.AddCronJob<MyJob>("* * * * *")
    • Ability to wait for startup actions to complete before running the jobs.
    • Ability to prevent your app from serving requests before the startup action run by calling app.UseWaitForStartupActionsBeforeServingRequests().
    • Return Unhealthy health checks if startup actions haven't completed. You can enable this by calling services.AddHealthChecks().AddCheckForStartupActionsComplete()
  • Added GetPagedFileListAsync to the IFileStorage interface to allow to allow for efficient paging.
  • Added deleted file count to DeleteFilesAsync to get more insight into delete operations.
  • Added RemoveAsync, RemoveIfEqualAsync , and ReplaceIfEqualAsync to the ICacheClient interface.
  • Added IQueueActivity interface to queue implementations. This allows you easily check when something has last occurred. We are using this interface for quick health checks.
  • Added new SafeSleepAsync methods to SystemClock. This ensured a common pattern for safely recovering from sleep operations once a token had been cancelled.

Bug Fixes

  • Fixed an issue with CacheLockProvider not cleaning up AsyncAutoResetEvents after calling AcquireAsync.
  • Fixed an issue where you could release any lock by lock name via the CacheLockProvider. You need to be sure you are releasing the lock you acquired and not someone elses lock.
  • Fixed a bug where the connection string parser could throw a null reference exception.

Breaking

  • We changed the ILockProvider interface signatures quite a bit in this release. We changed ReleaseAsync and RenewAsync methods to take an actual lock instance to prevent someone from releasing someone else lock.
  • We changed the ILock interface signatures a tiny bit by updating argument names and added some additional read only properties. We feel like this change will give us better control over assuring you a lock is unique as well as give us better insights into lock timings.
  • We removed GetFileListAsync from IFileStorage. It's now an extension method that calls into GetPagedFileListAsync.

Please take a look at the change log for a full list of the changes.

Check It Out – Feedback Appreciated!

We made many other improvements to ensure your apps run fast when using Foundatio, too many to be listed here. If you’re already using it, just update your NuGet package to the latest version to take advantage of these improvements. If you’re not using it yet, try it out. It’s worth a shot, we promise!

Once you’ve given it a go, please let us know what you like, or what you hate, by posting a issue.

Until next time, happy coding!

v7.0.0

6 years ago

What’s New

With the 7.0 release we focused on performance and reliability while adding new implementations.

New Features

  • Added new storage providers: Minio, SshNet and RedisFileStorage (Contrib @edwardmeng).
  • Added new Serialization implementations which are available via NuGet Packages Foundatio.JsonNet and Foundatio.Utf8Json. We also introduced a marker interface for serializers that do text based serialization ITextSerializer (Contrib @edwardmeng).
  • Added new overloaded methods to the ICacheClient : IncrementAsync, SetIfHigherAsync, and SetIfLowerAsync which are now take long and double types making your life a little bit easier.
  • Added new ICacheClient extension methods like SetUnixTimeMillisecondsAsync and GetUnixTimeMillisecondsAsync which makes it much easier to deal with timestamps.
  • We've added the ability for the job runner to run all jobs at once with the command run-all. This makes it really easy to have one docker image that can run one job or all of them in a single process.
  • We now allow implementations to be created with a default constructor or via fluent api (Contrib @edwardmeng #120). We wanted to do this in 6.0 but had breaking changes and wanted to give users some time to upgrade accordingly.

Performance Improvements

  • We've introduced a TaskQueue pattern and use it in several places like processing IMessageBus messages on a dedicated thread(s) to ensure they are delivered and don't starve the thread pool. This greatly improves reliability and deliverability.
  • We've made the default serializer be MessagePack instead of JSON.NET for much improved performance.
  • Improved the performance of FolderFileStorage by reducing the number of IO Lookups and CreateDirectories (Contrib @edwardmeng #116)

Bug Fixes

  • Fixed several bugs with running jobs continuously (Contrib @jamie94bc #125).
  • Fixed a bug with DeepCloning of objects where serializing a JObject could cause a deadlock.
  • Fixed a bug where a releasing a lock multiple times would free up other lock instances.
  • Fixed a bug where large numbers like DateTime ticks couldn't be round tripped by the cache client.
  • Fixed a bug where stream position wasn't respected when saving to storage.
  • We made changes to how CancellationTokens were handled and ensure they are disposed of properly.

Breaking

  • We changed the default serializer to MessagePackSerializer instead of using JSON.NET. If you want to use JSON.NET for your serialization needs you can install the Foundatio.JsonNet NuGet package and use Foundatio.Serializer.JsonNetSerializer. Here is how we are registering it in our app: container.AddSingleton<ISerializer>(s => new JsonNetSerializer());. Please note that we also added a ITextSerializer marker interface, so you could use both Binary Serialization with the default implementation using MessagePack and Text Serialization using JSON.NET.
  • We changed the ISerializer.Serialize method to return void instead of byte[].
  • Made job runners async. We broke this in 6.0 and found cases where it really didn't improve the performance and caused some other issues so we changed it back.

Please take a look at the change log for a full list of the changes.

Check It Out – Feedback Appreciated!

We made many other improvements to ensure your apps run fast when using Foundatio, too many to be listed here. If you’re already using it, just update your NuGet package to the latest version to take advantage of these improvements. If you’re not using it yet, try it out. It’s worth a shot, we promise!

Once you’ve given it a go, please let us know what you like, or what you hate, by posting a issue.

Until next time, happy coding!

v6.0.0

6 years ago

What’s New

With the 6.0 release we focused on performance as well as improving the .NET Core support.

New Features

  • Added support for SourceLink for improved debugging experience.
  • Added Scoped Lock Provider

Performance Improvements

  • Made the serializers and job runners synchronous.
  • Batched async operations across the board to reduce latencies and execution times.
  • Reuse immutable cache values.

Bug Fixes

  • Fixed a bug where deep cloning objects (for caching and other operations) could cause dead locks.
  • Allow jobs to shutdown gracefully and removed windows specific code.
  • Fixed a timing issue with queue.RunUntilEmpty(). Please note this code path is only intended for unit tests as it can be very expensive to call on some queueing systems like Azure.
  • Fixed a bunch of cross platform pathing issues.

Breaking

  • Removed ILogger and ILoggerFactory implementations and moved to Microsoft.Logging.Extensions.
  • Made the serializers and job runners synchronous. This allowed for faster serialization and job execution.

Please take a look at the change log for a full list of the changes.

Check It Out – Feedback Appreciated!

We made many other improvements to ensure your apps run fast when using Foundatio, too many to be listed here. If you’re already using it, just update your NuGet package to the latest version to take advantage of these improvements. If you’re not using it yet, try it out. It’s worth a shot, we promise!

Once you’ve given it a go, please let us know what you like, or what you hate, by posting a issue.

Until next time, happy coding!

v5.1

7 years ago

Moves all implementation libraries into their own repositories.

v5.0.0

7 years ago

What’s New

With the 5.0 release we focused on adding support for .NET Core as well as performance improvements.

New Features

  • Added support for .NET Core!
  • Added support to modify Sets (collections) via the cache client (@ttugrad01).
  • Added support for RabbitMQ (@barkhashah)

Performance Improvements

  • Major improvements around message bus message handling. If there are no subscribers or subscribers that cannot handle the message type we will not deserialize the message body or do any extra work.
  • Major performance improvements when using Queue Metric Behaviors. Previously metrics were causing work to be scheduled continuously and a lot of locking to occur.
  • We spent some time investigating ways we could reduce the amount of locking (CacheLockProvider, Queues and Scheduler) and use lighter weight async primitives where possible.

Bug Fixes

  • We fixed a few dead lock issues in the various client implementations which were found after we ported to .NET Core.
  • Fixed various bugs with maintenance scheduling and SystemClock. This should work a lot better and do less work than previous versions.
  • Fixed a bug where GetFileInfoAsync wasn't always returning the file metadata.
  • Fixed a few bugs where the Storage implementations were not normalizing the modified and creation dates.

Breaking

  • void IMessageSubscriber.Subscribe(...) method signature was changed to Task IMessageSubscriber.SubscribeAsync(...).
  • If you were using RabbitMQ prerelease version, the message bus now uses fanout instead of direct exchange. We also added support for the delayed message exchange plugin.
  • Renamed S3Storage to S3FileStorage to match the other implementations.

Please take a look at the change log for a full list of the changes.

Check It Out – Feedback Appreciated!

We made many other improvements to ensure your apps run fast when using Foundatio, too many to be listed here. If you’re already using it, just update your NuGet package to the latest version to take advantage of these improvements. If you’re not using it yet, try it out. It’s worth a shot, we promise!

Once you’ve given it a go, please let us know what you like, or what you hate, by posting a issue.

Until next time, happy coding!

v4.2.1

7 years ago

Version 4.2.1 includes a work around for a bug that could cause the NuGet packages to fail to install.

Please take a look at the change log for a full list of the changes.

Check It Out – Feedback Appreciated!

We made many other improvements to ensure your apps run fast when using Foundatio, too many to be listed here. If you’re already using it, just update your NuGet package to the latest version to take advantage of these improvements. If you’re not using it yet, try it out. It’s worth a shot, we promise!

Once you’ve given it a go, please let us know what you like, or what you hate, by posting a issue.

Until next time, happy coding!