private async Task DoLoad()
        {
            this.logger.Debug("DoLoad");
            // load inital state
            TransactionalStorageLoadResponse <TState> loadResponse = await this.storage.Load(StateName);

            this.eTag     = loadResponse.ETag;
            this.metadata = Metadata.FromString(loadResponse.Metadata);
            this.version  = this.metadata.HighestVersion;
            this.highestReadTransactionId = this.metadata.HighestReadTransactionId;
            this.commitedState            = loadResponse.CommittedState;
            foreach (PendingTransactionState <TState> pendingState in loadResponse.PendingStates)
            {
                if (this.logger.IsEnabled(LogLevel.Debug))
                {
                    this.logger.Debug("Rebuilding log from storage for {0}", pendingState.SequenceId);
                }
                this.log[pendingState.SequenceId] = new LogRecord <TState>
                {
                    NewVal  = pendingState.State,
                    Version = (TransactionalResourceVersion.TryParse(pendingState.TransactionId, out TransactionalResourceVersion version)) ? version : default(TransactionalResourceVersion)
                };
            }

            UpdateActiveState();
        }
Exemple #2
0
        private async Task DoRecovery()
        {
            // load inital state
            TransactionalStorageLoadResponse <TState> loadResponse = await this.storage.Load(StateName);

            this.eTag     = loadResponse.ETag;
            this.metadata = Metadata.FromString(loadResponse.Metadata);
            this.highestReadTransactionId = this.metadata.HighestReadTransactionId;
            this.version = this.metadata.HighestVersion;
            this.value   = loadResponse.CommittedState;
            this.log.Clear();
            foreach (PendingTransactionState <TState> pendingState in loadResponse.PendingStates)
            {
                this.log[pendingState.SequenceId] = new LogRecord <TState>
                {
                    NewVal  = pendingState.State,
                    Version = (TransactionalResourceVersion.TryParse(pendingState.TransactionId, out TransactionalResourceVersion version)) ? version : default(TransactionalResourceVersion)
                };
            }

            // Rollback any known aborted transactions
            Restore();
        }