/// <summary> /// Async method to cause write of the current grain state data into backing store. /// </summary> public async Task ClearStateAsync() { const string what = "ClearState"; try { GrainRuntime.CheckRuntimeContext(); Stopwatch sw = Stopwatch.StartNew(); // Clear (most likely Delete) state from external storage await store.ClearStateAsync(name, grainRef, grainState); sw.Stop(); // Reset the in-memory copy of the state grainState.State = Activator.CreateInstance <TState>(); // Update counters StorageStatisticsGroup.OnStorageDelete(name, grainRef, sw.Elapsed); } catch (Exception exc) { StorageStatisticsGroup.OnStorageDeleteError(name, grainRef); string errMsg = MakeErrorMsg(what, exc); this.logger.Error((int)ErrorCode.StorageProvider_DeleteFailed, errMsg, exc); if (!(exc is OrleansException)) { throw new OrleansException(errMsg, exc); } throw; } }
/// <summary> /// Async method to cause refresh of the current grain state data from backing store. /// Any previous contents of the grain state data will be overwritten. /// </summary> public async Task ReadStateAsync() { const string what = "ReadState"; Stopwatch sw = Stopwatch.StartNew(); try { GrainRuntime.CheckRuntimeContext(); await store.ReadStateAsync(name, grainRef, grainState); StorageStatisticsGroup.OnStorageRead(name, grainRef, sw.Elapsed); } catch (Exception exc) { StorageStatisticsGroup.OnStorageReadError(name, grainRef); string errMsg = MakeErrorMsg(what, exc); this.logger.Error((int)ErrorCode.StorageProvider_ReadFailed, errMsg, exc); if (!(exc is OrleansException)) { throw new OrleansException(errMsg, exc); } throw; } finally { sw.Stop(); } }
/// <summary> /// Async method to cause write of the current grain state data into backing store. /// </summary> public async Task WriteStateAsync() { const string what = "WriteState"; try { GrainRuntime.CheckRuntimeContext(); Stopwatch sw = Stopwatch.StartNew(); await store.WriteStateAsync(name, grainRef, grainState); sw.Stop(); StorageStatisticsGroup.OnStorageWrite(name, grainRef, sw.Elapsed); } catch (Exception exc) { StorageStatisticsGroup.OnStorageWriteError(name, grainRef); string errMsgToLog = MakeErrorMsg(what, exc); this.logger.Error((int)ErrorCode.StorageProvider_WriteFailed, errMsgToLog, exc); // If error is not specialization of OrleansException, wrap it if (!(exc is OrleansException)) { throw new OrleansException(errMsgToLog, exc); } throw; } }