private async Task OnSetupState(CancellationToken ct) { if (ct.IsCancellationRequested) { return; } var boundExtension = await this.runtime.BindExtension <TransactionParticipantExtension, ITransactionParticipantExtension>(() => new TransactionParticipantExtension()); boundExtension.Item1.Register(this.config.StateName, this); this.thisParticipant = boundExtension.Item2.AsTransactionParticipant(this.config.StateName); this.logger = loggerFactory.CreateLogger($"{context.GrainType.Name}.{this.config.StateName}.{this.thisParticipant.ToShortString()}"); var storageFactory = this.context.ActivationServices.GetRequiredService <INamedTransactionalStateStorageFactory>(); ITransactionalStateStorage <TState> storage = storageFactory.Create <TState>(this.config.StorageName, this.config.StateName); Action deactivate = () => grainRuntime.DeactivateOnIdle(context.GrainInstance); var options = this.context.ActivationServices.GetRequiredService <IOptions <TransactionalStateOptions> >(); var clock = this.context.ActivationServices.GetRequiredService <IClock>(); this.queue = new TransactionQueue <TState>(options, this.thisParticipant, deactivate, storage, this.serializerSettings, clock, logger); this.resource = new TransactionalResource <TState>(this.queue); this.transactionManager = new TransactionManager <TState>(this.queue); // recover state await this.queue.NotifyOfRestore(); }
public DeactivationTransactionalResource(TransactionDeactivationPhaseReference deactivationPhaseReference, TransactionalResource <TState> tResource, IGrainActivationContext activationContext, ILogger logger, IGrainRuntime grainRuntime) { this.grainRuntime = grainRuntime; this.tResource = tResource; this.deactivationPhaseReference = deactivationPhaseReference; this.logger = logger; this.context = activationContext; }
public FaultInjectionTransactionalResource(IControlledTransactionFaultInjector faultInjector, FaultInjectionControl faultInjectionControl, TransactionalResource <TState> tResource, IGrainActivationContext activationContext, ILogger logger, IGrainRuntime grainRuntime) { this.grainRuntime = grainRuntime; this.tResource = tResource; this.faultInjectionControl = faultInjectionControl; this.logger = logger; this.faultInjector = faultInjector; this.context = activationContext; }