/// <summary>
        /// This is used by Kvs and Volatile actor state provider.
        /// </summary>
        /// <param name="codePackage"></param>
        /// <param name="actorImplType"></param>
        /// <returns></returns>
        internal static ReplicatorSettings GetActorReplicatorSettings(CodePackageActivationContext codePackage, Type actorImplType)
        {
            var settings = ReplicatorSettings.LoadFrom(
                codePackage,
                ActorNameFormat.GetConfigPackageName(actorImplType),
                ActorNameFormat.GetFabricServiceReplicatorConfigSectionName(actorImplType));

            settings.SecurityCredentials = SecurityCredentials.LoadFrom(
                codePackage,
                ActorNameFormat.GetConfigPackageName(actorImplType),
                ActorNameFormat.GetFabricServiceReplicatorSecurityConfigSectionName(actorImplType));

            var nodeContext = FabricRuntime.GetNodeContext();
            var endpoint    = codePackage.GetEndpoint(ActorNameFormat.GetFabricServiceReplicatorEndpointName(actorImplType));

            settings.ReplicatorAddress = string.Format(
                CultureInfo.InvariantCulture,
                "{0}:{1}",
                nodeContext.IPAddressOrFQDN,
                endpoint.Port);

            if (!settings.MaxPrimaryReplicationQueueSize.HasValue)
            {
                settings.MaxPrimaryReplicationQueueSize = DefaultMaxPrimaryReplicationQueueSize;
            }

            if (!settings.MaxSecondaryReplicationQueueSize.HasValue)
            {
                settings.MaxSecondaryReplicationQueueSize = DefaultMaxSecondaryReplicationQueueSize;
            }

            return(settings);
        }
Exemple #2
0
        void IStateProviderReplica.Initialize(StatefulServiceInitializationParameters initializationParameters)
        {
            this.initiParams = initializationParameters;
            this.traceId     = ActorTrace.GetTraceIdForReplica(this.initiParams.PartitionId, this.initiParams.ReplicaId);

            var statefulServiceContext = new StatefulServiceContext(
                FabricRuntime.GetNodeContext(),
                this.initiParams.CodePackageActivationContext,
                this.initiParams.ServiceTypeName,
                this.initiParams.ServiceName,
                this.initiParams.InitializationData,
                this.initiParams.PartitionId,
                this.initiParams.ReplicaId);

            var stateManagerConfig = this.userDefinedStateManagerConfig;

            if (stateManagerConfig == null)
            {
                var actorImplType = this.actorTypeInformation.ImplementationType;

                stateManagerConfig = new ReliableStateManagerConfiguration(
                    ActorNameFormat.GetConfigPackageName(actorImplType),
                    ActorNameFormat.GetFabricServiceReplicatorSecurityConfigSectionName(actorImplType),
                    ActorNameFormat.GetFabricServiceReplicatorConfigSectionName(actorImplType));
            }

            this.stateManager = new ReliableStateManager(statefulServiceContext, stateManagerConfig);

            ReleaseAssert.AssertIfNull(this.onDataLossAsyncFunc, "onDataLossAsync event handler cannot be null.");
            this.stateManager.OnDataLossAsync = this.onDataLossAsyncFunc;

            this.stateManager.Initialize(this.initiParams);
        }
        internal static IActorStateProvider GetActorStateProviderOverride()
        {
            IActorStateProvider stateProvider = null;

            try
            {
                var configurationPackageName         = ActorNameFormat.GetConfigPackageName();
                var stateProviderOverrideSectionName = ActorNameFormat.GetActorStateProviderOverrideSectionName();
                var attributeTypeKey = ActorNameFormat.GetActorStateProviderOverrideKeyName();

                // Load the ActorStateProviderAttribute Type from the Configuration settings
                var context = FabricRuntime.GetActivationContext();
                var config  = context.GetConfigurationPackageObject(configurationPackageName);

                if ((config.Settings.Sections != null) &&
                    (config.Settings.Sections.Contains(stateProviderOverrideSectionName)))
                {
                    var section           = config.Settings.Sections[stateProviderOverrideSectionName];
                    var stateProviderType = section.Parameters[attributeTypeKey].Value;
                    stateProvider = Activator.CreateInstance(Type.GetType(stateProviderType)) as IActorStateProvider;
                }
            }
            catch (Exception)
            {
                // ignore
            }

            return(stateProvider);
        }