diff --git a/Directory.Build.props b/Directory.Build.props
index f5981dc8b..6cd0c9477 100644
--- a/Directory.Build.props
+++ b/Directory.Build.props
@@ -10,8 +10,9 @@
true
$(MSBuildThisFileDirectory)Shared.ruleset
NETSDK1069
-
- $(NoWarn);NU5105;NU1507;SER001;SER004;SER005;SER007;SER008;SER009
+
+ $(NoWarn);NU5105;NU1507;SER001;SER004;SER005;SER009
https://github.com/StackExchange/StackExchange.Redis/releases
https://seredis.dev/
MIT
diff --git a/docs/Configuration.md b/docs/Configuration.md
index 66eaa20ab..dc721f975 100644
--- a/docs/Configuration.md
+++ b/docs/Configuration.md
@@ -138,9 +138,9 @@ Additional code-only options:
- ResponseBufferPool (`MemoryPool`) - Default: `null`
- The buffer pool to use when buffering responses (and for allocating `Lease` results); when `null`, a shared default pool is used
- CircuitBreaker (`CircuitBreaker`) - Default: `null`
- - **[Experimental](exp/SER007)** (client-side geographic failover). A per-connection circuit breaker that *passively* observes the outcome of normal traffic and tears the connection down when it becomes unstable. When the connection is a member of a connection group, this flows in from `MultiGroupOptions.CircuitBreaker` if not set explicitly. See [Client-side geographic failover](Failover)
+ - **Client-side geographic failover.** A per-connection circuit breaker that *passively* observes the outcome of normal traffic and tears the connection down when it becomes unstable. When the connection is a member of a connection group, this flows in from `MultiGroupOptions.CircuitBreaker` if not set explicitly. See [Client-side geographic failover](Failover)
- HealthCheck (`HealthCheck`) - Default: `null`
- - **[Experimental](exp/SER007)** (client-side geographic failover). An *active* health check used when the connection is a member of a connection group; when `null`, the group-level `MultiGroupOptions.HealthCheck` is used. See [Client-side geographic failover](Failover)
+ - **Client-side geographic failover.** An *active* health check used when the connection is a member of a connection group; when `null`, the group-level `MultiGroupOptions.HealthCheck` is used. See [Client-side geographic failover](Failover)
Tokens in the configuration string are comma-separated; any without an `=` sign are assumed to be redis server endpoints. Endpoints without an explicit port will use 6379 if ssl is not enabled, and 6380 if ssl is enabled.
Tokens starting with `$` are taken to represent command maps, for example: `$config=cfg`.
diff --git a/docs/exp/SER007.md b/docs/exp/SER007.md
index 60fee6dd8..722520667 100644
--- a/docs/exp/SER007.md
+++ b/docs/exp/SER007.md
@@ -1,4 +1,14 @@
-# Client-side geographic failover
+# Client-side geographic failover — SER007 retired
+
+**This diagnostic is no longer produced.** Client-side geographic failover is no longer marked
+`[Experimental]`, so nothing emits `SER007` and no suppression is needed. The page is kept because the
+diagnostic's help link pointed here, and older builds still carry it.
+
+If you have a suppression for `SER007` — in a `csproj`, a `.editorconfig`, or a `#pragma` — it is now
+inert, and can be removed whenever it suits you. This is the removal the previous version of this page
+said to expect: *"the diagnostic simply stops being emitted, with no code change needed on your side."*
+
+## The feature
This feature is used to fail over between multiple redundant endpoints that can each serve your workload - designed for an
**Active-Active** (geo-distributed, bidirectionally-replicated) deployment, but usable over any set of endpoints, including ones
@@ -6,24 +16,16 @@ with no replication between them (see the full docs for what that means for your
"multi-DB client" concept in other Redis clients (Jedis' `MultiDbClient`, redis-py's `MultiDBClient`); please see
[full docs](/Failover).
-## Status: released and fully supported
-
-**This is a shipped, supported feature, intended for production use.** It is not a preview, it is not gated on an
-unreleased server version, and it does not depend on any server API that is subject to change. Bugs in it are treated as
-bugs, and can be reported and addressed in the usual way. No API changes are currently planned.
+It was a shipped, supported feature throughout - not a preview, not gated on an unreleased server version,
+and not dependent on any server API subject to change. What the marker reserved was the right to adjust
+*this library's* API surface without the usual backwards-compatibility guarantees, because it was a large,
+brand-new public API arriving in a single release and a surface that size is hard to correct once locked down.
-The `[Experimental]` marker is nonetheless a real one: while it is present, we reserve the right to adjust this API surface
-without the usual backwards-compatibility guarantees. That is the whole reason it is here. Client-side geographic failover
-is a large, brand-new public API arriving in a single release, and once a surface that size is locked down it is locked down
-for good - so we would rather keep room to correct a design wrinkle found in real-world use than commit to every detail
-on day one.
+That exposure has now happened, so the surface is covered by the usual compatibility guarantees like any other.
-The marker is expected to be short-lived, and to be removed in a subsequent 3.1.x release once the design has had some
-exposure. At that point the diagnostic simply stops being emitted, with no code change needed on your side.
+## What it used to mean
-Suppressing the diagnostic is the normal way to use the feature; doing so acknowledges the above.
-
-To suppress this message, add the following to your `csproj` file:
+Suppressing the diagnostic was the normal way to use the feature, and acknowledged the above:
```xml
$(NoWarn);SER007
@@ -34,3 +36,8 @@ or more granularly / locally in C#:
``` c#
#pragma warning disable SER007
```
+
+## Reserved, not recycled
+
+`SER007` is not reused for anything else, so an old suppression cannot silently hide an unrelated
+warning. The same applies to the other retired identifiers — see `Experiments.cs`.
diff --git a/docs/exp/SER008.md b/docs/exp/SER008.md
index fec4a2be9..41acb9aff 100644
--- a/docs/exp/SER008.md
+++ b/docs/exp/SER008.md
@@ -1,17 +1,27 @@
-Redis 8.10 is currently in preview and may be subject to change.
+# Redis 8.10 features — SER008 retired
+
+**This diagnostic is no longer produced.** The Redis 8.10 bindings are no longer marked
+`[Experimental]`, so nothing emits `SER008` and no suppression is needed. The page is kept because the
+diagnostic's help link pointed here, and older builds still carry it.
+
+If you have a suppression for `SER008` — in a `csproj`, a `.editorconfig`, or a `#pragma` — it is now
+inert, and can be removed whenever it suits you.
+
+## What it covered
New features in Redis 8.10:
- Session-based bulk hash import via fieldsets (`HIMPORT`), surfaced as `IDatabase.HashImport`/`HashImportAsync`
-The corresponding library features must also be considered subject to change:
+## What it used to mean
-1. Existing bindings may cease working correctly if the underlying server API changes.
-2. Changes to the server API may require changes to the library API, manifesting in either/both of build-time
- or run-time breaks.
+While Redis 8.10 was in preview, the corresponding library features had to be considered subject to change too:
-While this seems *unlikely*, it must be considered a possibility. If you acknowledge this, you can suppress
-this warning by adding the following to your `csproj` file:
+1. Existing bindings might cease working correctly if the underlying server API changed.
+2. Changes to the server API might require changes to the library API, manifesting in either/both of
+ build-time or run-time breaks.
+
+Acknowledging that was what the suppression meant:
```xml
$(NoWarn);SER008
@@ -22,3 +32,8 @@ or more granularly / locally in C#:
``` c#
#pragma warning disable SER008
```
+
+## Reserved, not recycled
+
+`SER008` is not reused for anything else, so an old suppression cannot silently hide an unrelated
+warning. The same applies to the other retired identifiers — see `Experiments.cs`.
diff --git a/src/RESPite/Shared/Experiments.cs b/src/RESPite/Shared/Experiments.cs
index 2cfcd94d6..61a1e5fe8 100644
--- a/src/RESPite/Shared/Experiments.cs
+++ b/src/RESPite/Shared/Experiments.cs
@@ -14,12 +14,12 @@ internal static class Experiments
// SER002 = Server_8_4 (Redis 8.4 features)
// SER003 = Server_8_6 (Redis 8.6 features)
// SER006 = Server_8_8 (Redis 8.8 features)
+ // SER007 = GeoRedundantFailover (multi-group connections, health checks, retry)
+ // SER008 = Server_8_10 (Redis 8.10 features)
// ReSharper disable InconsistentNaming
public const string Respite = "SER004";
public const string UnitTesting = "SER005";
- public const string GeoRedundantFailover = "SER007";
- public const string Server_8_10 = "SER008";
public const string Transport = "SER009";
// ReSharper restore InconsistentNaming
diff --git a/src/StackExchange.Redis/APITypes/HashImport.cs b/src/StackExchange.Redis/APITypes/HashImport.cs
index 92e6f91f1..9db18bd9e 100644
--- a/src/StackExchange.Redis/APITypes/HashImport.cs
+++ b/src/StackExchange.Redis/APITypes/HashImport.cs
@@ -29,7 +29,6 @@ namespace StackExchange.Redis;
///
/// A single is safe to use concurrently and against multiple databases/multiplexers.
///
-[Experimental(Experiments.Server_8_10, UrlFormat = Experiments.UrlFormat)]
public sealed class HashImport : IDisposable, IAsyncDisposable
{
// process-wide monotonic id; deliberately not bound to any multiplexer so a single field-set can span
diff --git a/src/StackExchange.Redis/Availability/CircuitBreaker.cs b/src/StackExchange.Redis/Availability/CircuitBreaker.cs
index 2eb136922..ff232cf7b 100644
--- a/src/StackExchange.Redis/Availability/CircuitBreaker.cs
+++ b/src/StackExchange.Redis/Availability/CircuitBreaker.cs
@@ -12,7 +12,6 @@ namespace StackExchange.Redis.Availability;
///
/// Reports connection health by responding to observed success and failure conditions of processed messages.
///
-[Experimental(Experiments.GeoRedundantFailover, UrlFormat = Experiments.UrlFormat)]
public abstract class CircuitBreaker
{
internal const double DefaultFailureRateThreshold = 10;
@@ -42,7 +41,6 @@ public abstract class CircuitBreaker
///
/// Allows configuration of the default implementation.
///
- [Experimental(Experiments.GeoRedundantFailover, UrlFormat = Experiments.UrlFormat)]
public sealed class Builder
{
///
diff --git a/src/StackExchange.Redis/Availability/DatabaseExtensions.cs b/src/StackExchange.Redis/Availability/DatabaseExtensions.cs
index d25c9a8e0..e5f2475b7 100644
--- a/src/StackExchange.Redis/Availability/DatabaseExtensions.cs
+++ b/src/StackExchange.Redis/Availability/DatabaseExtensions.cs
@@ -32,7 +32,6 @@ public static class DatabaseExtensions
///
/// If is a batch, a
/// transaction, already retrying, or carries an asyncState.
- [Experimental(Experiments.GeoRedundantFailover, UrlFormat = Experiments.UrlFormat)]
public static IDatabaseAsync WithRetry(this IDatabaseAsync database, RetryPolicy? retryPolicy = null)
=> new RetryDatabase(database, retryPolicy ?? ResolveRetryPolicy(database));
diff --git a/src/StackExchange.Redis/Availability/FaultContext.cs b/src/StackExchange.Redis/Availability/FaultContext.cs
index d533d4506..c20b611af 100644
--- a/src/StackExchange.Redis/Availability/FaultContext.cs
+++ b/src/StackExchange.Redis/Availability/FaultContext.cs
@@ -7,7 +7,6 @@ namespace StackExchange.Redis.Availability;
///
/// Provides information about a circuit-breaker test.
///
-[Experimental(Experiments.GeoRedundantFailover, UrlFormat = Experiments.UrlFormat)]
public readonly struct FaultContext
{
private readonly Exception? _fault;
diff --git a/src/StackExchange.Redis/Availability/HealthCheck.cs b/src/StackExchange.Redis/Availability/HealthCheck.cs
index c7d562ab1..7b259d37d 100644
--- a/src/StackExchange.Redis/Availability/HealthCheck.cs
+++ b/src/StackExchange.Redis/Availability/HealthCheck.cs
@@ -12,7 +12,6 @@ namespace StackExchange.Redis.Availability;
/// a custom check. Note that how often checks run is a group-level concern, configured via
/// , not a property of the check itself.
///
-[Experimental(Experiments.GeoRedundantFailover, UrlFormat = Experiments.UrlFormat)]
public sealed partial class HealthCheck
{
internal const int DefaultProbeCount = 3;
@@ -100,7 +99,6 @@ public override string ToString() => IsEnabled
///
/// Allows configuration of a .
///
- [Experimental(Experiments.GeoRedundantFailover, UrlFormat = Experiments.UrlFormat)]
public sealed class Builder
{
///
diff --git a/src/StackExchange.Redis/Availability/HealthCheckContext.cs b/src/StackExchange.Redis/Availability/HealthCheckContext.cs
index 6d3fd5037..e9238ee53 100644
--- a/src/StackExchange.Redis/Availability/HealthCheckContext.cs
+++ b/src/StackExchange.Redis/Availability/HealthCheckContext.cs
@@ -11,7 +11,6 @@ namespace StackExchange.Redis.Availability;
/// This is passed by value rather than by in, because probe implementations are
/// typically async, and async methods cannot take by-ref parameters.
///
-[Experimental(Experiments.GeoRedundantFailover, UrlFormat = Experiments.UrlFormat)]
public readonly struct HealthCheckContext(IServer server, TimeSpan probeTimeout)
{
///
diff --git a/src/StackExchange.Redis/Availability/HealthCheckProbe.cs b/src/StackExchange.Redis/Availability/HealthCheckProbe.cs
index 7816d805d..6b449e034 100644
--- a/src/StackExchange.Redis/Availability/HealthCheckProbe.cs
+++ b/src/StackExchange.Redis/Availability/HealthCheckProbe.cs
@@ -8,7 +8,6 @@ namespace StackExchange.Redis.Availability;
///
/// Describes an operation to perform as part of a health check.
///
-[Experimental(Experiments.GeoRedundantFailover, UrlFormat = Experiments.UrlFormat)]
public abstract partial class HealthCheckProbe
{
///
@@ -37,7 +36,6 @@ public abstract partial class HealthCheckProbe
///
/// Describes a key-based (write) operation to perform as part of a health check.
///
-[Experimental(Experiments.GeoRedundantFailover, UrlFormat = Experiments.UrlFormat)]
public abstract class KeyWriteHealthCheckProbe : HealthCheckProbe
{
///
diff --git a/src/StackExchange.Redis/Availability/HealthCheckProbeContext.cs b/src/StackExchange.Redis/Availability/HealthCheckProbeContext.cs
index 39d19a75e..fc65797aa 100644
--- a/src/StackExchange.Redis/Availability/HealthCheckProbeContext.cs
+++ b/src/StackExchange.Redis/Availability/HealthCheckProbeContext.cs
@@ -7,7 +7,6 @@ namespace StackExchange.Redis.Availability;
///
/// Represents the context of a health check probe.
///
-[Experimental(Experiments.GeoRedundantFailover, UrlFormat = Experiments.UrlFormat)]
public readonly struct HealthCheckProbeContext(HealthCheckResult result, int success, int failure, int remaining, TimeSpan probeInterval)
{
///
diff --git a/src/StackExchange.Redis/Availability/HealthCheckProbePolicy.cs b/src/StackExchange.Redis/Availability/HealthCheckProbePolicy.cs
index cfbd824b7..b09848814 100644
--- a/src/StackExchange.Redis/Availability/HealthCheckProbePolicy.cs
+++ b/src/StackExchange.Redis/Availability/HealthCheckProbePolicy.cs
@@ -7,7 +7,6 @@ namespace StackExchange.Redis.Availability;
///
/// Attempt to evaluate the outcome of a series of health check operations.
///
-[Experimental(Experiments.GeoRedundantFailover, UrlFormat = Experiments.UrlFormat)]
public abstract class HealthCheckProbePolicy
{
///
diff --git a/src/StackExchange.Redis/Availability/HealthCheckResult.cs b/src/StackExchange.Redis/Availability/HealthCheckResult.cs
index 79528f8e5..7f8a0167e 100644
--- a/src/StackExchange.Redis/Availability/HealthCheckResult.cs
+++ b/src/StackExchange.Redis/Availability/HealthCheckResult.cs
@@ -6,7 +6,6 @@ namespace StackExchange.Redis.Availability;
///
/// Indicates the result of a health check.
///
-[Experimental(Experiments.GeoRedundantFailover, UrlFormat = Experiments.UrlFormat)]
public enum HealthCheckResult
{
///
diff --git a/src/StackExchange.Redis/Availability/MultiGroupMultiplexer.cs b/src/StackExchange.Redis/Availability/MultiGroupMultiplexer.cs
index a1c176c4a..f4bf36872 100644
--- a/src/StackExchange.Redis/Availability/MultiGroupMultiplexer.cs
+++ b/src/StackExchange.Redis/Availability/MultiGroupMultiplexer.cs
@@ -25,7 +25,6 @@ public partial class ConnectionMultiplexer
/// Additional options for configuring this group.
/// The to log to.
#pragma warning disable RS0026
- [Experimental(Experiments.GeoRedundantFailover, UrlFormat = Experiments.UrlFormat)]
public static Task ConnectGroupAsync(
ConnectionGroupMember[] members,
MultiGroupOptions? options = null,
@@ -45,7 +44,6 @@ public static Task ConnectGroupAsync(
/// An additional initial configuration to connect to.
/// Additional options for configuring this group.
/// The to log to.
- [Experimental(Experiments.GeoRedundantFailover, UrlFormat = Experiments.UrlFormat)]
#pragma warning disable RS0026
public static Task ConnectGroupAsync(
ConnectionGroupMember member0,
@@ -65,7 +63,6 @@ namespace Availability
///
/// A configured member of a .
///
- [Experimental(Experiments.GeoRedundantFailover, UrlFormat = Experiments.UrlFormat)]
#pragma warning disable RS0016, RS0026
public sealed partial class ConnectionGroupMember(ConfigurationOptions configuration, string name = "")
#pragma warning restore RS0016, RS0026
diff --git a/src/StackExchange.Redis/Availability/MultiGroupOptions.cs b/src/StackExchange.Redis/Availability/MultiGroupOptions.cs
index 1f6f3eccf..2840d996c 100644
--- a/src/StackExchange.Redis/Availability/MultiGroupOptions.cs
+++ b/src/StackExchange.Redis/Availability/MultiGroupOptions.cs
@@ -12,7 +12,6 @@ namespace StackExchange.Redis.Availability;
/// default, and can be overridden per-member by the matching property on
/// (where one exists); the effective value is "member override, else group default".
///
-[Experimental(Experiments.GeoRedundantFailover, UrlFormat = Experiments.UrlFormat)]
public sealed class MultiGroupOptions
{
internal static readonly TimeSpan DefaultHealthCheckInterval = TimeSpan.FromSeconds(5);
@@ -78,7 +77,6 @@ private MultiGroupOptions(
///
/// Allows configuration of .
///
- [Experimental(Experiments.GeoRedundantFailover, UrlFormat = Experiments.UrlFormat)]
public sealed class Builder
{
///
diff --git a/src/StackExchange.Redis/Availability/RetryPolicy.cs b/src/StackExchange.Redis/Availability/RetryPolicy.cs
index b6af57b6a..d42092835 100644
--- a/src/StackExchange.Redis/Availability/RetryPolicy.cs
+++ b/src/StackExchange.Redis/Availability/RetryPolicy.cs
@@ -12,7 +12,6 @@ namespace StackExchange.Redis.Availability;
/// Instances are immutable and safe to share; use to configure the standard policy, or
/// derive from this type and override to make the decision yourself.
///
-[Experimental(Experiments.GeoRedundantFailover, UrlFormat = Experiments.UrlFormat)]
public class RetryPolicy
{
internal const int DefaultMaxAttempts = 3;
@@ -207,7 +206,6 @@ private static Builder Validate(Builder builder)
///
/// Allows configuration of the standard implementation.
///
- [Experimental(Experiments.GeoRedundantFailover, UrlFormat = Experiments.UrlFormat)]
public sealed class Builder
{
///
diff --git a/src/StackExchange.Redis/Availability/RetryResult.cs b/src/StackExchange.Redis/Availability/RetryResult.cs
index 2b99ed31a..29d067023 100644
--- a/src/StackExchange.Redis/Availability/RetryResult.cs
+++ b/src/StackExchange.Redis/Availability/RetryResult.cs
@@ -8,7 +8,6 @@ namespace StackExchange.Redis.Availability;
/// Indicates the result of a query.
///
[Flags]
-[Experimental(Experiments.GeoRedundantFailover, UrlFormat = Experiments.UrlFormat)]
public enum RetryResult
{
///
diff --git a/src/StackExchange.Redis/ConfigurationOptions.cs b/src/StackExchange.Redis/ConfigurationOptions.cs
index f84ea29e1..27d1a6b65 100644
--- a/src/StackExchange.Redis/ConfigurationOptions.cs
+++ b/src/StackExchange.Redis/ConfigurationOptions.cs
@@ -1430,7 +1430,6 @@ public RedisProtocol? Protocol
/// , else this, else
/// .
///
- [Experimental(Experiments.GeoRedundantFailover, UrlFormat = Experiments.UrlFormat)]
public CircuitBreaker? CircuitBreaker { get; set; }
///
@@ -1440,7 +1439,6 @@ public RedisProtocol? Protocol
///
/// For a member of a connection group, applies instead.
///
- [Experimental(Experiments.GeoRedundantFailover, UrlFormat = Experiments.UrlFormat)]
public RetryPolicy? RetryPolicy { get; set; }
internal bool AllowSimulateConnectionFailure
diff --git a/src/StackExchange.Redis/Enums/CommandFlags.cs b/src/StackExchange.Redis/Enums/CommandFlags.cs
index cb5066f27..2cf34a8b4 100644
--- a/src/StackExchange.Redis/Enums/CommandFlags.cs
+++ b/src/StackExchange.Redis/Enums/CommandFlags.cs
@@ -128,53 +128,45 @@ to slide other things in later. Note that 0 is the implicit "not specified" valu
///
/// The command is always safe to retry, regardless of connection or server state.
///
- [Experimental(Experiments.GeoRedundantFailover, UrlFormat = Experiments.UrlFormat)]
CommandRetryAlways = 1 << 13, // pre-shift value 1
///
/// The command relates to the connection or to safe metadata (for example CLIENT SETNAME,
/// COMMAND, or CONFIG GET) and can be retried at the connection level.
///
- [Experimental(Experiments.GeoRedundantFailover, UrlFormat = Experiments.UrlFormat)]
CommandRetryConnection = 4 << 13, // pre-shift value 4
///
/// The command only reads data (for example GET) and can be safely retried.
///
- [Experimental(Experiments.GeoRedundantFailover, UrlFormat = Experiments.UrlFormat)]
CommandRetryReadOnly = 8 << 13, // pre-shift value 8
///
/// The command writes data conditionally (for example SETNX or SET ... IFEQ), so a retry
/// is checked against server state.
///
- [Experimental(Experiments.GeoRedundantFailover, UrlFormat = Experiments.UrlFormat)]
CommandRetryWriteChecked = 12 << 13, // pre-shift value 12
///
/// The command writes data such that a retry simply overwrites (last-writer-wins, for example SET).
///
- [Experimental(Experiments.GeoRedundantFailover, UrlFormat = Experiments.UrlFormat)]
CommandRetryWriteLastWins = 16 << 13, // pre-shift value 16
///
/// The command writes data cumulatively (for example INCR or LPOP), so a retry can
/// double-apply and change the result.
///
- [Experimental(Experiments.GeoRedundantFailover, UrlFormat = Experiments.UrlFormat)]
CommandRetryWriteAccumulating = 20 << 13, // pre-shift value 20
///
/// The command performs server administration (for example REPLICAOF or CONFIG SET); these
/// are commonly also endpoint-specific (the internal server-specific flag).
///
- [Experimental(Experiments.GeoRedundantFailover, UrlFormat = Experiments.UrlFormat)]
CommandRetryServerAdmin = 24 << 13, // pre-shift value 24
///
/// The command should never be retried.
///
- [Experimental(Experiments.GeoRedundantFailover, UrlFormat = Experiments.UrlFormat)]
CommandRetryNever = 31 << 13, // pre-shift value 31 (the full retry-category region)
// 262144 (bit 18): "server specific" - the command is tied to a specific endpoint and must never be
diff --git a/src/StackExchange.Redis/Enums/ConnectionFailureType.cs b/src/StackExchange.Redis/Enums/ConnectionFailureType.cs
index 9f0df5ba0..290602bc5 100644
--- a/src/StackExchange.Redis/Enums/ConnectionFailureType.cs
+++ b/src/StackExchange.Redis/Enums/ConnectionFailureType.cs
@@ -66,7 +66,6 @@ public enum ConnectionFailureType
///
/// The associated with this connection detected instability.
///
- [Experimental(Experiments.GeoRedundantFailover, UrlFormat = Experiments.UrlFormat)]
CircuitBreaker,
}
}
diff --git a/src/StackExchange.Redis/Interfaces/IConnectionGroup.cs b/src/StackExchange.Redis/Interfaces/IConnectionGroup.cs
index 0b0b53478..43e8535e4 100644
--- a/src/StackExchange.Redis/Interfaces/IConnectionGroup.cs
+++ b/src/StackExchange.Redis/Interfaces/IConnectionGroup.cs
@@ -13,7 +13,6 @@ namespace StackExchange.Redis.Availability;
/// servers, routing traffic based on the availability of the servers and their
/// relative .
///
-[Experimental(Experiments.GeoRedundantFailover, UrlFormat = Experiments.UrlFormat)]
public interface IConnectionGroup : IConnectionMultiplexer
{
///
@@ -61,7 +60,6 @@ public interface IConnectionGroup : IConnectionMultiplexer
///
/// Represents a change to a connection group.
///
-[Experimental(Experiments.GeoRedundantFailover, UrlFormat = Experiments.UrlFormat)]
public class GroupConnectionChangedEventArgs(GroupConnectionChangedEventArgs.ChangeType type, ConnectionGroupMember group, ConnectionGroupMember? previousGroup = null) : EventArgs, ICompletable
{
///
diff --git a/src/StackExchange.Redis/Interfaces/IDatabase.cs b/src/StackExchange.Redis/Interfaces/IDatabase.cs
index 94ce9a6d1..131abeb2a 100644
--- a/src/StackExchange.Redis/Interfaces/IDatabase.cs
+++ b/src/StackExchange.Redis/Interfaces/IDatabase.cs
@@ -807,7 +807,6 @@ public partial interface IDatabase : IRedis, IDatabaseAsync
/// Not supported inside a transaction (the connection-local PREPARE cannot be staged in MULTI/EXEC).
///
///
- [Experimental(Experiments.Server_8_10, UrlFormat = Experiments.UrlFormat)]
void HashImport(RedisKey key, HashImport fieldSet, ReadOnlyMemory values, CommandFlags flags = CommandFlags.None);
///
diff --git a/src/StackExchange.Redis/Interfaces/IDatabaseAsync.cs b/src/StackExchange.Redis/Interfaces/IDatabaseAsync.cs
index e2242095a..fe2d820d4 100644
--- a/src/StackExchange.Redis/Interfaces/IDatabaseAsync.cs
+++ b/src/StackExchange.Redis/Interfaces/IDatabaseAsync.cs
@@ -24,7 +24,6 @@ public partial interface IDatabaseAsync : IRedisAsync
/// Unlike , this offers no synchronous
/// execution, so it is usable from async-only databases such as one created via
/// .
- [Experimental(Experiments.GeoRedundantFailover, UrlFormat = Experiments.UrlFormat)]
ITransactionAsync CreateTransaction(object? asyncState = null);
///
@@ -194,7 +193,6 @@ public partial interface IDatabaseAsync : IRedisAsync
IAsyncEnumerable HashScanNoValuesAsync(RedisKey key, RedisValue pattern = default, int pageSize = RedisBase.CursorUtils.DefaultLibraryPageSize, long cursor = RedisBase.CursorUtils.Origin, int pageOffset = 0, CommandFlags flags = CommandFlags.None);
///
- [Experimental(Experiments.Server_8_10, UrlFormat = Experiments.UrlFormat)]
Task HashImportAsync(RedisKey key, HashImport fieldSet, ReadOnlyMemory values, CommandFlags flags = CommandFlags.None);
///
diff --git a/src/StackExchange.Redis/PublicAPI/PublicAPI.Shipped.txt b/src/StackExchange.Redis/PublicAPI/PublicAPI.Shipped.txt
index b4eb14449..0e5a16b82 100644
--- a/src/StackExchange.Redis/PublicAPI/PublicAPI.Shipped.txt
+++ b/src/StackExchange.Redis/PublicAPI/PublicAPI.Shipped.txt
@@ -52,203 +52,203 @@ StackExchange.Redis.ArrayOperation.Sum = 1 -> StackExchange.Redis.ArrayOperation
StackExchange.Redis.ArrayOperation.Unknown = 0 -> StackExchange.Redis.ArrayOperation
StackExchange.Redis.ArrayOperation.Used = 8 -> StackExchange.Redis.ArrayOperation
StackExchange.Redis.ArrayOperation.Xor = 6 -> StackExchange.Redis.ArrayOperation
-[SER007]StackExchange.Redis.Availability.CircuitBreaker
-[SER007]StackExchange.Redis.Availability.CircuitBreaker.Accumulator
-[SER007]StackExchange.Redis.Availability.CircuitBreaker.Accumulator.Accumulator() -> void
-[SER007]virtual StackExchange.Redis.Availability.CircuitBreaker.Accumulator.IsFailure(in StackExchange.Redis.Availability.FaultContext fault) -> bool
-[SER007]abstract StackExchange.Redis.Availability.CircuitBreaker.Accumulator.IsHealthy() -> bool
-[SER007]abstract StackExchange.Redis.Availability.CircuitBreaker.Accumulator.ObserveResult(in StackExchange.Redis.Availability.FaultContext fault) -> void
-[SER007]abstract StackExchange.Redis.Availability.CircuitBreaker.Accumulator.Reset() -> void
-[SER007]StackExchange.Redis.Availability.CircuitBreaker.Builder
-[SER007]StackExchange.Redis.Availability.CircuitBreaker.Builder.Builder() -> void
-[SER007]StackExchange.Redis.Availability.CircuitBreaker.Builder.Create() -> StackExchange.Redis.Availability.CircuitBreaker!
-[SER007]StackExchange.Redis.Availability.CircuitBreaker.Builder.FailureRateThreshold.get -> double
-[SER007]StackExchange.Redis.Availability.CircuitBreaker.Builder.FailureRateThreshold.set -> void
-[SER007]StackExchange.Redis.Availability.CircuitBreaker.Builder.MetricsWindowSize.get -> System.TimeSpan
-[SER007]StackExchange.Redis.Availability.CircuitBreaker.Builder.MetricsWindowSize.set -> void
-[SER007]StackExchange.Redis.Availability.CircuitBreaker.Builder.MinimumNumberOfFailures.get -> int
-[SER007]StackExchange.Redis.Availability.CircuitBreaker.Builder.MinimumNumberOfFailures.set -> void
-[SER007]static StackExchange.Redis.Availability.CircuitBreaker.Builder.implicit operator StackExchange.Redis.Availability.CircuitBreaker!(StackExchange.Redis.Availability.CircuitBreaker.Builder! builder) -> StackExchange.Redis.Availability.CircuitBreaker!
-[SER007]StackExchange.Redis.Availability.CircuitBreaker.CircuitBreaker() -> void
-[SER007]abstract StackExchange.Redis.Availability.CircuitBreaker.CreateAccumulator() -> StackExchange.Redis.Availability.CircuitBreaker.Accumulator!
-[SER007]static StackExchange.Redis.Availability.CircuitBreaker.Default.get -> StackExchange.Redis.Availability.CircuitBreaker!
-[SER007]static StackExchange.Redis.Availability.CircuitBreaker.None.get -> StackExchange.Redis.Availability.CircuitBreaker!
-[SER007]StackExchange.Redis.Availability.ConnectionGroupMember
-[SER007]StackExchange.Redis.Availability.ConnectionGroupMember.CircuitBreaker.get -> StackExchange.Redis.Availability.CircuitBreaker?
-[SER007]StackExchange.Redis.Availability.ConnectionGroupMember.CircuitBreaker.set -> void
-[SER007]StackExchange.Redis.Availability.ConnectionGroupMember.ConnectionGroupMember(StackExchange.Redis.ConfigurationOptions! configuration, string! name = "") -> void
-[SER007]StackExchange.Redis.Availability.ConnectionGroupMember.ConnectionGroupMember(string! configuration, string! name = "") -> void
-[SER007]StackExchange.Redis.Availability.ConnectionGroupMember.FailbackDelay.get -> System.TimeSpan?
-[SER007]StackExchange.Redis.Availability.ConnectionGroupMember.FailbackDelay.set -> void
-[SER007]StackExchange.Redis.Availability.ConnectionGroupMember.HealthCheck.get -> StackExchange.Redis.Availability.HealthCheck?
-[SER007]StackExchange.Redis.Availability.ConnectionGroupMember.HealthCheck.set -> void
-[SER007]StackExchange.Redis.Availability.ConnectionGroupMember.IsConnected.get -> bool
-[SER007]StackExchange.Redis.Availability.ConnectionGroupMember.IsUnhealthy.get -> bool
-[SER007]StackExchange.Redis.Availability.ConnectionGroupMember.Latency.get -> System.TimeSpan
-[SER007]StackExchange.Redis.Availability.ConnectionGroupMember.Name.get -> string!
-[SER007]StackExchange.Redis.Availability.ConnectionGroupMember.ResetIsUnhealthy() -> void
-[SER007]StackExchange.Redis.Availability.ConnectionGroupMember.SkipInitialHealthCheck.get -> bool
-[SER007]StackExchange.Redis.Availability.ConnectionGroupMember.SkipInitialHealthCheck.set -> void
-[SER007]override StackExchange.Redis.Availability.ConnectionGroupMember.ToString() -> string!
-[SER007]StackExchange.Redis.Availability.ConnectionGroupMember.Weight.get -> double
-[SER007]StackExchange.Redis.Availability.ConnectionGroupMember.Weight.set -> void
+StackExchange.Redis.Availability.CircuitBreaker
+StackExchange.Redis.Availability.CircuitBreaker.Accumulator
+StackExchange.Redis.Availability.CircuitBreaker.Accumulator.Accumulator() -> void
+virtual StackExchange.Redis.Availability.CircuitBreaker.Accumulator.IsFailure(in StackExchange.Redis.Availability.FaultContext fault) -> bool
+abstract StackExchange.Redis.Availability.CircuitBreaker.Accumulator.IsHealthy() -> bool
+abstract StackExchange.Redis.Availability.CircuitBreaker.Accumulator.ObserveResult(in StackExchange.Redis.Availability.FaultContext fault) -> void
+abstract StackExchange.Redis.Availability.CircuitBreaker.Accumulator.Reset() -> void
+StackExchange.Redis.Availability.CircuitBreaker.Builder
+StackExchange.Redis.Availability.CircuitBreaker.Builder.Builder() -> void
+StackExchange.Redis.Availability.CircuitBreaker.Builder.Create() -> StackExchange.Redis.Availability.CircuitBreaker!
+StackExchange.Redis.Availability.CircuitBreaker.Builder.FailureRateThreshold.get -> double
+StackExchange.Redis.Availability.CircuitBreaker.Builder.FailureRateThreshold.set -> void
+StackExchange.Redis.Availability.CircuitBreaker.Builder.MetricsWindowSize.get -> System.TimeSpan
+StackExchange.Redis.Availability.CircuitBreaker.Builder.MetricsWindowSize.set -> void
+StackExchange.Redis.Availability.CircuitBreaker.Builder.MinimumNumberOfFailures.get -> int
+StackExchange.Redis.Availability.CircuitBreaker.Builder.MinimumNumberOfFailures.set -> void
+static StackExchange.Redis.Availability.CircuitBreaker.Builder.implicit operator StackExchange.Redis.Availability.CircuitBreaker!(StackExchange.Redis.Availability.CircuitBreaker.Builder! builder) -> StackExchange.Redis.Availability.CircuitBreaker!
+StackExchange.Redis.Availability.CircuitBreaker.CircuitBreaker() -> void
+abstract StackExchange.Redis.Availability.CircuitBreaker.CreateAccumulator() -> StackExchange.Redis.Availability.CircuitBreaker.Accumulator!
+static StackExchange.Redis.Availability.CircuitBreaker.Default.get -> StackExchange.Redis.Availability.CircuitBreaker!
+static StackExchange.Redis.Availability.CircuitBreaker.None.get -> StackExchange.Redis.Availability.CircuitBreaker!
+StackExchange.Redis.Availability.ConnectionGroupMember
+StackExchange.Redis.Availability.ConnectionGroupMember.CircuitBreaker.get -> StackExchange.Redis.Availability.CircuitBreaker?
+StackExchange.Redis.Availability.ConnectionGroupMember.CircuitBreaker.set -> void
+StackExchange.Redis.Availability.ConnectionGroupMember.ConnectionGroupMember(StackExchange.Redis.ConfigurationOptions! configuration, string! name = "") -> void
+StackExchange.Redis.Availability.ConnectionGroupMember.ConnectionGroupMember(string! configuration, string! name = "") -> void
+StackExchange.Redis.Availability.ConnectionGroupMember.FailbackDelay.get -> System.TimeSpan?
+StackExchange.Redis.Availability.ConnectionGroupMember.FailbackDelay.set -> void
+StackExchange.Redis.Availability.ConnectionGroupMember.HealthCheck.get -> StackExchange.Redis.Availability.HealthCheck?
+StackExchange.Redis.Availability.ConnectionGroupMember.HealthCheck.set -> void
+StackExchange.Redis.Availability.ConnectionGroupMember.IsConnected.get -> bool
+StackExchange.Redis.Availability.ConnectionGroupMember.IsUnhealthy.get -> bool
+StackExchange.Redis.Availability.ConnectionGroupMember.Latency.get -> System.TimeSpan
+StackExchange.Redis.Availability.ConnectionGroupMember.Name.get -> string!
+StackExchange.Redis.Availability.ConnectionGroupMember.ResetIsUnhealthy() -> void
+StackExchange.Redis.Availability.ConnectionGroupMember.SkipInitialHealthCheck.get -> bool
+StackExchange.Redis.Availability.ConnectionGroupMember.SkipInitialHealthCheck.set -> void
+override StackExchange.Redis.Availability.ConnectionGroupMember.ToString() -> string!
+StackExchange.Redis.Availability.ConnectionGroupMember.Weight.get -> double
+StackExchange.Redis.Availability.ConnectionGroupMember.Weight.set -> void
StackExchange.Redis.Availability.DatabaseExtensions
-[SER007]static StackExchange.Redis.Availability.DatabaseExtensions.WithRetry(this StackExchange.Redis.IDatabaseAsync! database, StackExchange.Redis.Availability.RetryPolicy? retryPolicy = null) -> StackExchange.Redis.IDatabaseAsync!
-[SER007]StackExchange.Redis.Availability.FaultContext
-[SER007]StackExchange.Redis.Availability.FaultContext.ConnectionFailureType.get -> StackExchange.Redis.ConnectionFailureType
-[SER007]StackExchange.Redis.Availability.FaultContext.ErrorKind.get -> StackExchange.Redis.RedisErrorKind
-[SER007]StackExchange.Redis.Availability.FaultContext.Fault.get -> System.Exception?
-[SER007]StackExchange.Redis.Availability.FaultContext.FaultContext() -> void
-[SER007]StackExchange.Redis.Availability.FaultContext.FaultContext(System.Exception! fault) -> void
-[SER007]StackExchange.Redis.Availability.FaultContext.Flags.get -> StackExchange.Redis.CommandFlags
-[SER007]StackExchange.Redis.Availability.FaultContext.IsFault.get -> bool
-[SER007]StackExchange.Redis.Availability.FaultContext.NotApplied.get -> bool
-[SER007]StackExchange.Redis.Availability.GroupConnectionChangedEventArgs
-[SER007]StackExchange.Redis.Availability.GroupConnectionChangedEventArgs.ChangeType
-[SER007]StackExchange.Redis.Availability.GroupConnectionChangedEventArgs.ChangeType.ActiveChanged = 5 -> StackExchange.Redis.Availability.GroupConnectionChangedEventArgs.ChangeType
-[SER007]StackExchange.Redis.Availability.GroupConnectionChangedEventArgs.ChangeType.Added = 1 -> StackExchange.Redis.Availability.GroupConnectionChangedEventArgs.ChangeType
-[SER007]StackExchange.Redis.Availability.GroupConnectionChangedEventArgs.ChangeType.Disconnected = 3 -> StackExchange.Redis.Availability.GroupConnectionChangedEventArgs.ChangeType
-[SER007]StackExchange.Redis.Availability.GroupConnectionChangedEventArgs.ChangeType.Reconnected = 4 -> StackExchange.Redis.Availability.GroupConnectionChangedEventArgs.ChangeType
-[SER007]StackExchange.Redis.Availability.GroupConnectionChangedEventArgs.ChangeType.Removed = 2 -> StackExchange.Redis.Availability.GroupConnectionChangedEventArgs.ChangeType
-[SER007]StackExchange.Redis.Availability.GroupConnectionChangedEventArgs.ChangeType.Unknown = 0 -> StackExchange.Redis.Availability.GroupConnectionChangedEventArgs.ChangeType
-[SER007]StackExchange.Redis.Availability.GroupConnectionChangedEventArgs.Group.get -> StackExchange.Redis.Availability.ConnectionGroupMember!
-[SER007]StackExchange.Redis.Availability.GroupConnectionChangedEventArgs.GroupConnectionChangedEventArgs(StackExchange.Redis.Availability.GroupConnectionChangedEventArgs.ChangeType type, StackExchange.Redis.Availability.ConnectionGroupMember! group, StackExchange.Redis.Availability.ConnectionGroupMember? previousGroup = null) -> void
-[SER007]StackExchange.Redis.Availability.GroupConnectionChangedEventArgs.PreviousGroup.get -> StackExchange.Redis.Availability.ConnectionGroupMember?
-[SER007]StackExchange.Redis.Availability.GroupConnectionChangedEventArgs.Type.get -> StackExchange.Redis.Availability.GroupConnectionChangedEventArgs.ChangeType
-[SER007]StackExchange.Redis.Availability.HealthCheck
-[SER007]StackExchange.Redis.Availability.HealthCheck.Builder
-[SER007]StackExchange.Redis.Availability.HealthCheck.Builder.Builder() -> void
-[SER007]StackExchange.Redis.Availability.HealthCheck.Builder.Builder(StackExchange.Redis.Availability.HealthCheck! healthCheck) -> void
-[SER007]StackExchange.Redis.Availability.HealthCheck.Builder.Create() -> StackExchange.Redis.Availability.HealthCheck!
-[SER007]StackExchange.Redis.Availability.HealthCheck.Builder.Probe.get -> StackExchange.Redis.Availability.HealthCheckProbe!
-[SER007]StackExchange.Redis.Availability.HealthCheck.Builder.Probe.set -> void
-[SER007]StackExchange.Redis.Availability.HealthCheck.Builder.ProbeCount.get -> int
-[SER007]StackExchange.Redis.Availability.HealthCheck.Builder.ProbeCount.set -> void
-[SER007]StackExchange.Redis.Availability.HealthCheck.Builder.ProbeInterval.get -> System.TimeSpan
-[SER007]StackExchange.Redis.Availability.HealthCheck.Builder.ProbeInterval.set -> void
-[SER007]StackExchange.Redis.Availability.HealthCheck.Builder.ProbePolicy.get -> StackExchange.Redis.Availability.HealthCheckProbePolicy!
-[SER007]StackExchange.Redis.Availability.HealthCheck.Builder.ProbePolicy.set -> void
-[SER007]StackExchange.Redis.Availability.HealthCheck.Builder.ProbeTimeout.get -> System.TimeSpan
-[SER007]StackExchange.Redis.Availability.HealthCheck.Builder.ProbeTimeout.set -> void
-[SER007]static StackExchange.Redis.Availability.HealthCheck.Builder.implicit operator StackExchange.Redis.Availability.HealthCheck!(StackExchange.Redis.Availability.HealthCheck.Builder! builder) -> StackExchange.Redis.Availability.HealthCheck!
-[SER007]StackExchange.Redis.Availability.HealthCheck.CheckHealthAsync(StackExchange.Redis.IConnectionMultiplexer! multiplexer) -> System.Threading.Tasks.Task!
-[SER007]StackExchange.Redis.Availability.HealthCheck.CheckHealthAsync(StackExchange.Redis.IServer! server) -> System.Threading.Tasks.Task!
-[SER007]static StackExchange.Redis.Availability.HealthCheck.Default.get -> StackExchange.Redis.Availability.HealthCheck!
-[SER007]StackExchange.Redis.Availability.HealthCheck.IsEnabled.get -> bool
-[SER007]static StackExchange.Redis.Availability.HealthCheck.None.get -> StackExchange.Redis.Availability.HealthCheck!
-[SER007]StackExchange.Redis.Availability.HealthCheck.Probe.get -> StackExchange.Redis.Availability.HealthCheckProbe!
-[SER007]StackExchange.Redis.Availability.HealthCheck.ProbeCount.get -> int
-[SER007]StackExchange.Redis.Availability.HealthCheck.ProbeInterval.get -> System.TimeSpan
-[SER007]StackExchange.Redis.Availability.HealthCheck.ProbePolicy.get -> StackExchange.Redis.Availability.HealthCheckProbePolicy!
-[SER007]StackExchange.Redis.Availability.HealthCheck.ProbeTimeout.get -> System.TimeSpan
-[SER007]override StackExchange.Redis.Availability.HealthCheck.ToString() -> string!
-[SER007]StackExchange.Redis.Availability.HealthCheckContext
-[SER007]StackExchange.Redis.Availability.HealthCheckContext.HealthCheckContext() -> void
-[SER007]StackExchange.Redis.Availability.HealthCheckContext.HealthCheckContext(StackExchange.Redis.IServer! server, System.TimeSpan probeTimeout) -> void
-[SER007]StackExchange.Redis.Availability.HealthCheckContext.ProbeTimeout.get -> System.TimeSpan
-[SER007]StackExchange.Redis.Availability.HealthCheckContext.Server.get -> StackExchange.Redis.IServer!
-[SER007]override StackExchange.Redis.Availability.HealthCheckContext.ToString() -> string!
-[SER007]StackExchange.Redis.Availability.HealthCheckProbe
-[SER007]abstract StackExchange.Redis.Availability.HealthCheckProbe.CheckHealthAsync(StackExchange.Redis.Availability.HealthCheckContext context) -> System.Threading.Tasks.Task!
-[SER007]StackExchange.Redis.Availability.HealthCheckProbe.HealthCheckProbe() -> void
-[SER007]static StackExchange.Redis.Availability.HealthCheckProbe.HealthyTask.get -> System.Threading.Tasks.Task!
-[SER007]static StackExchange.Redis.Availability.HealthCheckProbe.InconclusiveTask.get -> System.Threading.Tasks.Task!
-[SER007]static StackExchange.Redis.Availability.HealthCheckProbe.IsConnected.get -> StackExchange.Redis.Availability.HealthCheckProbe!
-[SER007]static StackExchange.Redis.Availability.HealthCheckProbe.None.get -> StackExchange.Redis.Availability.HealthCheckProbe!
-[SER007]static StackExchange.Redis.Availability.HealthCheckProbe.Ping.get -> StackExchange.Redis.Availability.HealthCheckProbe!
-[SER007]static StackExchange.Redis.Availability.HealthCheckProbe.StringSet.get -> StackExchange.Redis.Availability.HealthCheckProbe!
-[SER007]static StackExchange.Redis.Availability.HealthCheckProbe.UnhealthyTask.get -> System.Threading.Tasks.Task!
-[SER007]StackExchange.Redis.Availability.HealthCheckProbeContext
-[SER007]StackExchange.Redis.Availability.HealthCheckProbeContext.Failure.get -> int
-[SER007]StackExchange.Redis.Availability.HealthCheckProbeContext.HealthCheckProbeContext() -> void
-[SER007]StackExchange.Redis.Availability.HealthCheckProbeContext.HealthCheckProbeContext(StackExchange.Redis.Availability.HealthCheckResult result, int success, int failure, int remaining, System.TimeSpan probeInterval) -> void
-[SER007]StackExchange.Redis.Availability.HealthCheckProbeContext.ProbeInterval.get -> System.TimeSpan
-[SER007]StackExchange.Redis.Availability.HealthCheckProbeContext.Remaining.get -> int
-[SER007]StackExchange.Redis.Availability.HealthCheckProbeContext.Result.get -> StackExchange.Redis.Availability.HealthCheckResult
-[SER007]StackExchange.Redis.Availability.HealthCheckProbeContext.Success.get -> int
-[SER007]override StackExchange.Redis.Availability.HealthCheckProbeContext.ToString() -> string!
-[SER007]StackExchange.Redis.Availability.HealthCheckProbePolicy
-[SER007]static StackExchange.Redis.Availability.HealthCheckProbePolicy.AllSuccess.get -> StackExchange.Redis.Availability.HealthCheckProbePolicy!
-[SER007]static StackExchange.Redis.Availability.HealthCheckProbePolicy.AnySuccess.get -> StackExchange.Redis.Availability.HealthCheckProbePolicy!
-[SER007]abstract StackExchange.Redis.Availability.HealthCheckProbePolicy.Evaluate(in StackExchange.Redis.Availability.HealthCheckProbeContext context) -> StackExchange.Redis.Availability.HealthCheckResult
-[SER007]StackExchange.Redis.Availability.HealthCheckProbePolicy.HealthCheckProbePolicy() -> void
-[SER007]static StackExchange.Redis.Availability.HealthCheckProbePolicy.MajoritySuccess.get -> StackExchange.Redis.Availability.HealthCheckProbePolicy!
-[SER007]StackExchange.Redis.Availability.HealthCheckResult
-[SER007]StackExchange.Redis.Availability.HealthCheckResult.Healthy = 1 -> StackExchange.Redis.Availability.HealthCheckResult
-[SER007]StackExchange.Redis.Availability.HealthCheckResult.Inconclusive = 0 -> StackExchange.Redis.Availability.HealthCheckResult
-[SER007]StackExchange.Redis.Availability.HealthCheckResult.Unhealthy = 2 -> StackExchange.Redis.Availability.HealthCheckResult
-[SER007]StackExchange.Redis.Availability.IConnectionGroup
-[SER007]StackExchange.Redis.Availability.IConnectionGroup.ActiveMember.get -> StackExchange.Redis.Availability.ConnectionGroupMember?
-[SER007]StackExchange.Redis.Availability.IConnectionGroup.AddAsync(StackExchange.Redis.Availability.ConnectionGroupMember! member, System.IO.TextWriter? log = null) -> System.Threading.Tasks.Task!
-[SER007]StackExchange.Redis.Availability.IConnectionGroup.ConnectionChanged -> System.EventHandler?
-[SER007]StackExchange.Redis.Availability.IConnectionGroup.GetMembers() -> System.ReadOnlySpan
-[SER007]StackExchange.Redis.Availability.IConnectionGroup.Options.get -> StackExchange.Redis.Availability.MultiGroupOptions!
-[SER007]StackExchange.Redis.Availability.IConnectionGroup.Remove(StackExchange.Redis.Availability.ConnectionGroupMember! member) -> bool
-[SER007]StackExchange.Redis.Availability.IConnectionGroup.TryFailoverTo(StackExchange.Redis.Availability.ConnectionGroupMember? member) -> bool
-[SER007]StackExchange.Redis.Availability.KeyWriteHealthCheckProbe
-[SER007]override sealed StackExchange.Redis.Availability.KeyWriteHealthCheckProbe.CheckHealthAsync(StackExchange.Redis.Availability.HealthCheckContext context) -> System.Threading.Tasks.Task!
-[SER007]abstract StackExchange.Redis.Availability.KeyWriteHealthCheckProbe.CheckHealthAsync(StackExchange.Redis.Availability.HealthCheckContext context, StackExchange.Redis.IDatabaseAsync! database, StackExchange.Redis.RedisKey key) -> System.Threading.Tasks.Task!
-[SER007]StackExchange.Redis.Availability.KeyWriteHealthCheckProbe.KeyWriteHealthCheckProbe() -> void
-[SER007]StackExchange.Redis.Availability.MultiGroupOptions
-[SER007]StackExchange.Redis.Availability.MultiGroupOptions.Builder
-[SER007]StackExchange.Redis.Availability.MultiGroupOptions.Builder.Builder() -> void
-[SER007]StackExchange.Redis.Availability.MultiGroupOptions.Builder.Builder(StackExchange.Redis.Availability.MultiGroupOptions! options) -> void
-[SER007]StackExchange.Redis.Availability.MultiGroupOptions.Builder.CircuitBreaker.get -> StackExchange.Redis.Availability.CircuitBreaker!
-[SER007]StackExchange.Redis.Availability.MultiGroupOptions.Builder.CircuitBreaker.set -> void
-[SER007]StackExchange.Redis.Availability.MultiGroupOptions.Builder.Create() -> StackExchange.Redis.Availability.MultiGroupOptions!
-[SER007]StackExchange.Redis.Availability.MultiGroupOptions.Builder.FailbackDelay.get -> System.TimeSpan
-[SER007]StackExchange.Redis.Availability.MultiGroupOptions.Builder.FailbackDelay.set -> void
-[SER007]StackExchange.Redis.Availability.MultiGroupOptions.Builder.HealthCheck.get -> StackExchange.Redis.Availability.HealthCheck!
-[SER007]StackExchange.Redis.Availability.MultiGroupOptions.Builder.HealthCheck.set -> void
-[SER007]StackExchange.Redis.Availability.MultiGroupOptions.Builder.HealthCheckInterval.get -> System.TimeSpan
-[SER007]StackExchange.Redis.Availability.MultiGroupOptions.Builder.HealthCheckInterval.set -> void
-[SER007]StackExchange.Redis.Availability.MultiGroupOptions.Builder.RetryPolicy.get -> StackExchange.Redis.Availability.RetryPolicy!
-[SER007]StackExchange.Redis.Availability.MultiGroupOptions.Builder.RetryPolicy.set -> void
-[SER007]static StackExchange.Redis.Availability.MultiGroupOptions.Builder.implicit operator StackExchange.Redis.Availability.MultiGroupOptions!(StackExchange.Redis.Availability.MultiGroupOptions.Builder! builder) -> StackExchange.Redis.Availability.MultiGroupOptions!
-[SER007]StackExchange.Redis.Availability.MultiGroupOptions.CircuitBreaker.get -> StackExchange.Redis.Availability.CircuitBreaker!
-[SER007]static StackExchange.Redis.Availability.MultiGroupOptions.Default.get -> StackExchange.Redis.Availability.MultiGroupOptions!
-[SER007]StackExchange.Redis.Availability.MultiGroupOptions.FailbackDelay.get -> System.TimeSpan
-[SER007]StackExchange.Redis.Availability.MultiGroupOptions.HealthCheck.get -> StackExchange.Redis.Availability.HealthCheck!
-[SER007]StackExchange.Redis.Availability.MultiGroupOptions.HealthCheckInterval.get -> System.TimeSpan
-[SER007]StackExchange.Redis.Availability.MultiGroupOptions.RetryPolicy.get -> StackExchange.Redis.Availability.RetryPolicy!
-[SER007]override StackExchange.Redis.Availability.MultiGroupOptions.ToString() -> string!
-[SER007]StackExchange.Redis.Availability.RetryPolicy
-[SER007]StackExchange.Redis.Availability.RetryPolicy.Builder
-[SER007]StackExchange.Redis.Availability.RetryPolicy.Builder.Builder() -> void
-[SER007]StackExchange.Redis.Availability.RetryPolicy.Builder.Builder(StackExchange.Redis.Availability.RetryPolicy! policy) -> void
-[SER007]StackExchange.Redis.Availability.RetryPolicy.Builder.Create() -> StackExchange.Redis.Availability.RetryPolicy!
-[SER007]StackExchange.Redis.Availability.RetryPolicy.Builder.FailoverDelay.get -> System.TimeSpan
-[SER007]StackExchange.Redis.Availability.RetryPolicy.Builder.FailoverDelay.set -> void
-[SER007]StackExchange.Redis.Availability.RetryPolicy.Builder.JitterMax.get -> System.TimeSpan
-[SER007]StackExchange.Redis.Availability.RetryPolicy.Builder.JitterMax.set -> void
-[SER007]StackExchange.Redis.Availability.RetryPolicy.Builder.MaxAttempts.get -> int
-[SER007]StackExchange.Redis.Availability.RetryPolicy.Builder.MaxAttempts.set -> void
-[SER007]StackExchange.Redis.Availability.RetryPolicy.Builder.MaxAttemptsBeforeFailover.get -> int
-[SER007]StackExchange.Redis.Availability.RetryPolicy.Builder.MaxAttemptsBeforeFailover.set -> void
-[SER007]StackExchange.Redis.Availability.RetryPolicy.Builder.MaxAttemptsOnWatchConflict.get -> int
-[SER007]StackExchange.Redis.Availability.RetryPolicy.Builder.MaxAttemptsOnWatchConflict.set -> void
-[SER007]StackExchange.Redis.Availability.RetryPolicy.Builder.MaxCommandRetryCategory.get -> StackExchange.Redis.CommandFlags
-[SER007]StackExchange.Redis.Availability.RetryPolicy.Builder.MaxCommandRetryCategory.set -> void
-[SER007]StackExchange.Redis.Availability.RetryPolicy.Builder.RetryDelay.get -> System.TimeSpan
-[SER007]StackExchange.Redis.Availability.RetryPolicy.Builder.RetryDelay.set -> void
-[SER007]static StackExchange.Redis.Availability.RetryPolicy.Builder.implicit operator StackExchange.Redis.Availability.RetryPolicy!(StackExchange.Redis.Availability.RetryPolicy.Builder! builder) -> StackExchange.Redis.Availability.RetryPolicy!
-[SER007]virtual StackExchange.Redis.Availability.RetryPolicy.CanRetry(in StackExchange.Redis.Availability.FaultContext fault) -> StackExchange.Redis.Availability.RetryResult
-[SER007]static StackExchange.Redis.Availability.RetryPolicy.Default.get -> StackExchange.Redis.Availability.RetryPolicy!
-[SER007]StackExchange.Redis.Availability.RetryPolicy.FailoverDelay.get -> System.TimeSpan
-[SER007]StackExchange.Redis.Availability.RetryPolicy.JitterMax.get -> System.TimeSpan
-[SER007]StackExchange.Redis.Availability.RetryPolicy.MaxAttempts.get -> int
-[SER007]StackExchange.Redis.Availability.RetryPolicy.MaxAttemptsBeforeFailover.get -> int
-[SER007]StackExchange.Redis.Availability.RetryPolicy.MaxAttemptsOnWatchConflict.get -> int
-[SER007]StackExchange.Redis.Availability.RetryPolicy.MaxCommandRetryCategory.get -> StackExchange.Redis.CommandFlags
-[SER007]static StackExchange.Redis.Availability.RetryPolicy.None.get -> StackExchange.Redis.Availability.RetryPolicy!
-[SER007]StackExchange.Redis.Availability.RetryPolicy.RetryDelay.get -> System.TimeSpan
-[SER007]StackExchange.Redis.Availability.RetryPolicy.RetryPolicy() -> void
-[SER007]StackExchange.Redis.Availability.RetryPolicy.RetryPolicy(StackExchange.Redis.Availability.RetryPolicy.Builder! builder) -> void
-[SER007]override StackExchange.Redis.Availability.RetryPolicy.ToString() -> string!
-[SER007]StackExchange.Redis.Availability.RetryResult
-[SER007]StackExchange.Redis.Availability.RetryResult.FailoverServer = 2 -> StackExchange.Redis.Availability.RetryResult
-[SER007]StackExchange.Redis.Availability.RetryResult.None = 0 -> StackExchange.Redis.Availability.RetryResult
-[SER007]StackExchange.Redis.Availability.RetryResult.SameServer = 1 -> StackExchange.Redis.Availability.RetryResult
+static StackExchange.Redis.Availability.DatabaseExtensions.WithRetry(this StackExchange.Redis.IDatabaseAsync! database, StackExchange.Redis.Availability.RetryPolicy? retryPolicy = null) -> StackExchange.Redis.IDatabaseAsync!
+StackExchange.Redis.Availability.FaultContext
+StackExchange.Redis.Availability.FaultContext.ConnectionFailureType.get -> StackExchange.Redis.ConnectionFailureType
+StackExchange.Redis.Availability.FaultContext.ErrorKind.get -> StackExchange.Redis.RedisErrorKind
+StackExchange.Redis.Availability.FaultContext.Fault.get -> System.Exception?
+StackExchange.Redis.Availability.FaultContext.FaultContext() -> void
+StackExchange.Redis.Availability.FaultContext.FaultContext(System.Exception! fault) -> void
+StackExchange.Redis.Availability.FaultContext.Flags.get -> StackExchange.Redis.CommandFlags
+StackExchange.Redis.Availability.FaultContext.IsFault.get -> bool
+StackExchange.Redis.Availability.FaultContext.NotApplied.get -> bool
+StackExchange.Redis.Availability.GroupConnectionChangedEventArgs
+StackExchange.Redis.Availability.GroupConnectionChangedEventArgs.ChangeType
+StackExchange.Redis.Availability.GroupConnectionChangedEventArgs.ChangeType.ActiveChanged = 5 -> StackExchange.Redis.Availability.GroupConnectionChangedEventArgs.ChangeType
+StackExchange.Redis.Availability.GroupConnectionChangedEventArgs.ChangeType.Added = 1 -> StackExchange.Redis.Availability.GroupConnectionChangedEventArgs.ChangeType
+StackExchange.Redis.Availability.GroupConnectionChangedEventArgs.ChangeType.Disconnected = 3 -> StackExchange.Redis.Availability.GroupConnectionChangedEventArgs.ChangeType
+StackExchange.Redis.Availability.GroupConnectionChangedEventArgs.ChangeType.Reconnected = 4 -> StackExchange.Redis.Availability.GroupConnectionChangedEventArgs.ChangeType
+StackExchange.Redis.Availability.GroupConnectionChangedEventArgs.ChangeType.Removed = 2 -> StackExchange.Redis.Availability.GroupConnectionChangedEventArgs.ChangeType
+StackExchange.Redis.Availability.GroupConnectionChangedEventArgs.ChangeType.Unknown = 0 -> StackExchange.Redis.Availability.GroupConnectionChangedEventArgs.ChangeType
+StackExchange.Redis.Availability.GroupConnectionChangedEventArgs.Group.get -> StackExchange.Redis.Availability.ConnectionGroupMember!
+StackExchange.Redis.Availability.GroupConnectionChangedEventArgs.GroupConnectionChangedEventArgs(StackExchange.Redis.Availability.GroupConnectionChangedEventArgs.ChangeType type, StackExchange.Redis.Availability.ConnectionGroupMember! group, StackExchange.Redis.Availability.ConnectionGroupMember? previousGroup = null) -> void
+StackExchange.Redis.Availability.GroupConnectionChangedEventArgs.PreviousGroup.get -> StackExchange.Redis.Availability.ConnectionGroupMember?
+StackExchange.Redis.Availability.GroupConnectionChangedEventArgs.Type.get -> StackExchange.Redis.Availability.GroupConnectionChangedEventArgs.ChangeType
+StackExchange.Redis.Availability.HealthCheck
+StackExchange.Redis.Availability.HealthCheck.Builder
+StackExchange.Redis.Availability.HealthCheck.Builder.Builder() -> void
+StackExchange.Redis.Availability.HealthCheck.Builder.Builder(StackExchange.Redis.Availability.HealthCheck! healthCheck) -> void
+StackExchange.Redis.Availability.HealthCheck.Builder.Create() -> StackExchange.Redis.Availability.HealthCheck!
+StackExchange.Redis.Availability.HealthCheck.Builder.Probe.get -> StackExchange.Redis.Availability.HealthCheckProbe!
+StackExchange.Redis.Availability.HealthCheck.Builder.Probe.set -> void
+StackExchange.Redis.Availability.HealthCheck.Builder.ProbeCount.get -> int
+StackExchange.Redis.Availability.HealthCheck.Builder.ProbeCount.set -> void
+StackExchange.Redis.Availability.HealthCheck.Builder.ProbeInterval.get -> System.TimeSpan
+StackExchange.Redis.Availability.HealthCheck.Builder.ProbeInterval.set -> void
+StackExchange.Redis.Availability.HealthCheck.Builder.ProbePolicy.get -> StackExchange.Redis.Availability.HealthCheckProbePolicy!
+StackExchange.Redis.Availability.HealthCheck.Builder.ProbePolicy.set -> void
+StackExchange.Redis.Availability.HealthCheck.Builder.ProbeTimeout.get -> System.TimeSpan
+StackExchange.Redis.Availability.HealthCheck.Builder.ProbeTimeout.set -> void
+static StackExchange.Redis.Availability.HealthCheck.Builder.implicit operator StackExchange.Redis.Availability.HealthCheck!(StackExchange.Redis.Availability.HealthCheck.Builder! builder) -> StackExchange.Redis.Availability.HealthCheck!
+StackExchange.Redis.Availability.HealthCheck.CheckHealthAsync(StackExchange.Redis.IConnectionMultiplexer! multiplexer) -> System.Threading.Tasks.Task!
+StackExchange.Redis.Availability.HealthCheck.CheckHealthAsync(StackExchange.Redis.IServer! server) -> System.Threading.Tasks.Task!
+static StackExchange.Redis.Availability.HealthCheck.Default.get -> StackExchange.Redis.Availability.HealthCheck!
+StackExchange.Redis.Availability.HealthCheck.IsEnabled.get -> bool
+static StackExchange.Redis.Availability.HealthCheck.None.get -> StackExchange.Redis.Availability.HealthCheck!
+StackExchange.Redis.Availability.HealthCheck.Probe.get -> StackExchange.Redis.Availability.HealthCheckProbe!
+StackExchange.Redis.Availability.HealthCheck.ProbeCount.get -> int
+StackExchange.Redis.Availability.HealthCheck.ProbeInterval.get -> System.TimeSpan
+StackExchange.Redis.Availability.HealthCheck.ProbePolicy.get -> StackExchange.Redis.Availability.HealthCheckProbePolicy!
+StackExchange.Redis.Availability.HealthCheck.ProbeTimeout.get -> System.TimeSpan
+override StackExchange.Redis.Availability.HealthCheck.ToString() -> string!
+StackExchange.Redis.Availability.HealthCheckContext
+StackExchange.Redis.Availability.HealthCheckContext.HealthCheckContext() -> void
+StackExchange.Redis.Availability.HealthCheckContext.HealthCheckContext(StackExchange.Redis.IServer! server, System.TimeSpan probeTimeout) -> void
+StackExchange.Redis.Availability.HealthCheckContext.ProbeTimeout.get -> System.TimeSpan
+StackExchange.Redis.Availability.HealthCheckContext.Server.get -> StackExchange.Redis.IServer!
+override StackExchange.Redis.Availability.HealthCheckContext.ToString() -> string!
+StackExchange.Redis.Availability.HealthCheckProbe
+abstract StackExchange.Redis.Availability.HealthCheckProbe.CheckHealthAsync(StackExchange.Redis.Availability.HealthCheckContext context) -> System.Threading.Tasks.Task!
+StackExchange.Redis.Availability.HealthCheckProbe.HealthCheckProbe() -> void
+static StackExchange.Redis.Availability.HealthCheckProbe.HealthyTask.get -> System.Threading.Tasks.Task!
+static StackExchange.Redis.Availability.HealthCheckProbe.InconclusiveTask.get -> System.Threading.Tasks.Task!
+static StackExchange.Redis.Availability.HealthCheckProbe.IsConnected.get -> StackExchange.Redis.Availability.HealthCheckProbe!
+static StackExchange.Redis.Availability.HealthCheckProbe.None.get -> StackExchange.Redis.Availability.HealthCheckProbe!
+static StackExchange.Redis.Availability.HealthCheckProbe.Ping.get -> StackExchange.Redis.Availability.HealthCheckProbe!
+static StackExchange.Redis.Availability.HealthCheckProbe.StringSet.get -> StackExchange.Redis.Availability.HealthCheckProbe!
+static StackExchange.Redis.Availability.HealthCheckProbe.UnhealthyTask.get -> System.Threading.Tasks.Task!
+StackExchange.Redis.Availability.HealthCheckProbeContext
+StackExchange.Redis.Availability.HealthCheckProbeContext.Failure.get -> int
+StackExchange.Redis.Availability.HealthCheckProbeContext.HealthCheckProbeContext() -> void
+StackExchange.Redis.Availability.HealthCheckProbeContext.HealthCheckProbeContext(StackExchange.Redis.Availability.HealthCheckResult result, int success, int failure, int remaining, System.TimeSpan probeInterval) -> void
+StackExchange.Redis.Availability.HealthCheckProbeContext.ProbeInterval.get -> System.TimeSpan
+StackExchange.Redis.Availability.HealthCheckProbeContext.Remaining.get -> int
+StackExchange.Redis.Availability.HealthCheckProbeContext.Result.get -> StackExchange.Redis.Availability.HealthCheckResult
+StackExchange.Redis.Availability.HealthCheckProbeContext.Success.get -> int
+override StackExchange.Redis.Availability.HealthCheckProbeContext.ToString() -> string!
+StackExchange.Redis.Availability.HealthCheckProbePolicy
+static StackExchange.Redis.Availability.HealthCheckProbePolicy.AllSuccess.get -> StackExchange.Redis.Availability.HealthCheckProbePolicy!
+static StackExchange.Redis.Availability.HealthCheckProbePolicy.AnySuccess.get -> StackExchange.Redis.Availability.HealthCheckProbePolicy!
+abstract StackExchange.Redis.Availability.HealthCheckProbePolicy.Evaluate(in StackExchange.Redis.Availability.HealthCheckProbeContext context) -> StackExchange.Redis.Availability.HealthCheckResult
+StackExchange.Redis.Availability.HealthCheckProbePolicy.HealthCheckProbePolicy() -> void
+static StackExchange.Redis.Availability.HealthCheckProbePolicy.MajoritySuccess.get -> StackExchange.Redis.Availability.HealthCheckProbePolicy!
+StackExchange.Redis.Availability.HealthCheckResult
+StackExchange.Redis.Availability.HealthCheckResult.Healthy = 1 -> StackExchange.Redis.Availability.HealthCheckResult
+StackExchange.Redis.Availability.HealthCheckResult.Inconclusive = 0 -> StackExchange.Redis.Availability.HealthCheckResult
+StackExchange.Redis.Availability.HealthCheckResult.Unhealthy = 2 -> StackExchange.Redis.Availability.HealthCheckResult
+StackExchange.Redis.Availability.IConnectionGroup
+StackExchange.Redis.Availability.IConnectionGroup.ActiveMember.get -> StackExchange.Redis.Availability.ConnectionGroupMember?
+StackExchange.Redis.Availability.IConnectionGroup.AddAsync(StackExchange.Redis.Availability.ConnectionGroupMember! member, System.IO.TextWriter? log = null) -> System.Threading.Tasks.Task!
+StackExchange.Redis.Availability.IConnectionGroup.ConnectionChanged -> System.EventHandler?
+StackExchange.Redis.Availability.IConnectionGroup.GetMembers() -> System.ReadOnlySpan
+StackExchange.Redis.Availability.IConnectionGroup.Options.get -> StackExchange.Redis.Availability.MultiGroupOptions!
+StackExchange.Redis.Availability.IConnectionGroup.Remove(StackExchange.Redis.Availability.ConnectionGroupMember! member) -> bool
+StackExchange.Redis.Availability.IConnectionGroup.TryFailoverTo(StackExchange.Redis.Availability.ConnectionGroupMember? member) -> bool
+StackExchange.Redis.Availability.KeyWriteHealthCheckProbe
+override sealed StackExchange.Redis.Availability.KeyWriteHealthCheckProbe.CheckHealthAsync(StackExchange.Redis.Availability.HealthCheckContext context) -> System.Threading.Tasks.Task!
+abstract StackExchange.Redis.Availability.KeyWriteHealthCheckProbe.CheckHealthAsync(StackExchange.Redis.Availability.HealthCheckContext context, StackExchange.Redis.IDatabaseAsync! database, StackExchange.Redis.RedisKey key) -> System.Threading.Tasks.Task!
+StackExchange.Redis.Availability.KeyWriteHealthCheckProbe.KeyWriteHealthCheckProbe() -> void
+StackExchange.Redis.Availability.MultiGroupOptions
+StackExchange.Redis.Availability.MultiGroupOptions.Builder
+StackExchange.Redis.Availability.MultiGroupOptions.Builder.Builder() -> void
+StackExchange.Redis.Availability.MultiGroupOptions.Builder.Builder(StackExchange.Redis.Availability.MultiGroupOptions! options) -> void
+StackExchange.Redis.Availability.MultiGroupOptions.Builder.CircuitBreaker.get -> StackExchange.Redis.Availability.CircuitBreaker!
+StackExchange.Redis.Availability.MultiGroupOptions.Builder.CircuitBreaker.set -> void
+StackExchange.Redis.Availability.MultiGroupOptions.Builder.Create() -> StackExchange.Redis.Availability.MultiGroupOptions!
+StackExchange.Redis.Availability.MultiGroupOptions.Builder.FailbackDelay.get -> System.TimeSpan
+StackExchange.Redis.Availability.MultiGroupOptions.Builder.FailbackDelay.set -> void
+StackExchange.Redis.Availability.MultiGroupOptions.Builder.HealthCheck.get -> StackExchange.Redis.Availability.HealthCheck!
+StackExchange.Redis.Availability.MultiGroupOptions.Builder.HealthCheck.set -> void
+StackExchange.Redis.Availability.MultiGroupOptions.Builder.HealthCheckInterval.get -> System.TimeSpan
+StackExchange.Redis.Availability.MultiGroupOptions.Builder.HealthCheckInterval.set -> void
+StackExchange.Redis.Availability.MultiGroupOptions.Builder.RetryPolicy.get -> StackExchange.Redis.Availability.RetryPolicy!
+StackExchange.Redis.Availability.MultiGroupOptions.Builder.RetryPolicy.set -> void
+static StackExchange.Redis.Availability.MultiGroupOptions.Builder.implicit operator StackExchange.Redis.Availability.MultiGroupOptions!(StackExchange.Redis.Availability.MultiGroupOptions.Builder! builder) -> StackExchange.Redis.Availability.MultiGroupOptions!
+StackExchange.Redis.Availability.MultiGroupOptions.CircuitBreaker.get -> StackExchange.Redis.Availability.CircuitBreaker!
+static StackExchange.Redis.Availability.MultiGroupOptions.Default.get -> StackExchange.Redis.Availability.MultiGroupOptions!
+StackExchange.Redis.Availability.MultiGroupOptions.FailbackDelay.get -> System.TimeSpan
+StackExchange.Redis.Availability.MultiGroupOptions.HealthCheck.get -> StackExchange.Redis.Availability.HealthCheck!
+StackExchange.Redis.Availability.MultiGroupOptions.HealthCheckInterval.get -> System.TimeSpan
+StackExchange.Redis.Availability.MultiGroupOptions.RetryPolicy.get -> StackExchange.Redis.Availability.RetryPolicy!
+override StackExchange.Redis.Availability.MultiGroupOptions.ToString() -> string!
+StackExchange.Redis.Availability.RetryPolicy
+StackExchange.Redis.Availability.RetryPolicy.Builder
+StackExchange.Redis.Availability.RetryPolicy.Builder.Builder() -> void
+StackExchange.Redis.Availability.RetryPolicy.Builder.Builder(StackExchange.Redis.Availability.RetryPolicy! policy) -> void
+StackExchange.Redis.Availability.RetryPolicy.Builder.Create() -> StackExchange.Redis.Availability.RetryPolicy!
+StackExchange.Redis.Availability.RetryPolicy.Builder.FailoverDelay.get -> System.TimeSpan
+StackExchange.Redis.Availability.RetryPolicy.Builder.FailoverDelay.set -> void
+StackExchange.Redis.Availability.RetryPolicy.Builder.JitterMax.get -> System.TimeSpan
+StackExchange.Redis.Availability.RetryPolicy.Builder.JitterMax.set -> void
+StackExchange.Redis.Availability.RetryPolicy.Builder.MaxAttempts.get -> int
+StackExchange.Redis.Availability.RetryPolicy.Builder.MaxAttempts.set -> void
+StackExchange.Redis.Availability.RetryPolicy.Builder.MaxAttemptsBeforeFailover.get -> int
+StackExchange.Redis.Availability.RetryPolicy.Builder.MaxAttemptsBeforeFailover.set -> void
+StackExchange.Redis.Availability.RetryPolicy.Builder.MaxAttemptsOnWatchConflict.get -> int
+StackExchange.Redis.Availability.RetryPolicy.Builder.MaxAttemptsOnWatchConflict.set -> void
+StackExchange.Redis.Availability.RetryPolicy.Builder.MaxCommandRetryCategory.get -> StackExchange.Redis.CommandFlags
+StackExchange.Redis.Availability.RetryPolicy.Builder.MaxCommandRetryCategory.set -> void
+StackExchange.Redis.Availability.RetryPolicy.Builder.RetryDelay.get -> System.TimeSpan
+StackExchange.Redis.Availability.RetryPolicy.Builder.RetryDelay.set -> void
+static StackExchange.Redis.Availability.RetryPolicy.Builder.implicit operator StackExchange.Redis.Availability.RetryPolicy!(StackExchange.Redis.Availability.RetryPolicy.Builder! builder) -> StackExchange.Redis.Availability.RetryPolicy!
+virtual StackExchange.Redis.Availability.RetryPolicy.CanRetry(in StackExchange.Redis.Availability.FaultContext fault) -> StackExchange.Redis.Availability.RetryResult
+static StackExchange.Redis.Availability.RetryPolicy.Default.get -> StackExchange.Redis.Availability.RetryPolicy!
+StackExchange.Redis.Availability.RetryPolicy.FailoverDelay.get -> System.TimeSpan
+StackExchange.Redis.Availability.RetryPolicy.JitterMax.get -> System.TimeSpan
+StackExchange.Redis.Availability.RetryPolicy.MaxAttempts.get -> int
+StackExchange.Redis.Availability.RetryPolicy.MaxAttemptsBeforeFailover.get -> int
+StackExchange.Redis.Availability.RetryPolicy.MaxAttemptsOnWatchConflict.get -> int
+StackExchange.Redis.Availability.RetryPolicy.MaxCommandRetryCategory.get -> StackExchange.Redis.CommandFlags
+static StackExchange.Redis.Availability.RetryPolicy.None.get -> StackExchange.Redis.Availability.RetryPolicy!
+StackExchange.Redis.Availability.RetryPolicy.RetryDelay.get -> System.TimeSpan
+StackExchange.Redis.Availability.RetryPolicy.RetryPolicy() -> void
+StackExchange.Redis.Availability.RetryPolicy.RetryPolicy(StackExchange.Redis.Availability.RetryPolicy.Builder! builder) -> void
+override StackExchange.Redis.Availability.RetryPolicy.ToString() -> string!
+StackExchange.Redis.Availability.RetryResult
+StackExchange.Redis.Availability.RetryResult.FailoverServer = 2 -> StackExchange.Redis.Availability.RetryResult
+StackExchange.Redis.Availability.RetryResult.None = 0 -> StackExchange.Redis.Availability.RetryResult
+StackExchange.Redis.Availability.RetryResult.SameServer = 1 -> StackExchange.Redis.Availability.RetryResult
StackExchange.Redis.BacklogPolicy
StackExchange.Redis.BacklogPolicy.AbortPendingOnConnectionFailure.get -> bool
StackExchange.Redis.BacklogPolicy.AbortPendingOnConnectionFailure.init -> void
@@ -446,14 +446,14 @@ override StackExchange.Redis.ClusterSlotNode.ToString() -> string!
StackExchange.Redis.ClusterSlotsResult
StackExchange.Redis.ClusterSlotsResult.Assignments.get -> System.Collections.Generic.IReadOnlyList!
StackExchange.Redis.CommandFlags
-[SER007]StackExchange.Redis.CommandFlags.CommandRetryAlways = 8192 -> StackExchange.Redis.CommandFlags
-[SER007]StackExchange.Redis.CommandFlags.CommandRetryConnection = 32768 -> StackExchange.Redis.CommandFlags
-[SER007]StackExchange.Redis.CommandFlags.CommandRetryNever = 253952 -> StackExchange.Redis.CommandFlags
-[SER007]StackExchange.Redis.CommandFlags.CommandRetryReadOnly = 65536 -> StackExchange.Redis.CommandFlags
-[SER007]StackExchange.Redis.CommandFlags.CommandRetryServerAdmin = StackExchange.Redis.CommandFlags.CommandRetryReadOnly | StackExchange.Redis.CommandFlags.CommandRetryWriteLastWins -> StackExchange.Redis.CommandFlags
-[SER007]StackExchange.Redis.CommandFlags.CommandRetryWriteAccumulating = StackExchange.Redis.CommandFlags.CommandRetryConnection | StackExchange.Redis.CommandFlags.CommandRetryWriteLastWins -> StackExchange.Redis.CommandFlags
-[SER007]StackExchange.Redis.CommandFlags.CommandRetryWriteChecked = StackExchange.Redis.CommandFlags.CommandRetryConnection | StackExchange.Redis.CommandFlags.CommandRetryReadOnly -> StackExchange.Redis.CommandFlags
-[SER007]StackExchange.Redis.CommandFlags.CommandRetryWriteLastWins = 131072 -> StackExchange.Redis.CommandFlags
+StackExchange.Redis.CommandFlags.CommandRetryAlways = 8192 -> StackExchange.Redis.CommandFlags
+StackExchange.Redis.CommandFlags.CommandRetryConnection = 32768 -> StackExchange.Redis.CommandFlags
+StackExchange.Redis.CommandFlags.CommandRetryNever = 253952 -> StackExchange.Redis.CommandFlags
+StackExchange.Redis.CommandFlags.CommandRetryReadOnly = 65536 -> StackExchange.Redis.CommandFlags
+StackExchange.Redis.CommandFlags.CommandRetryServerAdmin = StackExchange.Redis.CommandFlags.CommandRetryReadOnly | StackExchange.Redis.CommandFlags.CommandRetryWriteLastWins -> StackExchange.Redis.CommandFlags
+StackExchange.Redis.CommandFlags.CommandRetryWriteAccumulating = StackExchange.Redis.CommandFlags.CommandRetryConnection | StackExchange.Redis.CommandFlags.CommandRetryWriteLastWins -> StackExchange.Redis.CommandFlags
+StackExchange.Redis.CommandFlags.CommandRetryWriteChecked = StackExchange.Redis.CommandFlags.CommandRetryConnection | StackExchange.Redis.CommandFlags.CommandRetryReadOnly -> StackExchange.Redis.CommandFlags
+StackExchange.Redis.CommandFlags.CommandRetryWriteLastWins = 131072 -> StackExchange.Redis.CommandFlags
StackExchange.Redis.CommandFlags.DemandMaster = 4 -> StackExchange.Redis.CommandFlags
StackExchange.Redis.CommandFlags.DemandReplica = StackExchange.Redis.CommandFlags.DemandMaster | StackExchange.Redis.CommandFlags.PreferReplica -> StackExchange.Redis.CommandFlags
StackExchange.Redis.CommandFlags.DemandSlave = StackExchange.Redis.CommandFlags.DemandMaster | StackExchange.Redis.CommandFlags.PreferReplica -> StackExchange.Redis.CommandFlags
@@ -665,8 +665,8 @@ StackExchange.Redis.ConfigurationOptions.ChannelPrefix.get -> StackExchange.Redi
StackExchange.Redis.ConfigurationOptions.ChannelPrefix.set -> void
StackExchange.Redis.ConfigurationOptions.CheckCertificateRevocation.get -> bool
StackExchange.Redis.ConfigurationOptions.CheckCertificateRevocation.set -> void
-[SER007]StackExchange.Redis.ConfigurationOptions.CircuitBreaker.get -> StackExchange.Redis.Availability.CircuitBreaker?
-[SER007]StackExchange.Redis.ConfigurationOptions.CircuitBreaker.set -> void
+StackExchange.Redis.ConfigurationOptions.CircuitBreaker.get -> StackExchange.Redis.Availability.CircuitBreaker?
+StackExchange.Redis.ConfigurationOptions.CircuitBreaker.set -> void
StackExchange.Redis.ConfigurationOptions.ClientName.get -> string?
StackExchange.Redis.ConfigurationOptions.ClientName.set -> void
StackExchange.Redis.ConfigurationOptions.Clone() -> StackExchange.Redis.ConfigurationOptions!
@@ -727,8 +727,8 @@ StackExchange.Redis.ConfigurationOptions.ResponseBufferPool.get -> System.Buffer
StackExchange.Redis.ConfigurationOptions.ResponseBufferPool.set -> void
StackExchange.Redis.ConfigurationOptions.ResponseTimeout.get -> int
StackExchange.Redis.ConfigurationOptions.ResponseTimeout.set -> void
-[SER007]StackExchange.Redis.ConfigurationOptions.RetryPolicy.get -> StackExchange.Redis.Availability.RetryPolicy?
-[SER007]StackExchange.Redis.ConfigurationOptions.RetryPolicy.set -> void
+StackExchange.Redis.ConfigurationOptions.RetryPolicy.get -> StackExchange.Redis.Availability.RetryPolicy?
+StackExchange.Redis.ConfigurationOptions.RetryPolicy.set -> void
StackExchange.Redis.ConfigurationOptions.SentinelPassword.get -> string?
StackExchange.Redis.ConfigurationOptions.SentinelPassword.set -> void
StackExchange.Redis.ConfigurationOptions.SentinelUser.get -> string?
@@ -790,7 +790,7 @@ StackExchange.Redis.ConnectionFailedEventArgs.FailureType.get -> StackExchange.R
override StackExchange.Redis.ConnectionFailedEventArgs.ToString() -> string!
StackExchange.Redis.ConnectionFailureType
StackExchange.Redis.ConnectionFailureType.AuthenticationFailure = 3 -> StackExchange.Redis.ConnectionFailureType
-[SER007]StackExchange.Redis.ConnectionFailureType.CircuitBreaker = 11 -> StackExchange.Redis.ConnectionFailureType
+StackExchange.Redis.ConnectionFailureType.CircuitBreaker = 11 -> StackExchange.Redis.ConnectionFailureType
StackExchange.Redis.ConnectionFailureType.ConnectionDisposed = 7 -> StackExchange.Redis.ConnectionFailureType
StackExchange.Redis.ConnectionFailureType.InternalFailure = 5 -> StackExchange.Redis.ConnectionFailureType
StackExchange.Redis.ConnectionFailureType.Loading = 8 -> StackExchange.Redis.ConnectionFailureType
@@ -817,8 +817,8 @@ static StackExchange.Redis.ConnectionMultiplexer.Connect(string! configuration,
static StackExchange.Redis.ConnectionMultiplexer.ConnectAsync(StackExchange.Redis.ConfigurationOptions! configuration, System.IO.TextWriter? log = null) -> System.Threading.Tasks.Task!
static StackExchange.Redis.ConnectionMultiplexer.ConnectAsync(string! configuration, System.Action! configure, System.IO.TextWriter? log = null) -> System.Threading.Tasks.Task!
static StackExchange.Redis.ConnectionMultiplexer.ConnectAsync(string! configuration, System.IO.TextWriter? log = null) -> System.Threading.Tasks.Task!
-[SER007]static StackExchange.Redis.ConnectionMultiplexer.ConnectGroupAsync(StackExchange.Redis.Availability.ConnectionGroupMember! member0, StackExchange.Redis.Availability.ConnectionGroupMember! member1, StackExchange.Redis.Availability.MultiGroupOptions? options = null, System.IO.TextWriter? log = null) -> System.Threading.Tasks.Task!
-[SER007]static StackExchange.Redis.ConnectionMultiplexer.ConnectGroupAsync(StackExchange.Redis.Availability.ConnectionGroupMember![]! members, StackExchange.Redis.Availability.MultiGroupOptions? options = null, System.IO.TextWriter? log = null) -> System.Threading.Tasks.Task!
+static StackExchange.Redis.ConnectionMultiplexer.ConnectGroupAsync(StackExchange.Redis.Availability.ConnectionGroupMember! member0, StackExchange.Redis.Availability.ConnectionGroupMember! member1, StackExchange.Redis.Availability.MultiGroupOptions? options = null, System.IO.TextWriter? log = null) -> System.Threading.Tasks.Task!
+static StackExchange.Redis.ConnectionMultiplexer.ConnectGroupAsync(StackExchange.Redis.Availability.ConnectionGroupMember![]! members, StackExchange.Redis.Availability.MultiGroupOptions? options = null, System.IO.TextWriter? log = null) -> System.Threading.Tasks.Task!
StackExchange.Redis.ConnectionMultiplexer.ConnectionFailed -> System.EventHandler?
StackExchange.Redis.ConnectionMultiplexer.ConnectionRestored -> System.EventHandler?
StackExchange.Redis.ConnectionMultiplexer.Dispose() -> void
@@ -1011,11 +1011,11 @@ static StackExchange.Redis.HashEntry.implicit operator StackExchange.Redis.HashE
static StackExchange.Redis.HashEntry.implicit operator System.Collections.Generic.KeyValuePair(StackExchange.Redis.HashEntry value) -> System.Collections.Generic.KeyValuePair
static StackExchange.Redis.HashEntry.operator !=(StackExchange.Redis.HashEntry x, StackExchange.Redis.HashEntry y) -> bool
static StackExchange.Redis.HashEntry.operator ==(StackExchange.Redis.HashEntry x, StackExchange.Redis.HashEntry y) -> bool
-[SER008]StackExchange.Redis.HashImport
-[SER008]static StackExchange.Redis.HashImport.Create(System.ReadOnlyMemory fields) -> StackExchange.Redis.HashImport!
-[SER008]static StackExchange.Redis.HashImport.Create(params StackExchange.Redis.RedisValue[]! fields) -> StackExchange.Redis.HashImport!
-[SER008]StackExchange.Redis.HashImport.Dispose() -> void
-[SER008]StackExchange.Redis.HashImport.DisposeAsync() -> System.Threading.Tasks.ValueTask
+StackExchange.Redis.HashImport
+static StackExchange.Redis.HashImport.Create(System.ReadOnlyMemory fields) -> StackExchange.Redis.HashImport!
+static StackExchange.Redis.HashImport.Create(params StackExchange.Redis.RedisValue[]! fields) -> StackExchange.Redis.HashImport!
+StackExchange.Redis.HashImport.Dispose() -> void
+StackExchange.Redis.HashImport.DisposeAsync() -> System.Threading.Tasks.ValueTask
StackExchange.Redis.HashSlotMovedEventArgs
StackExchange.Redis.HashSlotMovedEventArgs.HashSlot.get -> int
StackExchange.Redis.HashSlotMovedEventArgs.HashSlotMovedEventArgs(object! sender, int hashSlot, System.Net.EndPoint! old, System.Net.EndPoint! new) -> void
@@ -1187,7 +1187,7 @@ StackExchange.Redis.IDatabase.HashGet(StackExchange.Redis.RedisKey key, StackExc
StackExchange.Redis.IDatabase.HashGet(StackExchange.Redis.RedisKey key, StackExchange.Redis.RedisValue[]! hashFields, StackExchange.Redis.CommandFlags flags = StackExchange.Redis.CommandFlags.None) -> StackExchange.Redis.RedisValue[]!
StackExchange.Redis.IDatabase.HashGetAll(StackExchange.Redis.RedisKey key, StackExchange.Redis.CommandFlags flags = StackExchange.Redis.CommandFlags.None) -> StackExchange.Redis.HashEntry[]!
StackExchange.Redis.IDatabase.HashGetLease(StackExchange.Redis.RedisKey key, StackExchange.Redis.RedisValue hashField, StackExchange.Redis.CommandFlags flags = StackExchange.Redis.CommandFlags.None) -> StackExchange.Redis.Lease?
-[SER008]StackExchange.Redis.IDatabase.HashImport(StackExchange.Redis.RedisKey key, StackExchange.Redis.HashImport! fieldSet, System.ReadOnlyMemory values, StackExchange.Redis.CommandFlags flags = StackExchange.Redis.CommandFlags.None) -> void
+StackExchange.Redis.IDatabase.HashImport(StackExchange.Redis.RedisKey key, StackExchange.Redis.HashImport! fieldSet, System.ReadOnlyMemory values, StackExchange.Redis.CommandFlags flags = StackExchange.Redis.CommandFlags.None) -> void
StackExchange.Redis.IDatabase.HashIncrement(StackExchange.Redis.RedisKey key, StackExchange.Redis.RedisValue hashField, double value, StackExchange.Redis.CommandFlags flags = StackExchange.Redis.CommandFlags.None) -> double
StackExchange.Redis.IDatabase.HashIncrement(StackExchange.Redis.RedisKey key, StackExchange.Redis.RedisValue hashField, long value = 1, StackExchange.Redis.CommandFlags flags = StackExchange.Redis.CommandFlags.None) -> long
StackExchange.Redis.IDatabase.HashKeys(StackExchange.Redis.RedisKey key, StackExchange.Redis.CommandFlags flags = StackExchange.Redis.CommandFlags.None) -> StackExchange.Redis.RedisValue[]!
@@ -1464,7 +1464,7 @@ StackExchange.Redis.IDatabaseAsync.ArraySeekAsync(StackExchange.Redis.RedisKey k
StackExchange.Redis.IDatabaseAsync.ArraySetAsync(StackExchange.Redis.RedisKey key, StackExchange.Redis.RedisArrayEntry[]! values, StackExchange.Redis.CommandFlags flags = StackExchange.Redis.CommandFlags.None) -> System.Threading.Tasks.Task!
StackExchange.Redis.IDatabaseAsync.ArraySetAsync(StackExchange.Redis.RedisKey key, StackExchange.Redis.RedisArrayIndex index, StackExchange.Redis.RedisValue value, StackExchange.Redis.CommandFlags flags = StackExchange.Redis.CommandFlags.None) -> System.Threading.Tasks.Task!
StackExchange.Redis.IDatabaseAsync.ArraySetAsync(StackExchange.Redis.RedisKey key, StackExchange.Redis.RedisArrayIndex index, StackExchange.Redis.RedisValue[]! values, StackExchange.Redis.CommandFlags flags = StackExchange.Redis.CommandFlags.None) -> System.Threading.Tasks.Task!
-[SER007]StackExchange.Redis.IDatabaseAsync.CreateTransaction(object? asyncState = null) -> StackExchange.Redis.ITransactionAsync!
+StackExchange.Redis.IDatabaseAsync.CreateTransaction(object? asyncState = null) -> StackExchange.Redis.ITransactionAsync!
StackExchange.Redis.IDatabaseAsync.Database.get -> int
StackExchange.Redis.IDatabaseAsync.DebugObjectAsync(StackExchange.Redis.RedisKey key, StackExchange.Redis.CommandFlags flags = StackExchange.Redis.CommandFlags.None) -> System.Threading.Tasks.Task!
StackExchange.Redis.IDatabaseAsync.ExecuteAsync(string! command, System.Collections.Generic.ICollection
-[Experimental(Experiments.GeoRedundantFailover, UrlFormat = Experiments.UrlFormat)]
public enum RedisErrorKind
{
///