private ReminderEntry ConvertFromTableEntry(ReminderTableEntry tableEntry, string eTag) { try { return new ReminderEntry { GrainRef = GrainReference.FromKeyString(tableEntry.GrainReference), ReminderName = tableEntry.ReminderName, StartAt = TraceLogger.ParseDate(tableEntry.StartAt), Period = TimeSpan.Parse(tableEntry.Period), ETag = eTag, }; } catch (Exception exc) { var error = String.Format( "Failed to parse ReminderTableEntry: {0}. This entry is corrupt, going to ignore it.", tableEntry); logger.Error(ErrorCode.AzureTable_49, error, exc); throw; } finally { string serviceIdStr = ReminderTableEntry.ConstructServiceIdStr(remTableManager.ServiceId); if (!tableEntry.ServiceId.Equals(serviceIdStr)) { var error = String.Format( "Read a reminder entry for wrong Service id. Read {0}, but my service id is {1}. Going to discard it.", tableEntry, serviceIdStr); logger.Warn(ErrorCode.AzureTable_ReadWrongReminder, error); throw new ApplicationException(error); } } }
public async Task<bool> RemoveRow(GrainReference grainRef, string reminderName, string eTag) { var entry = new ReminderTableEntry { PartitionKey = ReminderTableEntry.ConstructPartitionKey(remTableManager.ServiceId, grainRef), RowKey = ReminderTableEntry.ConstructRowKey(grainRef, reminderName), ETag = eTag, }; try { if (logger.IsVerbose2) logger.Verbose2("RemoveRow entry = {0}", entry.ToString()); bool result = await remTableManager.DeleteReminderEntryConditionally(entry, eTag); if (result == false) { logger.Warn(ErrorCode.AzureTable_43, String.Format("Delete failed on the reminder table. Will retry. Entry = {0}", entry)); } return result; } catch (Exception exc) { logger.Warn(ErrorCode.AzureTable_44, String.Format("Intermediate error when deleting reminder entry {0} to the table {1}.", entry, remTableManager.TableName), exc); throw; } }