Skip to content

Commit d679c17

Browse files
committed
Letting cassandra max retry delay be configured
1 parent 2e30cf6 commit d679c17

File tree

4 files changed

+15
-7
lines changed

4 files changed

+15
-7
lines changed

src/Cassandra/Orleans.Clustering.Cassandra/CassandraClusteringTable.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,10 +49,10 @@ async Task IMembershipTable.InitializeMembershipTable(bool tryInitTableVersion)
4949

5050
_queries = await OrleansQueries.CreateInstance(_session);
5151

52-
await _queries.EnsureTableExistsAsync(_ttlSeconds);
52+
await _queries.EnsureTableExistsAsync(_options.InitializeRetryMaxDelay, _ttlSeconds);
5353

5454
if (tryInitTableVersion)
55-
await _queries.EnsureClusterVersionExistsAsync(_identifier);
55+
await _queries.EnsureClusterVersionExistsAsync(_options.InitializeRetryMaxDelay, _identifier);
5656
}
5757

5858
async Task IMembershipTable.DeleteMembershipTableEntries(string clusterId)

src/Cassandra/Orleans.Clustering.Cassandra/CassandraGatewayListProvider.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ async Task IGatewayListProvider.InitializeGatewayListProvider()
5757

5858
_queries = await OrleansQueries.CreateInstance(_session);
5959

60-
await _queries.EnsureTableExistsAsync(_ttlSeconds);
60+
await _queries.EnsureTableExistsAsync(_options.InitializeRetryMaxDelay, _ttlSeconds);
6161
}
6262

6363
async Task<IList<Uri>> IGatewayListProvider.GetGateways()

src/Cassandra/Orleans.Clustering.Cassandra/Hosting/CassandraClusteringOptions.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,14 @@ public class CassandraClusteringOptions
2727
/// </remarks>
2828
public bool UseCassandraTtl { get; set; }
2929

30+
/// <summary>
31+
/// Specifies the maximum amount of time to wait after encountering
32+
/// contention during initialization before retrying.
33+
/// </summary>
34+
/// <remarks>This is generally only encountered with large numbers of silos connecting
35+
/// in a short time period and using multi-datacenter Cassandara clusters</remarks>
36+
public TimeSpan InitializeRetryMaxDelay { get; set; } = TimeSpan.FromSeconds(20);
37+
3038
internal int? GetCassandraTtlSeconds(ClusterMembershipOptions clusterMembershipOptions) =>
3139
UseCassandraTtl
3240
? Convert.ToInt32(

src/Cassandra/Orleans.Clustering.Cassandra/OrleansQueries.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ private OrleansQueries(ISession session)
4040
Session = session;
4141
}
4242

43-
internal async Task EnsureTableExistsAsync(int? ttl)
43+
internal async Task EnsureTableExistsAsync(TimeSpan maxRetryDelay, int? ttl)
4444
{
4545
if (!await DoesTableAlreadyExistAsync())
4646
{
@@ -52,7 +52,7 @@ internal async Task EnsureTableExistsAsync(int? ttl)
5252
{
5353
// Randomize the delay to avoid contention, preferring that more instances will wait longer
5454
var nextSingle = Random.Shared.NextSingle();
55-
await Task.Delay(TimeSpan.FromSeconds(20) * Math.Sqrt(nextSingle));
55+
await Task.Delay(maxRetryDelay * Math.Sqrt(nextSingle));
5656

5757
if (!await DoesTableAlreadyExistAsync())
5858
{
@@ -62,7 +62,7 @@ internal async Task EnsureTableExistsAsync(int? ttl)
6262
}
6363
}
6464

65-
internal async Task EnsureClusterVersionExistsAsync(string clusterIdentifier)
65+
internal async Task EnsureClusterVersionExistsAsync(TimeSpan maxRetryDelay, string clusterIdentifier)
6666
{
6767
if (!await DoesClusterVersionAlreadyExistAsync(clusterIdentifier))
6868
{
@@ -74,7 +74,7 @@ internal async Task EnsureClusterVersionExistsAsync(string clusterIdentifier)
7474
{
7575
// Randomize the delay to avoid contention, preferring that more instances will wait longer
7676
var nextSingle = Random.Shared.NextSingle();
77-
await Task.Delay(TimeSpan.FromSeconds(20) * Math.Sqrt(nextSingle));
77+
await Task.Delay(maxRetryDelay * Math.Sqrt(nextSingle));
7878

7979
if (!await DoesClusterVersionAlreadyExistAsync(clusterIdentifier))
8080
{

0 commit comments

Comments
 (0)