Ejemplo n.º 1
0
        /// <summary>
        /// <see cref="ReliableCollectionsActorStateProvider"/> is currently in PREVIEW.
        /// Initializes a new instance of the ReliableDictionaryActorStateProvider class
        /// with specified configuration.
        /// </summary>
        /// <param name="stateManagerConfig">
        /// A <see cref="ReliableStateManagerConfiguration"/> that describes <see cref="IReliableStateManager"/> configuration.
        /// </param>
        /// <param name="actorStateDictionaryCount">
        /// Number of <see cref="IReliableDictionary{TKey, TValue}"/> across which actor states will be partitioned and stored.
        /// </param>
        /// <param name="reminderDictionaryCount">
        /// Number of <see cref="IReliableDictionary{TKey, TValue}"/> across which reminders will be partitioned and stored.
        /// </param>
        /// <remarks>
        /// Values for <paramref name="actorStateDictionaryCount"/> and <paramref name="reminderDictionaryCount"/> can be specified
        /// only once when the Actor Service is created for first time. It cannot be changed after that and
        /// <see cref="ReliableCollectionsActorStateProvider"/> will ignore any values that are different from first time.
        /// </remarks>
        public ReliableCollectionsActorStateProvider(
            ReliableStateManagerConfiguration stateManagerConfig,
            int actorStateDictionaryCount,
            int reminderDictionaryCount)
        {
            if (actorStateDictionaryCount < 1)
            {
                throw new ArgumentException("Value for actorStateDictionaryCount cannot be less than 1.");
            }

            if (reminderDictionaryCount < 1)
            {
                throw new ArgumentException("Value for reminderDictionaryCount cannot be less than 1.");
            }

            this.traceId = string.Empty;
            this.isLogicalTimeManagerInitialized = false;
            this.isDictionariesInitialized       = false;
            this.replicaRole = ReplicaRole.Unknown;
            this.transientErrorRetryDelay             = TimeSpan.FromSeconds(DefaultTransientErrorRetryDelaySeconds);
            this.userDefinedStateManagerConfig        = stateManagerConfig;
            this.userDefinedActorStateDictionaryCount = actorStateDictionaryCount;
            this.userDefinedReminderDictionaryCount   = reminderDictionaryCount;
            this.logicalTimeManager   = new VolatileLogicalTimeManager(this);
            this.actorStateSerializer = new ActorStateProviderSerializer();
            this.stateProviderHelper  = new ActorStateProviderHelper(this);
        }
Ejemplo n.º 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);
        }
Ejemplo n.º 3
0
        public void ResolveTest()
        {
            using (var container = new WindsorContainer())
            {
                var resolver = new StatefulServiceResolver(container.Kernel, typeof(TestStatefulService))
                {
                };

                var context = MockStatefulServiceContextFactory.Default;

                Assert.Throws <ComponentNotFoundException>(() => resolver.Resolve(context));

                container.Register(Component.For <TestStatefulService>().LifestyleTransient());

                var service = resolver.Resolve(context);

                Assert.NotNull(service);
                var testService = Assert.IsType <TestStatefulService>(service);

                Assert.Null(testService.ReliableStateManagerReplica);

                var stateManagerConfig         = new ReliableStateManagerConfiguration();
                var stateManagerDependencyType = typeof(IReliableStateManagerReplica);

                resolver = new StatefulServiceResolver(container.Kernel, typeof(TestStatefulService))
                {
                    StateManagerConfiguration  = stateManagerConfig,
                    StateManagerDependencyType = stateManagerDependencyType
                };

                service = resolver.Resolve(context);

                Assert.NotNull(service);
                testService = Assert.IsType <TestStatefulService>(service);

                Assert.NotNull(testService.ReliableStateManagerReplica);
            }
        }
Ejemplo n.º 4
0
 /// <summary>
 /// <see cref="ReliableCollectionsActorStateProvider"/> is currently in PREVIEW.
 /// Initializes a new instance of the ReliableCollectionsActorStateProvider class.
 /// with specified configuration. This is currently in PREVIEW.
 /// </summary>
 /// <param name="stateManagerConfig">
 /// A <see cref="ReliableStateManagerConfiguration"/> that describes <see cref="IReliableStateManager"/> configuration.
 /// </param>
 public ReliableCollectionsActorStateProvider(ReliableStateManagerConfiguration stateManagerConfig)
     : this(stateManagerConfig, DefaultActorStateDictionaryCount, DefaultReminderDictionaryCount)
 {
 }