-
-
Notifications
You must be signed in to change notification settings - Fork 17
/
Copy pathSqlStrategyOptionsExtensions.cs
125 lines (117 loc) · 4.81 KB
/
SqlStrategyOptionsExtensions.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
//------------------------------------------------------------------------------
// <copyright file="SqlStrategyOptionsExtensions.cs"
// company="Scott Dorman"
// library="Cadru">
// Copyright (C) 2001-2020 Scott Dorman.
// </copyright>
//
// <license>
// Licensed under the Microsoft Public License (Ms-PL) (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://opensource.org/licenses/Ms-PL.html
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// </license>
//------------------------------------------------------------------------------
using System;
using System.Collections.Generic;
using Polly.Contrib.WaitAndRetry;
namespace Cadru.Polly.Data
{
/// <summary>
/// Helper methods for getting strongly typed values from an <see cref="SqlStrategyOptions"/>.
/// </summary>
public static class SqlStrategyOptionsExtensions
{
/// <summary>
/// The duration the circuit will stay open before resetting.
/// </summary>
/// <param name="sqlStrategyOptions">
/// The <see cref="SqlStrategyOptions"/> instance.
/// </param>
/// <returns>
/// The configured value if it is not <see langword="null"/>; otherwise,
/// the default value.
/// </returns>
public static TimeSpan DurationOfBreak(this SqlStrategyOptions sqlStrategyOptions)
{
return (sqlStrategyOptions.DurationOfBreak ?? SqlStrategyOptions.Defaults.DurationOfBreak)!.Value;
}
/// <summary>
/// The number of exceptions that are allowed before opening the circuit.
/// </summary>
/// <param name="sqlStrategyOptions">
/// The <see cref="SqlStrategyOptions"/> instance.
/// </param>
/// <returns>
/// The configured value if it is not <see langword="null"/>; otherwise,
/// the default value.
/// </returns>
public static int ExceptionsAllowedBeforeBreaking(this SqlStrategyOptions sqlStrategyOptions)
{
return (sqlStrategyOptions.ExceptionsAllowedBeforeBreaking ?? SqlStrategyOptions.Defaults.ExceptionsAllowedBeforeBreaking)!.Value;
}
/// <summary>
/// Generates sleep durations in an exponential manner.
/// </summary>
/// <param name="sqlStrategyOptions">
/// The <see cref="SqlStrategyOptions"/> instance.
/// </param>
/// <returns>
/// The configured value if it is not <see langword="null"/> otherwise,
/// the default value.
/// </returns>
public static IEnumerable<TimeSpan> ExponentialBackoff(this SqlStrategyOptions sqlStrategyOptions)
{
return Backoff.ExponentialBackoff(TimeSpan.FromSeconds(2), sqlStrategyOptions.RetryCount());
}
/// <summary>
/// The timeout for the overall policy.
/// </summary>
/// <param name="sqlStrategyOptions">
/// The <see cref="SqlStrategyOptions"/> instance.
/// </param>
/// <returns>
/// The configured value if it is not <see langword="null"/>; otherwise,
/// the default value.
/// </returns>
public static TimeSpan OverallTimeout(this SqlStrategyOptions sqlStrategyOptions)
{
return (sqlStrategyOptions.OverallTimeout ?? SqlStrategyOptions.Defaults.OverallTimeout)!.Value;
}
/// <summary>
/// The retry count.
/// </summary>
/// <param name="sqlStrategyOptions">
/// The <see cref="SqlStrategyOptions"/> instance.
/// </param>
/// <returns>
/// The configured value if it is not <see langword="null"/>; otherwise,
/// the default value.
/// </returns>
public static int RetryCount(this SqlStrategyOptions sqlStrategyOptions)
{
return (sqlStrategyOptions.RetryCount ?? SqlStrategyOptions.Defaults.RetryCount)!.Value;
}
/// <summary>
/// The timeout for each retry.
/// </summary>
/// <param name="sqlStrategyOptions">
/// The <see cref="SqlStrategyOptions"/> instance.
/// </param>
/// <returns>
/// The configured value if it is not <see langword="null"/>; otherwise,
/// the default value.
/// </returns>
public static TimeSpan TimeoutPerRetry(this SqlStrategyOptions sqlStrategyOptions)
{
return (sqlStrategyOptions.TimeoutPerRetry ?? SqlStrategyOptions.Defaults.TimeoutPerRetry)!.Value;
}
}
}