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(); }
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(); }