Update silo/cluster config
This commit is contained in:
@@ -87,20 +87,33 @@ public static class ApiBootstrap
|
||||
runOrleansGrains = runOrleansGrainsFromEnv;
|
||||
}
|
||||
|
||||
// Allow disabling Orleans clustering entirely in case of issues
|
||||
var disableOrleansClusteringEnv = Environment.GetEnvironmentVariable("DISABLE_ORLEANS_CLUSTERING");
|
||||
var disableOrleansClustering = !string.IsNullOrEmpty(disableOrleansClusteringEnv) &&
|
||||
bool.TryParse(disableOrleansClusteringEnv, out var disabled) && disabled;
|
||||
|
||||
var postgreSqlConnectionString = configuration.GetSection("PostgreSql")["Orleans"];
|
||||
|
||||
return hostBuilder.UseOrleans(siloBuilder =>
|
||||
{
|
||||
// Configure clustering with improved networking
|
||||
siloBuilder
|
||||
.UseAdoNetClustering(options =>
|
||||
{
|
||||
options.ConnectionString = postgreSqlConnectionString;
|
||||
options.Invariant = "Npgsql";
|
||||
});
|
||||
// Configure clustering with improved networking or use localhost clustering if disabled
|
||||
if (!disableOrleansClustering && !string.IsNullOrEmpty(postgreSqlConnectionString))
|
||||
{
|
||||
siloBuilder
|
||||
.UseAdoNetClustering(options =>
|
||||
{
|
||||
options.ConnectionString = postgreSqlConnectionString;
|
||||
options.Invariant = "Npgsql";
|
||||
});
|
||||
}
|
||||
else
|
||||
{
|
||||
// Fallback to localhost clustering for testing or when database is unavailable
|
||||
siloBuilder.UseLocalhostClustering();
|
||||
}
|
||||
|
||||
// Conditionally configure reminder service based on flag
|
||||
if (runOrleansGrains)
|
||||
if (runOrleansGrains && !disableOrleansClustering && !string.IsNullOrEmpty(postgreSqlConnectionString))
|
||||
{
|
||||
siloBuilder.UseAdoNetReminderService(options =>
|
||||
{
|
||||
@@ -111,7 +124,7 @@ public static class ApiBootstrap
|
||||
|
||||
// Configure networking for better silo communication
|
||||
siloBuilder
|
||||
.ConfigureEndpoints(siloPort: 11111, gatewayPort: 30000)
|
||||
.ConfigureEndpoints(siloPort: 11111, gatewayPort: 30000, advertisedIP: null, listenOnAnyHostAddress: true)
|
||||
.Configure<ClusterOptions>(options =>
|
||||
{
|
||||
// Configure cluster options with unique identifiers
|
||||
@@ -120,8 +133,22 @@ public static class ApiBootstrap
|
||||
})
|
||||
.Configure<MessagingOptions>(options =>
|
||||
{
|
||||
// Configure messaging for better reliability
|
||||
options.ResponseTimeout = TimeSpan.FromSeconds(30);
|
||||
// Configure messaging for better reliability with increased timeouts
|
||||
options.ResponseTimeout = TimeSpan.FromSeconds(60);
|
||||
options.DropExpiredMessages = true;
|
||||
})
|
||||
.Configure<ClusterMembershipOptions>(options =>
|
||||
{
|
||||
// Configure cluster membership for better resilience
|
||||
options.EnableIndirectProbes = true;
|
||||
options.ProbeTimeout = TimeSpan.FromSeconds(10);
|
||||
options.IAmAliveTablePublishTimeout = TimeSpan.FromSeconds(30);
|
||||
options.MaxJoinAttemptTime = TimeSpan.FromSeconds(120);
|
||||
})
|
||||
.Configure<GatewayOptions>(options =>
|
||||
{
|
||||
// Configure gateway with improved timeouts
|
||||
options.GatewayListRefreshPeriod = TimeSpan.FromSeconds(60);
|
||||
});
|
||||
|
||||
// Conditionally configure grain execution based on flag
|
||||
@@ -164,27 +191,42 @@ public static class ApiBootstrap
|
||||
});
|
||||
}
|
||||
|
||||
// Configure grain storage - use ADO.NET for production or memory for fallback
|
||||
if (!disableOrleansClustering && !string.IsNullOrEmpty(postgreSqlConnectionString))
|
||||
{
|
||||
siloBuilder
|
||||
.AddAdoNetGrainStorage("bot-store", options =>
|
||||
{
|
||||
options.ConnectionString = postgreSqlConnectionString;
|
||||
options.Invariant = "Npgsql";
|
||||
})
|
||||
.AddAdoNetGrainStorage("registry-store", options =>
|
||||
{
|
||||
options.ConnectionString = postgreSqlConnectionString;
|
||||
options.Invariant = "Npgsql";
|
||||
})
|
||||
.AddAdoNetGrainStorage("agent-store", options =>
|
||||
{
|
||||
options.ConnectionString = postgreSqlConnectionString;
|
||||
options.Invariant = "Npgsql";
|
||||
})
|
||||
.AddAdoNetGrainStorage("platform-summary-store", options =>
|
||||
{
|
||||
options.ConnectionString = postgreSqlConnectionString;
|
||||
options.Invariant = "Npgsql";
|
||||
});
|
||||
}
|
||||
else
|
||||
{
|
||||
// Fallback to memory storage when database is unavailable
|
||||
siloBuilder
|
||||
.AddMemoryGrainStorage("bot-store")
|
||||
.AddMemoryGrainStorage("registry-store")
|
||||
.AddMemoryGrainStorage("agent-store")
|
||||
.AddMemoryGrainStorage("platform-summary-store");
|
||||
}
|
||||
|
||||
siloBuilder
|
||||
.AddAdoNetGrainStorage("bot-store", options =>
|
||||
{
|
||||
options.ConnectionString = postgreSqlConnectionString;
|
||||
options.Invariant = "Npgsql";
|
||||
})
|
||||
.AddAdoNetGrainStorage("registry-store", options =>
|
||||
{
|
||||
options.ConnectionString = postgreSqlConnectionString;
|
||||
options.Invariant = "Npgsql";
|
||||
})
|
||||
.AddAdoNetGrainStorage("agent-store", options =>
|
||||
{
|
||||
options.ConnectionString = postgreSqlConnectionString;
|
||||
options.Invariant = "Npgsql";
|
||||
})
|
||||
.AddAdoNetGrainStorage("platform-summary-store", options =>
|
||||
{
|
||||
options.ConnectionString = postgreSqlConnectionString;
|
||||
options.Invariant = "Npgsql";
|
||||
})
|
||||
.ConfigureServices(services =>
|
||||
{
|
||||
// Register existing services for Orleans DI
|
||||
|
||||
Reference in New Issue
Block a user