diff --git a/src/StackExchange.Redis/AutoConfigureInfoField.cs b/src/StackExchange.Redis/AutoConfigureInfoField.cs index 7420bb02f..303d57225 100644 --- a/src/StackExchange.Redis/AutoConfigureInfoField.cs +++ b/src/StackExchange.Redis/AutoConfigureInfoField.cs @@ -1,4 +1,4 @@ -using System; +using System; using RESPite; namespace StackExchange.Redis; @@ -38,8 +38,20 @@ internal enum AutoConfigureInfoField [AsciiHash("valkey_version")] ValkeyVersion, + [AsciiHash("dragonfly_version")] + DragonflyVersion, + + [AsciiHash("memurai_version")] + MemuraiVersion, + + [AsciiHash("redict_version")] + RedictVersion, + [AsciiHash("server_mode")] ServerMode, + + [AsciiHash("executable")] + Executable, } /// diff --git a/src/StackExchange.Redis/Enums/ProductVariant.cs b/src/StackExchange.Redis/Enums/ProductVariant.cs index 9355af073..fd3a17086 100644 --- a/src/StackExchange.Redis/Enums/ProductVariant.cs +++ b/src/StackExchange.Redis/Enums/ProductVariant.cs @@ -1,4 +1,4 @@ -// ReSharper disable once CheckNamespace +// ReSharper disable once CheckNamespace namespace StackExchange.Redis; /// @@ -24,5 +24,25 @@ public enum ProductVariant /// Garnet, + /// + /// Dragonfly + /// + Dragonfly, + + /// + /// Memurai + /// + Memurai, + + /// + /// Redict + /// + Redict, + + /// + /// KeyDB + /// + KeyDB, + // if you want to add another variant here, please open an issue with the details (variant name, INFO output, etc.) } diff --git a/src/StackExchange.Redis/PublicAPI/PublicAPI.Unshipped.txt b/src/StackExchange.Redis/PublicAPI/PublicAPI.Unshipped.txt index 419c74dc2..8022993e4 100644 --- a/src/StackExchange.Redis/PublicAPI/PublicAPI.Unshipped.txt +++ b/src/StackExchange.Redis/PublicAPI/PublicAPI.Unshipped.txt @@ -111,3 +111,7 @@ static StackExchange.Redis.BitFieldOperation.IncrementBy(StackExchange.Redis.Bit static StackExchange.Redis.BitFieldOperation.operator ==(StackExchange.Redis.BitFieldOperation x, StackExchange.Redis.BitFieldOperation y) -> bool static StackExchange.Redis.BitFieldOperation.operator !=(StackExchange.Redis.BitFieldOperation x, StackExchange.Redis.BitFieldOperation y) -> bool static StackExchange.Redis.BitFieldOperation.Set(StackExchange.Redis.BitFieldEncoding encoding, StackExchange.Redis.BitFieldOffset offset, long value, StackExchange.Redis.BitFieldOverflow overflow = StackExchange.Redis.BitFieldOverflow.Wrap) -> StackExchange.Redis.BitFieldOperation +StackExchange.Redis.ProductVariant.Dragonfly = 3 -> StackExchange.Redis.ProductVariant +StackExchange.Redis.ProductVariant.Memurai = 4 -> StackExchange.Redis.ProductVariant +StackExchange.Redis.ProductVariant.Redict = 5 -> StackExchange.Redis.ProductVariant +StackExchange.Redis.ProductVariant.KeyDB = 6 -> StackExchange.Redis.ProductVariant diff --git a/src/StackExchange.Redis/ResultProcessor.cs b/src/StackExchange.Redis/ResultProcessor.cs index 2175294e8..68662aa29 100644 --- a/src/StackExchange.Redis/ResultProcessor.cs +++ b/src/StackExchange.Redis/ResultProcessor.cs @@ -995,6 +995,21 @@ protected override bool SetResultCore(PhysicalConnection connection, Message mes productVariant = ProductVariant.Valkey; productVersion = valSpan.ToString(); break; + case AutoConfigureInfoField.DragonflyVersion: + productVariant = ProductVariant.Dragonfly; + productVersion = valSpan.ToString(); + break; + case AutoConfigureInfoField.MemuraiVersion: + productVariant = ProductVariant.Memurai; + productVersion = valSpan.ToString(); + break; + case AutoConfigureInfoField.RedictVersion: + productVariant = ProductVariant.Redict; + productVersion = valSpan.ToString(); + break; + case AutoConfigureInfoField.Executable when valSpan.EndsWith("/keydb-server"): + productVariant = ProductVariant.KeyDB; + break; } } if (roleSeen && Format.TryParseEndPoint(primaryHost!, primaryPort, out var sep))