Skip to content

Releases: FoundatioFx/Foundatio

v7.0.0

10 May 14:28
Compare
Choose a tag to compare

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

27 Feb 15:49
Compare
Choose a tag to compare

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.0

05 May 18:59
Compare
Choose a tag to compare

Moves all implementation libraries into their own repositories.

v5.0.0

12 Mar 20:31
Compare
Choose a tag to compare

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

12 Jul 20:15
Compare
Choose a tag to compare
v4.2.1 Pre-release
Pre-release

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!

v4.2.0

08 Jul 18:30
Compare
Choose a tag to compare
v4.2.0 Pre-release
Pre-release

What’s New

With the 4.2 release we focused on adding support for .NET Core. We will continue to update our packages with additional support for .NET Core (E.G., Azure and S3) once support becomes available.

New Features

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

Performance Improvements

  • Ensure we are caching type info where possible. This lead to less overhead during cloning objects and more.

Bug Fixes

  • We fixed a few dead lock issues in the various client implementations which were found after we ported to .NET Core.
  • Fixed a bug where the internal scheduler worker loop could be terminated. This could cause issues with in memory queues not auto abandoning queue items or caches from removing expired items.

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.1.0

15 Jun 15:44
Compare
Choose a tag to compare

What’s New

With the 4.1 release we fixed some performance issues and bug fixes.

New Features

  • Added support for AutoDeleteOnIdle and DefaultMessageTimeToLive in Azure ServiceBus Queues (@trbenning #39).

Performance Improvements

  • Lazy create the queues (@jamie94bc #25, #36)
  • Bail out early when calling SetAllAsync if is called with an empty collection. Extra work was being done that didn't need to happen.

Bug Fixes

  • Fixed serialization issue when value types were stored in two different dictionaries.
  • Only abandon queue jobs if it hasn't already been abandoned or completed. This was causing behaviors where exceptions were being thrown or the abandon account was being incremented incorrectly.

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.0.0

29 Mar 20:49
Compare
Choose a tag to compare

What’s New

With the 4.0 release our goal was to simplify the api and make it consistent and dead simple. A long the way we fixed many bugs and added new implementations.

New Implementations

  • Amazon S3 storage
  • Azure Service Bus queue (@jamie94bc)
  • Redis metrics client

API Changes

We've went through with a fine comb and simplified many api's to make it extremely straightforward to consume or create new implementations. We've renamed a few existing implementations for consistency and simplified overloads to make it easier to reason about the code. For example at one point queue jobs could have up to four locks, we realized that this could be simplified and now jobs have one lock.

We've also made massive improvements to logging to ensure that we are aligned for the future logging api implementations while ensuring we don't add any extra allocations for things that were never meant to be logged (min log levels).

Bug Fixes

We've learned a lot since our last release and have added even more tests. Here is a list of some of the major bugs we've fixed:

  • We found and fixed a few areas where deadlocks could occur.
  • Resolved issues that could occur if active connections were dropped and now we automatically heal.
  • Resolved issues where cached reference types could be updated.

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!

v3.0.0

30 Sep 20:07
Compare
Choose a tag to compare

What’s New

API Changes

We’ve gone 100% async, which means no more blocking synchronous code, allowing your apps to be even more responsive. For more on async and its benefits, take a look at this Microsoft article.

Along with going completely async, we’ve removed non async methods from the API and simplified the API overall. We wanted to make it easy for developers to roll out new implementations and use the existing API.

New methods

We also added new, useful methods across all the APIs to make it easier to perform common tasks. One example includes adding CalculateProgress() to WorkItemHandlerJobs. We hope these helpers allow you to be more productive.

Efficiency Improvements

Because we always want more speed out of our apps (and we know you do, too), we used Red Gate’s ANTS Performance Profiler to profile various apps, such as Exceptionless, and track down “hot” sections of code. By hot, we mean those pieces of code devoured more resources and took longer to run than all other application code. By doing so, we were able to pinpoint core pieces of Foundatio that were performing poorly compared to what they could be doing. Then we fixed them.

A few optimization examples

  • Maintenance code in various locations like queues, caches, etc, could and would run in a tight loop, sometimes pegging the CPU to 100% depending on the configuration. By running through and removing that maintenance code, or changing the way it was implemented to be triggered only when needed, rather than running in a constant worker loop, we drastically reduced CPU load and increased efficiency.
  • We also made massive improvements to queues and locks, on top of the maintenance code changes. Our Dequeue and AcquireLock methods would constantly pull for new items in a loop with a small timeout, which is obviously inefficient. Now we are using async monitors and pulse when a message is received over the message bus. This allows for huge improvements as the code will wait/sleep for a single monitor (of multiple monitors that could be waiting) to get triggered. This means your app isn’t wasting CPU cycles waiting, or external network calls looking for locks or new queue items. Instead, it’s running your app code and getting immediately notified when the lock is available or a new queue item is enqueued. Pretty slick!
  • Caching got a huge performance boost, too. For InMemoryCache clients, we moved from reflection-based object copying to using Expression Trees. This reduced the time required to get items from cache by a large percentage. Read more about implementing Expression Trees and see the difference it makes here.

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!

v1.0.0

25 Aug 16:03
Compare
Choose a tag to compare

The initial release of Foundatio.