コード例 #1
0
        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();
        }
コード例 #2
0
 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;
 }
コード例 #3
0
 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;
 }