public async Task <ReminderEntry> ReadRow(GrainReference grainRef, string reminderName) { try { var response = await ExecuteWithRetries(async() => { var pk = new PartitionKey(ReminderEntity.ConstructPartitionKey(this._serviceId, grainRef)); ItemResponse <ReminderEntity> response = null; try { response = await this._container.ReadItemAsync <ReminderEntity>( ReminderEntity.ConstructId(grainRef, reminderName), pk); } catch (CosmosException ce) when(ce.StatusCode == HttpStatusCode.NotFound) { return(null); } return(response.Resource); }).ConfigureAwait(false); return(response != null?this.FromEntity(response) : null); } catch (Exception exc) { this._logger.LogError(exc, $"Failure reading reminder {reminderName} for service {this._serviceId} and grain {grainRef.ToKeyString()}."); throw; } }
public async Task <bool> RemoveRow(GrainReference grainRef, string reminderName, string eTag) { try { var response = await ExecuteWithRetries(() => { var pk = new PartitionKey(ReminderEntity.ConstructPartitionKey(this._serviceId, grainRef)); return(this._container.DeleteItemAsync <ReminderEntity>( ReminderEntity.ConstructId(grainRef, reminderName), pk, new ItemRequestOptions { IfMatchEtag = eTag } )); }).ConfigureAwait(false); return(true); } catch (CosmosException dce) when(dce.StatusCode == HttpStatusCode.PreconditionFailed) { return(false); } catch (Exception exc) { this._logger.LogError(exc, $"Failure removing reminders for Service {this._serviceId} with grainId {grainRef.ToKeyString()} and name {reminderName}."); throw; } }
public async Task <string> UpsertRow(ReminderEntry entry) { try { ReminderEntity entity = this.ToEntity(entry); var response = await ExecuteWithRetries(() => { var pk = new PartitionKey(ReminderEntity.ConstructPartitionKey(this._serviceId, entry.GrainRef)); return(this._container.UpsertItemAsync( entity, pk, new ItemRequestOptions { IfMatchEtag = entry.ETag } )); }).ConfigureAwait(false); return(response.Resource.ETag); } catch (Exception exc) { this._logger.LogError(exc, $"Failure to upsert reminder for Service {this._serviceId}."); throw; } }
private ReminderEntity ToEntity(ReminderEntry entry) { return(new ReminderEntity { Id = ReminderEntity.ConstructId(entry.GrainRef, entry.ReminderName), PartitionKey = ReminderEntity.ConstructPartitionKey(this._serviceId, entry.GrainRef), ServiceId = this._serviceId, GrainHash = entry.GrainRef.GetUniformHashCode(), GrainId = entry.GrainRef.ToKeyString(), Name = entry.ReminderName, StartAt = entry.StartAt, Period = entry.Period }); }
public async Task <ReminderTableData> ReadRows(GrainReference grainRef) { try { var response = await ExecuteWithRetries(async() => { var pk = new PartitionKey(ReminderEntity.ConstructPartitionKey(this._serviceId, grainRef)); var query = this._container.GetItemLinqQueryable <ReminderEntity>( requestOptions: new QueryRequestOptions { PartitionKey = new PartitionKey(ReminderEntity.ConstructPartitionKey(this._serviceId, grainRef)) } ).ToFeedIterator(); var reminders = new List <ReminderEntity>(); string continuation = string.Empty; do { var queryResponse = await query.ReadNextAsync(); if (queryResponse != null && queryResponse.Count > 0) { reminders.AddRange(queryResponse.ToArray()); } else { break; } } while (query.HasMoreResults); return(reminders); }).ConfigureAwait(false); return(new ReminderTableData(response.Select(this.FromEntity))); } catch (Exception exc) { this._logger.LogError(exc, $"Failure reading reminders for Grain Type {grainRef.InterfaceName} with Id {grainRef.ToKeyString()}."); throw; } }