/// <summary> Read state data function for this storage provider. </summary> /// <see cref="IStorageProvider#ReadStateAsync"/> public virtual async Task ReadStateAsync(string grainType, GrainReference grainReference, IGrainState grainState) { var keys = MakeKeys(grainType, grainReference); if (Log.IsVerbose2) { Log.Verbose2("Read Keys={0}", StorageProviderUtils.PrintKeys(keys)); } string id = HierarchicalKeyStore.MakeStoreKey(keys); IMemoryStorageGrain storageGrain = GetStorageGrain(id); IDictionary <string, object> state = await storageGrain.ReadStateAsync(STATE_STORE_NAME, id); grainState.SetAll(state); }
public IList <IDictionary <string, object> > ReadMultiRow(IList <Tuple <string, string> > keys) { if (keys.Count > numKeyLayers) { throw new ArgumentOutOfRangeException("keys", keys.Count, string.Format("Too many key supplied -- Expected count = {0} Received = {1}", numKeyLayers, keys.Count)); } lock (lockable) { IList <IDictionary <string, object> > results = FindDataStores(keys); #if DEBUG Trace.TraceInformation("ReadMultiRow: Keys={0} returning Results={1}", StorageProviderUtils.PrintKeys(keys), StorageProviderUtils.PrintResults(results)); #endif return(results); } }
/// <summary> Read state data function for this storage provider. </summary> /// <see cref="IGrainStorage.ReadStateAsync"/> public virtual async Task ReadStateAsync(string grainType, GrainReference grainReference, IGrainState grainState) { var keys = MakeKeys(grainType, grainReference); if (logger.IsEnabled(LogLevel.Trace)) { logger.LogTrace("Read Keys={Keys}", StorageProviderUtils.PrintKeys(keys)); } string id = HierarchicalKeyStore.MakeStoreKey(keys); IMemoryStorageGrain storageGrain = GetStorageGrain(id); var state = await storageGrain.ReadStateAsync(STATE_STORE_NAME, id); if (state != null) { grainState.ETag = state.ETag; grainState.State = state.State; } }
/// <summary> Read state data function for this storage provider. </summary> /// <see cref="IStorageProvider.ReadStateAsync"/> public virtual async Task ReadStateAsync(string grainType, GrainReference grainReference, IGrainState grainState) { IList <Tuple <string, string> > keys = MakeKeys(grainType, grainReference).ToList(); if (Log.IsVerbose2) { Log.Verbose2("Read Keys={0}", StorageProviderUtils.PrintKeys(keys)); } string id = HierarchicalKeyStore.MakeStoreKey(keys); IMemoryStorageGrain storageGrain = GetStorageGrain(id); var state = await storageGrain.ReadStateAsync(STATE_STORE_NAME, id); if (state != null && state.State != null) { grainState.ETag = state.ETag; grainState.State = state.State; } }
/// <summary> Read state data function for this storage provider. </summary> /// <see cref="IStorageProvider#ReadStateAsync"/> public virtual async Task ReadStateAsync(string grainType, GrainReference grainReference, GrainState grainState) { var keys = MakeKeys(grainType, grainReference); if (Log.IsVerbose2) { Log.Verbose2("Read Keys={0}", StorageProviderUtils.PrintKeys(keys)); } string id = HierarchicalKeyStore.MakeStoreKey(keys); IMemoryStorageGrain storageGrain = GetStorageGrain(id); Tuple <IDictionary <string, object>, string> result = await storageGrain.ReadStateAsync(STATE_STORE_NAME, id); if (result != null && result.Item1 != null) { grainState.SetAll(result.Item1); grainState.Etag = result.Item2; } }
public IDictionary <string, object> ReadRow(IList <Tuple <string, string> > keys) { if (keys.Count > numKeyLayers) { var error = string.Format("Not enough keys supplied -- Expected count = {0} Received = {1}", numKeyLayers, keys.Count); Trace.TraceError(error); throw new ArgumentOutOfRangeException("keys", keys.Count, error); } lock (lockable) { IDictionary <string, object> data = GetDataStore(keys); #if DEBUG Trace.TraceInformation("ReadMultiRow: Keys={0} returning Data={1}", StorageProviderUtils.PrintKeys(keys), StorageProviderUtils.PrintData(data)); #endif return(data); } }
/// <summary> Delete / Clear state data function for this storage provider. </summary> /// <see cref="IStorageProvider#ClearStateAsync"/> public virtual async Task ClearStateAsync(string grainType, GrainReference grainReference, GrainState grainState) { var keys = MakeKeys(grainType, grainReference); string eTag = grainState.Etag; // TOD: Should this be 'null' for always Delete? if (Log.IsVerbose2) { Log.Verbose2("Delete Keys={0} Etag={1}", StorageProviderUtils.PrintKeys(keys), eTag); } if (eTag != null && eTag != etag) { throw new InconsistentStateException(string.Format("Etag mismatch durign Delete: Expected = {0} Received = {1}", this.etag, eTag)); } string key = HierarchicalKeyStore.MakeStoreKey(keys); IMemoryStorageGrain storageGrain = GetStorageGrain(key); await storageGrain.DeleteStateAsync(STATE_STORE_NAME, key); etag = NewEtag(); }
/// <summary> Delete / Clear state data function for this storage provider. </summary> /// <see cref="IGrainStorage.ClearStateAsync"/> public virtual async Task ClearStateAsync(string grainType, GrainReference grainReference, IGrainState grainState) { var keys = MakeKeys(grainType, grainReference); if (logger.IsEnabled(LogLevel.Trace)) { logger.LogTrace("Delete Keys={Keys} Etag={Etag}", StorageProviderUtils.PrintKeys(keys), grainState.ETag); } string key = HierarchicalKeyStore.MakeStoreKey(keys); IMemoryStorageGrain storageGrain = GetStorageGrain(key); try { await storageGrain.DeleteStateAsync(STATE_STORE_NAME, key, grainState.ETag); grainState.ETag = null; } catch (MemoryStorageEtagMismatchException e) { throw e.AsInconsistentStateException(); } }
/// <summary> Delete / Clear state data function for this storage provider. </summary> /// <see cref="IStorageProvider.ClearStateAsync"/> public virtual async Task ClearStateAsync(string grainType, GrainReference grainReference, IGrainState grainState) { IList <Tuple <string, string> > keys = MakeKeys(grainType, grainReference).ToList(); if (Log.IsVerbose2) { Log.Verbose2("Delete Keys={0} Etag={1}", StorageProviderUtils.PrintKeys(keys), grainState.ETag); } string key = HierarchicalKeyStore.MakeStoreKey(keys); IMemoryStorageGrain storageGrain = GetStorageGrain(key); try { await storageGrain.DeleteStateAsync(STATE_STORE_NAME, key, grainState.ETag); grainState.ETag = null; } catch (MemoryStorageEtagMismatchException e) { throw e.AsInconsistentStateException(); } }
public bool DeleteRow(IList <Tuple <string, string> > keys, string eTag) { if (keys.Count > numKeyLayers) { throw new ArgumentOutOfRangeException("keys", keys.Count, string.Format("Not enough keys supplied -- Expected count = {0} Received = {1}", numKeyLayers, keys.Count)); } string keyStr = MakeStoreKey(keys); lock (lockable) { // No change to Etag #if DEBUG var removedEntry = dataTable.TryGetValue(keyStr, out var data); Trace.TraceInformation("DeleteRow: Keys={0} Removed={2} Data={1} Etag={3}", StorageProviderUtils.PrintKeys(keys), StorageProviderUtils.PrintData(data), removedEntry, Etag); #endif return(dataTable.Remove(keyStr)); } }