diff --git a/CHANGELOG.md b/CHANGELOG.md
index bd952052f53..cc3e56addac 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,27 @@
+## 8.0.0-alpha.8
+
+* Updates for 8.0.0-alpha.7 by [@martincostello](https://github.com/martincostello) in https://github.com/App-vNext/Polly/pull/1433
+* Improve logging messages by [@martintmk](https://github.com/martintmk) in https://github.com/App-vNext/Polly/pull/1436
+* Rename `BuilderName` to `Name` by [@martintmk](https://github.com/martintmk) in https://github.com/App-vNext/Polly/pull/1437
+* Do not record null tags to meter by [@martintmk](https://github.com/martintmk) in https://github.com/App-vNext/Polly/pull/1438
+* Fix telemetry test failures by [@martintmk](https://github.com/martintmk) in https://github.com/App-vNext/Polly/pull/1439
+* Simplify OutcomeResilienceStrategy by [@martintmk](https://github.com/martintmk) in https://github.com/App-vNext/Polly/pull/1440
+* Drop simple circuit breaker by [@martintmk](https://github.com/martintmk) in https://github.com/App-vNext/Polly/pull/1444
+* Allow jitter for all backoff types by [@martintmk](https://github.com/martintmk) in https://github.com/App-vNext/Polly/pull/1445
+* Rename `Attempt` to `AttemptNumber` by [@martintmk](https://github.com/martintmk) in https://github.com/App-vNext/Polly/pull/1447
+* Hide `CircuitBreakerStateProvider.LastHandledOutcome` by [@martintmk](https://github.com/martintmk) in https://github.com/App-vNext/Polly/pull/1446
+* Rename `ResilienceStrategyBuilder` to `CompositeStrategyBuilder` by [@martintmk](https://github.com/martintmk) in https://github.com/App-vNext/Polly/pull/1448
+* Added `readonly` modifier to private fields which are never changed by [@Lehonti](https://github.com/Lehonti) in https://github.com/App-vNext/Polly/pull/1451
+* Reduced nesting levels through block-scoped `using`s and the inversion of an `if` block. by [@Lehonti](https://github.com/Lehonti) in https://github.com/App-vNext/Polly/pull/1453
+* Simplify file names by [@martintmk](https://github.com/martintmk) in https://github.com/App-vNext/Polly/pull/1455
+* Improve `MultipleStrategiesBenchmark` by [@martintmk](https://github.com/martintmk) in https://github.com/App-vNext/Polly/pull/1457
+* Elaborate about synchronous vs asynchronous executions by [@martintmk](https://github.com/martintmk) in https://github.com/App-vNext/Polly/pull/1456
+* Fix some typos in XML docs by [@martintmk](https://github.com/martintmk) in https://github.com/App-vNext/Polly/pull/1458
+* Make `ReactiveResilienceStrategy` public by [@martintmk](https://github.com/martintmk) in https://github.com/App-vNext/Polly/pull/1460
+* Make the `ReactiveResilienceStrategy` type-safe by [@martintmk](https://github.com/martintmk) in https://github.com/App-vNext/Polly/pull/1462
+* Use `StrategyHelper` for safe executions and drop redundant methods by [@martintmk](https://github.com/martintmk) in https://github.com/App-vNext/Polly/pull/1463
+* Drop unnecessary allocation in circuit breaker by [@martintmk](https://github.com/martintmk) in https://github.com/App-vNext/Polly/pull/1464
+
## 8.0.0-alpha.7
* Introduce ResilienceStrategyBuilder.Validator by [@martintmk](https://github.com/martintmk) in https://github.com/App-vNext/Polly/pull/1412
diff --git a/Directory.Packages.props b/Directory.Packages.props
index c21879d5eb4..3a5e431dfd0 100644
--- a/Directory.Packages.props
+++ b/Directory.Packages.props
@@ -2,7 +2,7 @@
7.0.0
true
- 8.0.0-alpha.7
+ 8.0.0-alpha.8
diff --git a/README.md b/README.md
index 6eed8e65025..8ea9e29ed8c 100644
--- a/README.md
+++ b/README.md
@@ -5,8 +5,8 @@
> Major performance improvements are on the way! Please see our [blog post](https://www.thepollyproject.org/2023/03/03/we-want-your-feedback-introducing-polly-v8/) to learn more and provide feedback in the [related GitHub issue](https://github.com/App-vNext/Polly/issues/1048).
>
> :rotating_light::rotating_light: **Polly v8 feature-complete!** :rotating_light::rotating_light:
-> - Polly v8 Alpha 7 is now available on [NuGet.org](https://www.nuget.org/packages/Polly/8.0.0-alpha.7)
-> - The Alpha 7 version is considered feature-complete. After completing [review of the API](https://github.com/App-vNext/Polly/pull/1233) to address unresolved issues, we will move on to a Beta release.
+> - Polly v8 Alpha 8 is now available on [NuGet.org](https://www.nuget.org/packages/Polly/8.0.0-alpha.8)
+> - The Alpha 8 version is considered feature-complete. After completing [review of the API](https://github.com/App-vNext/Polly/pull/1233) to address unresolved issues, we will move on to a Beta release.
> - The v8 docs are not yet finished, but you can take a look at sample code in these locations:
> - Within the repo's new [Samples folder](https://github.com/App-vNext/Polly/tree/main/samples)
> - By reading `Polly.Core`'s [README](https://github.com/App-vNext/Polly/blob/main/src/Polly.Core/README.md)
diff --git a/samples/Extensibility/Program.cs b/samples/Extensibility/Program.cs
index c9e27adfba9..7a86595da2b 100644
--- a/samples/Extensibility/Program.cs
+++ b/samples/Extensibility/Program.cs
@@ -4,7 +4,7 @@
// ------------------------------------------------------------------------
// Usage of custom strategy
// ------------------------------------------------------------------------
-var strategy = new ResilienceStrategyBuilder()
+var strategy = new CompositeStrategyBuilder()
// This is custom extension defined in this sample
.AddMyResilienceStrategy(new MyResilienceStrategyOptions
{
@@ -23,7 +23,7 @@
// SIMPLE EXTENSIBILITY MODEL (INLINE STRATEGY)
// ------------------------------------------------------------------------
-strategy = new ResilienceStrategyBuilder()
+strategy = new CompositeStrategyBuilder()
// Just add the strategy instance directly
.AddStrategy(new MySimpleStrategy())
.Build();
@@ -125,7 +125,7 @@ protected override async ValueTask> ExecuteCore"
- public static TBuilder AddMyResilienceStrategy(this TBuilder builder, MyResilienceStrategyOptions options) where TBuilder : ResilienceStrategyBuilderBase
+ public static TBuilder AddMyResilienceStrategy(this TBuilder builder, MyResilienceStrategyOptions options) where TBuilder : CompositeStrategyBuilderBase
=> builder.AddStrategy(
// Provide a factory that creates the strategy
context => new MyResilienceStrategy(context.Telemetry, options),
diff --git a/samples/GenericStrategies/Program.cs b/samples/GenericStrategies/Program.cs
index 3904090f42f..51e8e1294cc 100644
--- a/samples/GenericStrategies/Program.cs
+++ b/samples/GenericStrategies/Program.cs
@@ -11,7 +11,7 @@
// The generic ResilienceStrategyBuilder creates a ResilienceStrategy
// that can execute synchronous and asynchronous callbacks that return T.
-ResilienceStrategy strategy = new ResilienceStrategyBuilder()
+ResilienceStrategy strategy = new CompositeStrategyBuilder()
.AddFallback(new FallbackStrategyOptions
{
FallbackAction = _ =>
diff --git a/samples/Intro/Program.cs b/samples/Intro/Program.cs
index 9271bcea4af..891e955151e 100644
--- a/samples/Intro/Program.cs
+++ b/samples/Intro/Program.cs
@@ -9,7 +9,7 @@
// The ResilienceStrategyBuilder creates a ResilienceStrategy
// that can be executed synchronously or asynchronously
// and for both void and result-returning user-callbacks.
-ResilienceStrategy strategy = new ResilienceStrategyBuilder()
+ResilienceStrategy strategy = new CompositeStrategyBuilder()
// Use convenience extension that accepts TimeSpan
.AddTimeout(TimeSpan.FromSeconds(5))
.Build();
@@ -37,7 +37,7 @@
// 3. Create and execute a pipeline of strategies
// ------------------------------------------------------------------------
-strategy = new ResilienceStrategyBuilder()
+strategy = new CompositeStrategyBuilder()
// Add retries using the options
.AddRetry(new RetryStrategyOptions
{
@@ -51,7 +51,7 @@
_ => PredicateResult.False
},
// Register user callback called whenever retry occurs
- OnRetry = args => { Console.WriteLine($"Retrying...{args.Arguments.Attempt} attempt"); return default; },
+ OnRetry = args => { Console.WriteLine($"Retrying...{args.Arguments.AttemptNumber} attempt"); return default; },
BaseDelay = TimeSpan.FromMilliseconds(400),
BackoffType = RetryBackoffType.Constant,
RetryCount = 3
diff --git a/samples/Retries/Program.cs b/samples/Retries/Program.cs
index 45a0a5eda53..46a922ad714 100644
--- a/samples/Retries/Program.cs
+++ b/samples/Retries/Program.cs
@@ -9,7 +9,7 @@
// 1. Create a retry strategy that handles all exceptions
// ------------------------------------------------------------------------
-ResilienceStrategy strategy = new ResilienceStrategyBuilder()
+ResilienceStrategy strategy = new CompositeStrategyBuilder()
// Default retry options handle all exceptions
.AddRetry(new RetryStrategyOptions())
.Build();
@@ -21,7 +21,7 @@
// 2. Customize the retry behavior
// ------------------------------------------------------------------------
-strategy = new ResilienceStrategyBuilder()
+strategy = new CompositeStrategyBuilder()
.AddRetry(new RetryStrategyOptions
{
// Specify what exceptions should be retried using PredicateBuilder
@@ -31,7 +31,8 @@
// The recommended backoff type for HTTP scenarios
// See here for more information: https://github.com/App-vNext/Polly/wiki/Retry-with-jitter#more-complex-jitter
- BackoffType = RetryBackoffType.ExponentialWithJitter
+ BackoffType = RetryBackoffType.Exponential,
+ UseJitter = true
})
.Build();
@@ -42,7 +43,7 @@
// 3. Register the callbacks
// ------------------------------------------------------------------------
-strategy = new ResilienceStrategyBuilder()
+strategy = new CompositeStrategyBuilder()
.AddRetry(new RetryStrategyOptions
{
// Specify what exceptions should be retried using switch expressions
@@ -53,7 +54,7 @@
},
OnRetry = outcome =>
{
- Console.WriteLine($"Retrying attempt {outcome.Arguments.Attempt}...");
+ Console.WriteLine($"Retrying attempt {outcome.Arguments.AttemptNumber}...");
return default;
}
})
@@ -66,7 +67,7 @@
// 4. Create an HTTP retry strategy that handles both exceptions and results
// ------------------------------------------------------------------------
-ResilienceStrategy httpStrategy = new ResilienceStrategyBuilder()
+ResilienceStrategy httpStrategy = new CompositeStrategyBuilder()
.AddRetry(new RetryStrategyOptions
{
// Specify what exceptions or results should be retried