Skip to content

Support Garnet as a replacement for Redis with Aspire/ServiceDiscovery #9848

@flensrocker

Description

@flensrocker

When using Garnet with Aspire like

var redis = builder.AddGarnet("redis");

var orleans = builder.AddOrleans("demo")
  .WithClustering(redis);
// etc.

and referencing Aspire.StackExchange.Redis in the Orleans project, where I call

builder.AddKeyedRedisClient("redis");

I get the exception

Unhandled exception. System.InvalidOperationException: Could not find Clustering provider named 'Garnet'. This can indicate that either the 'Microsoft.Orleans.Sdk' or the provider's package are not referenced by your application.

because the environment variable Orleans__Clustering__ProviderType is set to Garnet.

For me it looks like there's "just"™️ the RegisterProviderAttribute missing in

  • RedisClusteringProviderBuilder
  • RedisRemindersProviderBuilder
  • RedisGrainStorageProviderBuilder
  • RedisGrainDirectoryProviderBuilder

There's already another attribute for the provider type "AzureRedisCache". So maybe adding another one for "Garnet" would be enough?
And should Valkey be added, too?

Or is there another way to override the ProviderType of Garnet as "Redis"?

diff --git a/src/Redis/Orleans.Clustering.Redis/Hosting/RedisClusteringProviderBuilder.cs b/src/Redis/Orleans.Clustering.Redis/Hosting/RedisClusteringProviderBuilder.cs
index ab77727f1..2a1dc5e3c 100644
--- a/src/Redis/Orleans.Clustering.Redis/Hosting/RedisClusteringProviderBuilder.cs
+++ b/src/Redis/Orleans.Clustering.Redis/Hosting/RedisClusteringProviderBuilder.cs
@@ -11,9 +11,11 @@

 [assembly: RegisterProvider("Redis", "Clustering", "Silo", typeof(RedisClusteringProviderBuilder))]
 [assembly: RegisterProvider("AzureRedisCache", "Clustering", "Silo", typeof(RedisClusteringProviderBuilder))]
+[assembly: RegisterProvider("Garnet", "Clustering", "Silo", typeof(RedisClusteringProviderBuilder))]

 [assembly: RegisterProvider("Redis", "Clustering", "Client", typeof(RedisClusteringProviderBuilder))]
 [assembly: RegisterProvider("AzureRedisCache", "Clustering", "Client", typeof(RedisClusteringProviderBuilder))]
+[assembly: RegisterProvider("Garnet", "Clustering", "Client", typeof(RedisClusteringProviderBuilder))]

 namespace Orleans.Clustering.Redis.Hosting;

diff --git a/src/Redis/Orleans.GrainDirectory.Redis/Hosting/RedisGrainDirectoryProviderBuilder.cs b/src/Redis/Orleans.GrainDirectory.Redis/Hosting/RedisGrainDirectoryProviderBuilder.cs
index 4981fa791..df4beec59 100644
--- a/src/Redis/Orleans.GrainDirectory.Redis/Hosting/RedisGrainDirectoryProviderBuilder.cs
+++ b/src/Redis/Orleans.GrainDirectory.Redis/Hosting/RedisGrainDirectoryProviderBuilder.cs
@@ -11,6 +11,7 @@

 [assembly: RegisterProvider("Redis", "GrainDirectory", "Silo", typeof(RedisGrainDirectoryProviderBuilder))]
 [assembly: RegisterProvider("AzureRedisCache", "GrainDirectory", "Silo", typeof(RedisGrainDirectoryProviderBuilder))]
+[assembly: RegisterProvider("Garnet", "GrainDirectory", "Silo", typeof(RedisGrainDirectoryProviderBuilder))]

 namespace Orleans.Hosting;

diff --git a/src/Redis/Orleans.Persistence.Redis/Hosting/RedisGrainStorageProviderBuilder.cs b/src/Redis/Orleans.Persistence.Redis/Hosting/RedisGrainStorageProviderBuilder.cs
index 43447fe16..052a77a5e 100644
--- a/src/Redis/Orleans.Persistence.Redis/Hosting/RedisGrainStorageProviderBuilder.cs
+++ b/src/Redis/Orleans.Persistence.Redis/Hosting/RedisGrainStorageProviderBuilder.cs
@@ -12,6 +12,7 @@

 [assembly: RegisterProvider("Redis", "GrainStorage", "Silo", typeof(RedisGrainStorageProviderBuilder))]
 [assembly: RegisterProvider("AzureRedisCache", "GrainStorage", "Silo", typeof(RedisGrainStorageProviderBuilder))]
+[assembly: RegisterProvider("Garnet", "GrainStorage", "Silo", typeof(RedisGrainStorageProviderBuilder))]

 namespace Orleans.Hosting;

diff --git a/src/Redis/Orleans.Reminders.Redis/Hosting/RedisRemindersProviderBuilder.cs b/src/Redis/Orleans.Reminders.Redis/Hosting/RedisRemindersProviderBuilder.cs
index 974750460..15fa80288 100644
--- a/src/Redis/Orleans.Reminders.Redis/Hosting/RedisRemindersProviderBuilder.cs
+++ b/src/Redis/Orleans.Reminders.Redis/Hosting/RedisRemindersProviderBuilder.cs
@@ -10,6 +10,7 @@

 [assembly: RegisterProvider("Redis", "Reminders", "Silo", typeof(RedisRemindersProviderBuilder))]
 [assembly: RegisterProvider("AzureRedisCache", "Reminders", "Silo", typeof(RedisRemindersProviderBuilder))]
+[assembly: RegisterProvider("Garnet", "Reminders", "Silo", typeof(RedisRemindersProviderBuilder))]

 namespace Orleans.Hosting;

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions