Skip to content

Commit

Permalink
Remove legacy initialization from Silo class
Browse files Browse the repository at this point in the history
Remove most usages of SiloInitializationParameters concrete type.
  • Loading branch information
jdom committed Dec 14, 2017
1 parent 27bec7b commit 7c04ad6
Show file tree
Hide file tree
Showing 5 changed files with 28 additions and 40 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ public static IServiceCollection AddLegacyClusterConfigurationSupport(this IServ
{
options.HasMultiClusterNetwork = true;
options.BackgroundGossipInterval = globals.BackgroundGossipInterval;
options.DefaultMultiCluster = globals.DefaultMultiCluster?.ToList() ?? new List<string>();
options.DefaultMultiCluster = globals.DefaultMultiCluster?.ToList();
options.GlobalSingleInstanceNumberRetries = globals.GlobalSingleInstanceNumberRetries;
options.GlobalSingleInstanceRetryInterval = globals.GlobalSingleInstanceRetryInterval;
options.MaxMultiClusterGateways = globals.MaxMultiClusterGateways;
Expand Down
10 changes: 5 additions & 5 deletions src/Orleans.Runtime/MultiClusterNetwork/MultiClusterOracle.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
using System.Threading.Tasks;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
using Orleans.Hosting;
using Orleans.MultiCluster;

namespace Orleans.Runtime.MultiClusterNetwork
Expand Down Expand Up @@ -32,24 +33,23 @@ internal class MultiClusterOracle : SystemTarget, IMultiClusterOracle, ISiloStat
private readonly IInternalGrainFactory grainFactory;
private MultiClusterConfiguration injectedConfig;
private readonly ILoggerFactory loggerFactory;
public MultiClusterOracle(SiloInitializationParameters siloDetails, MultiClusterGossipChannelFactory channelFactory, ISiloStatusOracle siloStatusOracle, IInternalGrainFactory grainFactory, ILoggerFactory loggerFactory, IOptions<SiloOptions> siloOptions)
public MultiClusterOracle(ILocalSiloDetails siloDetails, MultiClusterGossipChannelFactory channelFactory, ISiloStatusOracle siloStatusOracle, IInternalGrainFactory grainFactory, ILoggerFactory loggerFactory, IOptions<SiloOptions> siloOptions, IOptions<MultiClusterOptions> multiClusterOptions)
: base(Constants.MultiClusterOracleId, siloDetails.SiloAddress, loggerFactory)
{
this.loggerFactory = loggerFactory;
this.channelFactory = channelFactory;
this.siloStatusOracle = siloStatusOracle;
this.grainFactory = grainFactory;
if (siloDetails == null) throw new ArgumentNullException(nameof(siloDetails));

var config = siloDetails.ClusterConfig.Globals;
logger = loggerFactory.CreateLogger<MultiClusterOracle>();
localData = new MultiClusterOracleData(logger, grainFactory);
clusterId = siloOptions.Value.ClusterId;
defaultMultiCluster = config.DefaultMultiCluster;
var multiClusterOptionsSnapshot = multiClusterOptions.Value;
defaultMultiCluster = multiClusterOptionsSnapshot.DefaultMultiCluster?.ToList();
random = new SafeRandom();

// to avoid convoying, each silo varies these period intervals a little
backgroundGossipInterval = RandomizeTimespanSlightly(config.BackgroundGossipInterval);
backgroundGossipInterval = RandomizeTimespanSlightly(multiClusterOptionsSnapshot.BackgroundGossipInterval);
resendActiveStatusAfter = RandomizeTimespanSlightly(ResendActiveStatusAfter);
}

Expand Down
30 changes: 0 additions & 30 deletions src/Orleans.Runtime/Silo/Silo.cs
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,6 @@
using Orleans.Runtime.Versions;
using Orleans.Versions;
using Orleans.ApplicationParts;
using Orleans.Configuration;
using Orleans.Serialization;

namespace Orleans.Runtime
Expand Down Expand Up @@ -133,17 +132,6 @@ public enum SiloType
private SchedulingContext multiClusterOracleContext;
private SchedulingContext reminderServiceContext;

/// <summary>
/// Initializes a new instance of the <see cref="Silo"/> class.
/// </summary>
/// <param name="name">Name of this silo.</param>
/// <param name="siloType">Type of this silo.</param>
/// <param name="config">Silo config data to be used for this silo.</param>
public Silo(string name, SiloType siloType, ClusterConfiguration config)
: this(new SiloInitializationParameters(name, siloType, config), null)
{
}

/// <summary>
/// Initializes a new instance of the <see cref="Silo"/> class.
/// </summary>
Expand Down Expand Up @@ -173,24 +161,6 @@ internal Silo(SiloInitializationParameters initializationParams, IServiceProvide
}

var localEndpoint = this.initializationParams.SiloAddress.Endpoint;
// Configure DI using Startup type
if (services == null)
{
var serviceCollection = new ServiceCollection();
serviceCollection.AddSingleton<Silo>(this);
serviceCollection.AddSingleton(initializationParams);
serviceCollection.AddLegacyClusterConfigurationSupport(config);
serviceCollection.Configure<SiloOptions>(options => options.SiloName = name);
var hostContext = new HostBuilderContext(new Dictionary<object, object>());
DefaultSiloServices.AddDefaultServices(hostContext, serviceCollection);

hostContext.GetApplicationPartManager()
.AddFromAppDomain()
.AddFromApplicationBaseDirectory();

services = StartupBuilder.ConfigureStartup(this.LocalConfig.StartupTypeName, serviceCollection);
services.GetService<TelemetryManager>()?.AddFromConfiguration(services, LocalConfig.TelemetryConfiguration);
}

services.GetService<SerializationManager>().RegisterSerializers(services.GetService<ApplicationPartManager>());

Expand Down
22 changes: 21 additions & 1 deletion src/Orleans.Runtime/Silo/SiloHost.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@
using System.Threading.Tasks;
using Orleans.Runtime.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Orleans.Hosting;
using Orleans.Runtime.Startup;

namespace Orleans.Runtime.Host
{
Expand Down Expand Up @@ -99,7 +101,25 @@ public void InitializeOrleansSilo()
try
{
if (!ConfigLoaded) LoadOrleansConfig();
orleans = new Silo(Name, Type, Config);
var builder = new SiloHostBuilder()
.ConfigureSiloName(Name)
.UseConfiguration(Config)
.ConfigureApplicationParts(parts => parts
.AddFromAppDomain()
.AddFromApplicationBaseDirectory());

if (!string.IsNullOrWhiteSpace(Config.Defaults.StartupTypeName))
{
builder.UseServiceProviderFactory(services =>
StartupBuilder.ConfigureStartup(Config.Defaults.StartupTypeName, services));
}

var host = builder.Build();

orleans = host.Services.GetRequiredService<Silo>();
var localConfig = host.Services.GetRequiredService<NodeConfiguration>();
host.Services.GetService<TelemetryManager>()?.AddFromConfiguration(host.Services, localConfig.TelemetryConfiguration);

logger.Info(ErrorCode.Runtime_Error_100288, "Successfully initialized Orleans silo '{0}' as a {1} node.", orleans.Name, orleans.Type);
}
catch (Exception exc)
Expand Down
4 changes: 1 addition & 3 deletions src/Orleans.Runtime/Silo/SiloProviderRuntime.cs
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@ namespace Orleans.Runtime.Providers
{
internal class SiloProviderRuntime : ISiloSideStreamProviderRuntime
{
private readonly SiloInitializationParameters siloDetails;
private readonly ISiloStatusOracle siloStatusOracle;
private readonly OrleansTaskScheduler scheduler;
private readonly ActivationDirectory activationDirectory;
Expand All @@ -33,7 +32,7 @@ internal class SiloProviderRuntime : ISiloSideStreamProviderRuntime
public string SiloIdentity { get; }

public SiloProviderRuntime(
SiloInitializationParameters siloDetails,
ILocalSiloDetails siloDetails,
IOptions<SiloOptions> siloOptions,
IConsistentRingProvider consistentRingProvider,
ISiloRuntimeClient runtimeClient,
Expand All @@ -44,7 +43,6 @@ public SiloProviderRuntime(
ILoggerFactory loggerFactory)
{
this.loggerFactory = loggerFactory;
this.siloDetails = siloDetails;
this.siloStatusOracle = siloStatusOracle;
this.scheduler = scheduler;
this.activationDirectory = activationDirectory;
Expand Down

0 comments on commit 7c04ad6

Please sign in to comment.