/// <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);
        }
        ReplicatorSettings BuildReplicatorSettings()
        {
            var codePackage        = initParams.CodePackageActivationContext;
            var replicatorSettings = ReplicatorSettings.LoadFrom(codePackage,
                                                                 "Config",
                                                                 "ReplicatorConfig");

            replicatorSettings.SecurityCredentials = SecurityCredentials.LoadFrom(codePackage,
                                                                                  "Config",
                                                                                  "ReplicatorSecurityConfig");

            var nodeContext = FabricRuntime.GetNodeContext();
            var endpoint    = codePackage.GetEndpoint("ReplicatorEndpoint");

            replicatorSettings.ReplicatorAddress = string.Format(CultureInfo.InvariantCulture, "{0}:{1}",
                                                                 nodeContext.IPAddressOrFQDN, endpoint.Port);
            return(replicatorSettings);
        }
예제 #3
0
        private ReliableStateManagerReplicatorSettings LoadReplicatorSettingsFromConfigPackage(bool addChangeListener)
        {
            ReliableStateManagerReplicatorSettings settings = null;

            var configPackage = this.GetConfigurationPackage();

            if (configPackage == null)
            {
                settings = new ReliableStateManagerReplicatorSettings();
            }
            else
            {
                if (string.IsNullOrEmpty(this._configuration.ReplicatorSettingsSectionName) ||
                    !configPackage.Settings.Sections.Contains(this._configuration.ReplicatorSettingsSectionName))
                {
                    DataImplTrace.Source.WriteWarningWithId(
                        TraceType,
                        this._traceId,
                        "Using default replicator settings, unable to load replicator settings config section named '{0}' from config package named '{1}'.",
                        this._configuration.ReplicatorSettingsSectionName,
                        this._configuration.ConfigPackageName);

                    settings = new ReliableStateManagerReplicatorSettings();
                }
                else
                {
                    DataImplTrace.Source.WriteInfoWithId(
                        TraceType,
                        this._traceId,
                        "Loading replicator settings using <config package name: '{0}', settings section name: '{1}'>",
                        this._configuration.ConfigPackageName,
                        this._configuration.ReplicatorSettingsSectionName);

                    settings = ReliableStateManagerReplicatorSettingsUtil.LoadFrom(
                        this.InitializationParameters.CodePackageActivationContext,
                        this._configuration.ConfigPackageName,
                        this._configuration.ReplicatorSettingsSectionName);
                }

                // SecurityCredentials.LoadFrom doesn't return the correct value when CredentialType is None in config.  todo: find bug#
                // To workaround this bug, only read replicator security settings if CredentialType is present and not explicitly None.
                const string replicatorCredentialTypeName = "CredentialType";
                if (string.IsNullOrEmpty(this._configuration.ReplicatorSecuritySectionName) ||
                    !configPackage.Settings.Sections.Contains(this._configuration.ReplicatorSecuritySectionName) ||
                    !configPackage.Settings.Sections[this._configuration.ReplicatorSecuritySectionName].Parameters.Contains(replicatorCredentialTypeName)
                    ||
                    configPackage.Settings.Sections[this._configuration.ReplicatorSecuritySectionName].Parameters[replicatorCredentialTypeName].Value.Equals(
                        "None",
                        StringComparison.OrdinalIgnoreCase))
                {
                    DataImplTrace.Source.WriteWarningWithId(
                        TraceType,
                        this._traceId,
                        "Using default replicator security settings, unable to load replicator security settings config section named '{0}' from config package named '{1}'.",
                        this._configuration.ReplicatorSecuritySectionName,
                        this._configuration.ConfigPackageName);
                }
                else
                {
                    if (addChangeListener)
                    {
                        this.InitializationParameters.CodePackageActivationContext.ConfigurationPackageModifiedEvent += this.OnConfigurationPackageModified;
                    }

                    settings.SecurityCredentials = SecurityCredentials.LoadFrom(
                        this.InitializationParameters.CodePackageActivationContext,
                        this._configuration.ConfigPackageName,
                        this._configuration.ReplicatorSecuritySectionName);
                }
            }

            if (string.IsNullOrWhiteSpace(settings.ReplicatorAddress))
            {
                settings.ReplicatorAddress = this.TryGetDefaultReplicatorAddress();
            }

            return(settings);
        }