/// <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); }
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); }
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); } }
/// <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) { }