elsa-workflows / elsa-workflows/elsa-core
Migrate to FluentStorage v8
- Dominant language
- C#
- Stars
- 7.9k
- Forks
- 1.5k
- Avg merge
- 15h 22m
- Merged PRs (30d)
- 114
Description
## Task Overview
Migrate the Elsa repository from FluentStorage 6.x to FluentStorage 8.x.
Elsa currently references `FluentStorage` and `FluentStorage.Azure.Blobs` version `6.0.4`. FluentStorage v8 introduces a major redesign of its storage APIs, so this upgrade will require more than updating the package versions.
The migration should include:
* Upgrade `FluentStorage` and the FluentStorage provider packages used by Elsa to compatible 8.x versions.
* Replace usage of the legacy `StorageFactory.Blobs` APIs with the new provider-specific factory APIs.
* Migrate Elsa's FluentStorage integration from the previous blob-storage abstractions to the v8 `IStore`-based API where applicable.
* Update storage operations to use the new v8 method names and signatures.
* Update `UseFluentStorageProvider` and related configuration/extension APIs as necessary while minimizing unnecessary breaking changes to Elsa's public API.
* Update Azure Blob Storage integration to the FluentStorage v8 provider API.
* Update in-memory and other storage implementations used by tests and samples.
* Update affected unit/integration tests and examples.
* Verify the solution builds and the storage-related tests pass for all supported target frameworks.
## Purpose of the Task
FluentStorage v8 is the current major version and substantially modernizes the library's API and behavior.
Remaining on FluentStorage 6.x increases maintenance burden and makes it harder for Elsa to consume improvements and fixes from newer FluentStorage releases. It can also create dependency-version conflicts for applications that use Elsa together with FluentStorage v8 directly (my exact use scenario).
FluentStorage v8 also provides a more consistent asynchronous API and a redesigned provider model, which should simplify the storage integration once the migration is complete.
## Potential Issues
FluentStorage v8 contains significant breaking changes and is not a drop-in package upgrade.
Areas requiring particular attention include:
* `StorageFactory.Blobs` and similar extension-based factory APIs have been removed. Existing Elsa configuration and examples using constructs such as `StorageFactory.Blobs.InMemory()` will need to be migrated.
* Provider-specific factory classes are now used to construct storage implementations.
* Storage APIs have been redesigned around the newer `IStore` abstraction.
* Async methods have been renamed and generally no longer use the `Async` suffix.
* Method signatures and return types may differ from FluentStorage 6.x.
* Consumers that directly configure Elsa using FluentStorage types may experience a source-level breaking change if Elsa's public extension points need to expose v8 types.
* Storage-provider behavior should be reviewed for semantic changes. For example, FluentStorage v8 no longer automatically creates missing buckets when initializing S3-compatible stores.
Where possible, Elsa's own abstraction layer should shield consumers from FluentStorage-specific API changes. For example still using BlobStorage terminology instead of Store.
## Impact of Task
This migration will:
* Remove reliance on the legacy FluentStorage 6.x API.
* Keep Elsa compatible with the current FluentStorage ecosystem.
* Reduce dependency conflicts for applications using FluentStorage 8.
* Make future FluentStorage upgrades easier.
* Ensure Elsa continues to receive upstream fixes and storage-provider improvements.
## Additional Context
None, but this is a issue for people like me using the latest FluentStorage version.
Contributor guide
Research direction
Start by locating the FluentStorage 6.x package references and usages of StorageFactory.Blobs, UseFluentStorageProvider, and the current blob-storage abstractions. Review the FluentStorage v8 provider-specific factories and IStore API before updating Azure Blob, in-memory, sample, and test integrations. Done means the solution builds and storage-related tests pass for all supported target frameworks.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- azure, csharp
- Domain
- backend, databases, testing
- Issue type
- Refactor
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 32/100