Ejemplo n.º 1
0
 private void CreateHostBuilderContext()
 {
     this.hostBuilderContext = new HostBuilderContext(this.Properties)
     {
         HostingEnvironment = this.hostingEnvironment,
         Configuration      = this.hostConfiguration
     };
 }
            private static Orleans.Hosting.HostBuilderContext GetContext(Microsoft.Extensions.Hosting.HostBuilderContext ctx)
            {
                var siloContext = new Orleans.Hosting.HostBuilderContext(ctx.Properties)
                {
                    Configuration      = ctx.Configuration,
                    HostingEnvironment = new HostingEnvironmentAdapter(ctx.HostingEnvironment)
                };

                return(siloContext);
            }
Ejemplo n.º 3
0
        internal static void AddDefaultServices(HostBuilderContext context, IServiceCollection services)
        {
            services.AddOptions();

            // Register system services.
            services.TryAddSingleton <ILocalSiloDetails, LocalSiloDetails>();
            services.TryAddSingleton <ISiloHost, SiloWrapper>();
            services.TryAddSingleton <SiloLifecycle>();

            services.PostConfigure <SiloMessagingOptions>(options =>
            {
                //
                // Assign environment specific defaults post configuration if user did not configured otherwise.
                //

                if (options.SiloSenderQueues == 0)
                {
                    options.SiloSenderQueues = Environment.ProcessorCount;
                }

                if (options.GatewaySenderQueues == 0)
                {
                    options.GatewaySenderQueues = Environment.ProcessorCount;
                }
            });
            services.TryAddSingleton <TelemetryManager>();
            services.TryAddFromExisting <ITelemetryProducer, TelemetryManager>();

            services.TryAddSingleton <ExecutorService>();
            // queue balancer contructing related
            services.TryAddTransient <StaticClusterConfigDeploymentBalancer>();
            services.TryAddTransient <DynamicClusterConfigDeploymentBalancer>();
            services.TryAddTransient <ClusterConfigDeploymentLeaseBasedBalancer>();
            services.TryAddTransient <ConsistentRingQueueBalancer>();
            services.TryAddSingleton <IStreamSubscriptionHandleFactory, StreamSubscriptionHandlerFactory>();

            services.TryAddSingleton <ProviderManagerSystemTarget>();
            services.TryAddSingleton <StatisticsProviderManager>();
            services.AddFromExisting <IProviderManager, StatisticsProviderManager>();

            // storage providers
            services.TryAddSingleton <StorageProviderManager>();
            services.AddFromExisting <IProviderManager, StorageProviderManager>();
            services.TryAddFromExisting <IKeyedServiceCollection <string, IStorageProvider>, StorageProviderManager>();               // as named services
            services.TryAddSingleton <IStorageProvider>(sp => sp.GetRequiredService <StorageProviderManager>().GetDefaultProvider()); // default

            // log concistency providers
            services.TryAddSingleton <LogConsistencyProviderManager>();
            services.AddFromExisting <IProviderManager, LogConsistencyProviderManager>();
            services.TryAddFromExisting <IKeyedServiceCollection <string, ILogConsistencyProvider>, LogConsistencyProviderManager>();               // as named services
            services.TryAddSingleton <ILogConsistencyProvider>(sp => sp.GetRequiredService <LogConsistencyProviderManager>().GetDefaultProvider()); // default

            services.TryAddSingleton <BootstrapProviderManager>();
            services.AddFromExisting <IProviderManager, BootstrapProviderManager>();
            services.TryAddSingleton <LoadedProviderTypeLoaders>();
            services.AddLogging();
            services.TryAddSingleton <ITimerRegistry, TimerRegistry>();
            services.TryAddSingleton <IReminderRegistry, ReminderRegistry>();
            services.TryAddSingleton <StreamProviderManager>();
            services.AddFromExisting <IStreamProviderManager, StreamProviderManager>();
            services.TryAddFromExisting <IKeyedServiceCollection <string, IStreamProvider>, StreamProviderManager>(); // as named services
            services.AddFromExisting <IProviderManager, IStreamProviderManager>();
            services.TryAddSingleton <GrainRuntime>();
            services.TryAddSingleton <IGrainRuntime, GrainRuntime>();
            services.TryAddSingleton <IGrainCancellationTokenRuntime, GrainCancellationTokenRuntime>();
            services.TryAddSingleton <OrleansTaskScheduler>();
            services.TryAddSingleton <GrainFactory>(sp => sp.GetService <InsideRuntimeClient>().ConcreteGrainFactory);
            services.TryAddFromExisting <IGrainFactory, GrainFactory>();
            services.TryAddFromExisting <IInternalGrainFactory, GrainFactory>();
            services.TryAddFromExisting <IGrainReferenceConverter, GrainFactory>();
            services.TryAddSingleton <IGrainReferenceRuntime, GrainReferenceRuntime>();
            services.TryAddSingleton <TypeMetadataCache>();
            services.TryAddSingleton <ActivationDirectory>();
            services.TryAddSingleton <LocalGrainDirectory>();
            services.TryAddFromExisting <ILocalGrainDirectory, LocalGrainDirectory>();
            services.TryAddSingleton(sp => sp.GetRequiredService <LocalGrainDirectory>().GsiActivationMaintainer);
            services.TryAddSingleton <SiloStatisticsManager>();
            services.TryAddSingleton <ISiloPerformanceMetrics>(sp => sp.GetRequiredService <SiloStatisticsManager>().MetricsTable);
            services.TryAddFromExisting <ICorePerformanceMetrics, ISiloPerformanceMetrics>();
            services.TryAddSingleton <GrainTypeManager>();
            services.TryAddSingleton <MessageCenter>();
            services.TryAddFromExisting <IMessageCenter, MessageCenter>();
            services.TryAddFromExisting <ISiloMessageCenter, MessageCenter>();
            services.TryAddSingleton(FactoryUtility.Create <MessageCenter, Gateway>);
            services.TryAddSingleton <Dispatcher>(sp => sp.GetRequiredService <Catalog>().Dispatcher);
            services.TryAddSingleton <InsideRuntimeClient>();
            services.TryAddFromExisting <IRuntimeClient, InsideRuntimeClient>();
            services.TryAddFromExisting <ISiloRuntimeClient, InsideRuntimeClient>();
            services.TryAddFromExisting <ILifecycleParticipant <ISiloLifecycle>, InsideRuntimeClient>();
            services.TryAddSingleton <MultiClusterGossipChannelFactory>();
            services.TryAddSingleton <MultiClusterOracle>();
            services.TryAddSingleton <MultiClusterRegistrationStrategyManager>();
            services.TryAddFromExisting <IMultiClusterOracle, MultiClusterOracle>();
            services.TryAddSingleton <DeploymentLoadPublisher>();
            services.TryAddSingleton <MembershipOracle>();
            services.TryAddFromExisting <IMembershipOracle, MembershipOracle>();
            services.TryAddFromExisting <ISiloStatusOracle, MembershipOracle>();
            services.TryAddSingleton <MembershipTableFactory>();
            services.TryAddSingleton <ReminderTableFactory>();
            services.TryAddSingleton <IReminderTable>(sp => sp.GetRequiredService <ReminderTableFactory>().Create());
            services.TryAddSingleton <LocalReminderServiceFactory>();
            services.TryAddSingleton <ClientObserverRegistrar>();
            services.TryAddSingleton <SiloProviderRuntime>();
            services.TryAddFromExisting <IStreamProviderRuntime, SiloProviderRuntime>();
            services.TryAddFromExisting <IProviderRuntime, SiloProviderRuntime>();
            services.TryAddSingleton <ImplicitStreamSubscriberTable>();
            services.TryAddSingleton <MessageFactory>();

            services.TryAddSingleton <IGrainRegistrar <GlobalSingleInstanceRegistration>, GlobalSingleInstanceRegistrar>();
            services.TryAddSingleton <IGrainRegistrar <ClusterLocalRegistration>, ClusterLocalRegistrar>();
            services.TryAddSingleton <RegistrarManager>();
            services.TryAddSingleton <Factory <Grain, IMultiClusterRegistrationStrategy, ILogConsistencyProtocolServices> >(FactoryUtility.Create <Grain, IMultiClusterRegistrationStrategy, ProtocolServices>);
            services.TryAddSingleton(FactoryUtility.Create <GrainDirectoryPartition>);

            // Placement
            services.TryAddSingleton <PlacementDirectorsManager>();
            services.TryAddSingleton <IPlacementDirector <RandomPlacement>, RandomPlacementDirector>();
            services.TryAddSingleton <IActivationSelector <RandomPlacement>, RandomPlacementDirector>();
            services.TryAddSingleton <IPlacementDirector <PreferLocalPlacement>, PreferLocalPlacementDirector>();
            services.TryAddSingleton <IPlacementDirector <StatelessWorkerPlacement>, StatelessWorkerDirector>();
            services.TryAddSingleton <IActivationSelector <StatelessWorkerPlacement>, StatelessWorkerDirector>();
            services.TryAddSingleton <IPlacementDirector <ActivationCountBasedPlacement>, ActivationCountPlacementDirector>();
            services.TryAddSingleton <IPlacementDirector <HashBasedPlacement>, HashBasedPlacementDirector>();
            services.TryAddSingleton <DefaultPlacementStrategy>();
            services.TryAddSingleton <ClientObserversPlacementDirector>();

            // Versions
            services.TryAddSingleton <VersionSelectorManager>();
            services.TryAddSingleton <IVersionSelector <MinimumVersion>, MinimumVersionSelector>();
            services.TryAddSingleton <IVersionSelector <LatestVersion>, LatestVersionSelector>();
            services.TryAddSingleton <IVersionSelector <AllCompatibleVersions>, AllCompatibleVersionsSelector>();
            services.TryAddSingleton <CompatibilityDirectorManager>();
            services.TryAddSingleton <ICompatibilityDirector <BackwardCompatible>, BackwardCompatilityDirector>();
            services.TryAddSingleton <ICompatibilityDirector <AllVersionsCompatible>, AllVersionsCompatibilityDirector>();
            services.TryAddSingleton <ICompatibilityDirector <StrictVersionCompatible>, StrictVersionCompatibilityDirector>();
            services.TryAddSingleton <CachedVersionSelectorManager>();
            services.TryAddSingleton <IVersionStore, GrainVersionStore>();

            services.TryAddSingleton <Factory <IGrainRuntime> >(sp => () => sp.GetRequiredService <IGrainRuntime>());

            // Grain activation
            services.TryAddSingleton <Catalog>();
            services.TryAddSingleton <GrainCreator>();
            services.TryAddSingleton <IGrainActivator, DefaultGrainActivator>();
            services.TryAddScoped <ActivationData.GrainActivationContextFactory>();
            services.TryAddScoped <IGrainActivationContext>(sp => sp.GetRequiredService <ActivationData.GrainActivationContextFactory>().Context);

            services.TryAddSingleton <IStreamSubscriptionManagerAdmin>(sp => new StreamSubscriptionManagerAdmin(sp.GetRequiredService <IStreamProviderRuntime>()));
            services.TryAddSingleton <IConsistentRingProvider>(
                sp =>
            {
                var globalConfig  = sp.GetRequiredService <GlobalConfiguration>();
                var siloDetails   = sp.GetRequiredService <ILocalSiloDetails>();
                var loggerFactory = sp.GetRequiredService <ILoggerFactory>();
                if (globalConfig.UseVirtualBucketsConsistentRing)
                {
                    return(new VirtualBucketsRingProvider(siloDetails.SiloAddress, loggerFactory, globalConfig.NumVirtualBucketsConsistentRing));
                }

                return(new ConsistentRingProvider(siloDetails.SiloAddress, loggerFactory));
            });

            services.TryAddSingleton(typeof(IKeyedServiceCollection <,>), typeof(KeyedServiceCollection <,>));

            // Serialization
            services.TryAddSingleton <SerializationManager>();
            services.TryAddSingleton <ITypeResolver, CachedTypeResolver>();
            services.TryAddSingleton <IFieldUtils, FieldUtils>();
            services.AddSingleton <BinaryFormatterSerializer>();
            services.AddSingleton <BinaryFormatterISerializableSerializer>();
            services.AddFromExisting <IKeyedSerializer, BinaryFormatterISerializableSerializer>();
            services.AddSingleton <ILBasedSerializer>();
            services.AddFromExisting <IKeyedSerializer, ILBasedSerializer>();

            // Transactions
            services.TryAddSingleton <ITransactionAgent, TransactionAgent>();
            services.TryAddSingleton <Factory <ITransactionAgent> >(sp => () => sp.GetRequiredService <ITransactionAgent>());
            services.TryAddSingleton <ITransactionManagerService, DisabledTransactionManagerService>();

            // Application Parts
            var applicationPartManager = context.GetApplicationPartManager();

            services.TryAddSingleton <IApplicationPartManager>(applicationPartManager);
            applicationPartManager.AddApplicationPart(new AssemblyPart(typeof(RuntimeVersion).Assembly)
            {
                IsFrameworkAssembly = true
            });
            applicationPartManager.AddApplicationPart(new AssemblyPart(typeof(Silo).Assembly)
            {
                IsFrameworkAssembly = true
            });
            applicationPartManager.AddFeatureProvider(new BuiltInTypesSerializationFeaturePopulator());
            applicationPartManager.AddFeatureProvider(new AssemblyAttributeFeatureProvider <GrainInterfaceFeature>());
            applicationPartManager.AddFeatureProvider(new AssemblyAttributeFeatureProvider <GrainClassFeature>());
            applicationPartManager.AddFeatureProvider(new AssemblyAttributeFeatureProvider <SerializerFeature>());
            services.AddTransient <IConfigurationValidator, ApplicationPartValidator>();
        }