public void RemoveTimeoutBy(Guid sagaId) { var context = new ServiceContext(account.CreateCloudTableClient()); var query = (from c in context.TimeoutData where c.PartitionKey == sagaId.ToString() select c); var results = query .Take(1000) // fixes isue #208. .AsTableServiceQuery(context) // fixes issue #191 .ToList(); foreach (var timeoutDataEntityBySaga in results) { RemoveState(timeoutDataEntityBySaga.StateAddress); TimeoutDataEntity timeoutDataEntityByTime; if (TryGetTimeoutData(context, timeoutDataEntityBySaga.Time.ToString(PartitionKeyScope), timeoutDataEntityBySaga.RowKey, out timeoutDataEntityByTime)) { context.DeleteObject(timeoutDataEntityByTime); } TimeoutDataEntity timeoutDataEntity; if (TryGetTimeoutData(context, timeoutDataEntityBySaga.RowKey, string.Empty, out timeoutDataEntity)) { context.DeleteObject(timeoutDataEntity); } context.DeleteObject(timeoutDataEntityBySaga); } context.SaveChanges(); }
public void Add(TimeoutData timeout) { var context = new ServiceContext(account.CreateCloudTableClient()); var hash = Hash(timeout); TimeoutDataEntity timeoutDataEntity; if (TryGetTimeoutData(context, hash, string.Empty, out timeoutDataEntity)) { return; } var stateAddress = Upload(timeout.State, hash); var headers = Serialize(timeout.Headers); if (!TryGetTimeoutData(context, timeout.Time.ToString(PartitionKeyScope), stateAddress, out timeoutDataEntity)) { context.AddObject(ServiceContext.TimeoutDataTableName, new TimeoutDataEntity(timeout.Time.ToString(PartitionKeyScope), stateAddress) { Destination = timeout.Destination.ToString(), SagaId = timeout.SagaId, StateAddress = stateAddress, Time = timeout.Time, CorrelationId = timeout.CorrelationId, OwningTimeoutManager = timeout.OwningTimeoutManager, Headers = headers }); } timeout.Id = stateAddress; if (timeout.SagaId != default(Guid) && !TryGetTimeoutData(context, timeout.SagaId.ToString(), stateAddress, out timeoutDataEntity)) { context.AddObject(ServiceContext.TimeoutDataTableName, new TimeoutDataEntity(timeout.SagaId.ToString(), stateAddress) { Destination = timeout.Destination.ToString(), SagaId = timeout.SagaId, StateAddress = stateAddress, Time = timeout.Time, CorrelationId = timeout.CorrelationId, OwningTimeoutManager = timeout.OwningTimeoutManager, Headers = headers }); } context.AddObject(ServiceContext.TimeoutDataTableName, new TimeoutDataEntity(stateAddress, string.Empty) { Destination = timeout.Destination.ToString(), SagaId = timeout.SagaId, StateAddress = stateAddress, Time = timeout.Time, CorrelationId = timeout.CorrelationId, OwningTimeoutManager = timeout.OwningTimeoutManager, Headers = headers }); context.SaveChanges(); }
public void RemoveTimeoutBy(Guid sagaId) { var context = new ServiceContext(account.CreateCloudTableClient()); try { var results = (from c in context.TimeoutData where c.PartitionKey == sagaId.ToString() select c).ToList(); foreach (var timeoutDataEntityBySaga in results) { RemoveState(timeoutDataEntityBySaga.StateAddress); TimeoutDataEntity timeoutDataEntityByTime; if (TryGetTimeoutData(context, timeoutDataEntityBySaga.Time.ToString(PartitionKeyScope), timeoutDataEntityBySaga.RowKey, out timeoutDataEntityByTime)) { context.DeleteObject(timeoutDataEntityByTime); } TimeoutDataEntity timeoutDataEntity; if (TryGetTimeoutData(context, timeoutDataEntityBySaga.RowKey, string.Empty, out timeoutDataEntity)) { context.DeleteObject(timeoutDataEntity); } context.DeleteObject(timeoutDataEntityBySaga); } context.SaveChanges(); } catch (Exception ex) { Logger.Debug(string.Format("Failed to clean up timeouts for saga {0}", sagaId), ex); } }
private void MigrateExistingTimeouts(ServiceContext context) { var existing = (from c in context.TimeoutData where c.PartitionKey == "TimeoutData" select c).ToList(); foreach (var timeout in existing) { TimeoutDataEntity timeoutDataEntity; if (!TryGetTimeoutData(context, timeout.Time.ToString(PartitionKeyScope), timeout.RowKey, out timeoutDataEntity)) { context.AddObject(ServiceContext.TimeoutDataTableName, new TimeoutDataEntity(timeout.Time.ToString(PartitionKeyScope), timeout.RowKey) { Destination = timeout.Destination, SagaId = timeout.SagaId, StateAddress = timeout.RowKey, Time = timeout.Time, CorrelationId = timeout.CorrelationId, OwningTimeoutManager = timeout.OwningTimeoutManager }); } if (!TryGetTimeoutData(context, timeout.SagaId.ToString(), timeout.RowKey, out timeoutDataEntity)) { context.AddObject(ServiceContext.TimeoutDataTableName, new TimeoutDataEntity(timeout.SagaId.ToString(), timeout.RowKey) { Destination = timeout.Destination, SagaId = timeout.SagaId, StateAddress = timeout.RowKey, Time = timeout.Time, CorrelationId = timeout.CorrelationId, OwningTimeoutManager = timeout.OwningTimeoutManager }); } if (!TryGetTimeoutData(context, timeout.RowKey, string.Empty, out timeoutDataEntity)) { context.AddObject(ServiceContext.TimeoutDataTableName, new TimeoutDataEntity(timeout.RowKey, string.Empty) { Destination = timeout.Destination, SagaId = timeout.SagaId, StateAddress = timeout.RowKey, Time = timeout.Time, CorrelationId = timeout.CorrelationId, OwningTimeoutManager = timeout.OwningTimeoutManager }); } context.DeleteObject(timeout); context.SaveChanges(); } }
public bool TryRemove(string timeoutId, out TimeoutData timeoutData) { timeoutData = null; var context = new ServiceContext(account.CreateCloudTableClient()); try { TimeoutDataEntity timeoutDataEntity; if (!TryGetTimeoutData(context, timeoutId, string.Empty, out timeoutDataEntity)) { return(false); } timeoutData = new TimeoutData { Destination = Address.Parse(timeoutDataEntity.Destination), SagaId = timeoutDataEntity.SagaId, State = Download(timeoutDataEntity.StateAddress), Time = timeoutDataEntity.Time, CorrelationId = timeoutDataEntity.CorrelationId, Id = timeoutDataEntity.RowKey, OwningTimeoutManager = timeoutDataEntity.OwningTimeoutManager, Headers = Deserialize(timeoutDataEntity.Headers) }; TimeoutDataEntity timeoutDataEntityBySaga; if (TryGetTimeoutData(context, timeoutDataEntity.SagaId.ToString(), timeoutId, out timeoutDataEntityBySaga)) { context.DeleteObject(timeoutDataEntityBySaga); } TimeoutDataEntity timeoutDataEntityByTime; if (TryGetTimeoutData(context, timeoutDataEntity.Time.ToString(PartitionKeyScope), timeoutId, out timeoutDataEntityByTime)) { context.DeleteObject(timeoutDataEntityByTime); } RemoveState(timeoutDataEntity.StateAddress); context.DeleteObject(timeoutDataEntity); context.SaveChanges(); } catch (Exception ex) { Logger.Debug(string.Format("Failed to clean up timeout {0}", timeoutId), ex); } return(true); }
public bool TryRemove(string timeoutId, out TimeoutData timeoutData) { timeoutData = null; var context = new ServiceContext(account.CreateCloudTableClient()) { IgnoreResourceNotFoundException = true }; TimeoutDataEntity timeoutDataEntity; if (!TryGetTimeoutData(context, timeoutId, string.Empty, out timeoutDataEntity)) { return(false); } timeoutData = new TimeoutData { Destination = Address.Parse(timeoutDataEntity.Destination), SagaId = timeoutDataEntity.SagaId, State = Download(timeoutDataEntity.StateAddress), Time = timeoutDataEntity.Time, Id = timeoutDataEntity.RowKey, OwningTimeoutManager = timeoutDataEntity.OwningTimeoutManager, Headers = Deserialize(timeoutDataEntity.Headers) }; TimeoutDataEntity timeoutDataEntityBySaga; if (TryGetTimeoutData(context, timeoutDataEntity.SagaId.ToString(), timeoutId, out timeoutDataEntityBySaga)) { context.DeleteObject(timeoutDataEntityBySaga); } TimeoutDataEntity timeoutDataEntityByTime; if (TryGetTimeoutData(context, timeoutDataEntity.Time.ToString(PartitionKeyScope), timeoutId, out timeoutDataEntityByTime)) { context.DeleteObject(timeoutDataEntityByTime); } RemoveState(timeoutDataEntity.StateAddress); context.DeleteObject(timeoutDataEntity); context.SaveChanges(); return(true); }
public void Add(TimeoutData timeout) { var context = new ServiceContext(account.CreateCloudTableClient()){ IgnoreResourceNotFoundException = true}; string identifier; timeout.Headers.TryGetValue(Headers.MessageId, out identifier); if (string.IsNullOrEmpty(identifier)) { identifier = Guid.NewGuid().ToString(); } TimeoutDataEntity timeoutDataEntity; if (TryGetTimeoutData(context, identifier, string.Empty, out timeoutDataEntity)) return; Upload(timeout.State, identifier); var headers = Serialize(timeout.Headers); if (!TryGetTimeoutData(context, timeout.Time.ToString(PartitionKeyScope), identifier, out timeoutDataEntity)) context.AddObject(ServiceContext.TimeoutDataTableName, new TimeoutDataEntity(timeout.Time.ToString(PartitionKeyScope), identifier) { Destination = timeout.Destination.ToString(), SagaId = timeout.SagaId, StateAddress = identifier, Time = timeout.Time, OwningTimeoutManager = timeout.OwningTimeoutManager, Headers = headers }); timeout.Id = identifier; if (timeout.SagaId != default(Guid) && !TryGetTimeoutData(context, timeout.SagaId.ToString(), identifier, out timeoutDataEntity)) context.AddObject(ServiceContext.TimeoutDataTableName, new TimeoutDataEntity(timeout.SagaId.ToString(), identifier) { Destination = timeout.Destination.ToString(), SagaId = timeout.SagaId, StateAddress = identifier, Time = timeout.Time, OwningTimeoutManager = timeout.OwningTimeoutManager, Headers = headers }); context.AddObject(ServiceContext.TimeoutDataTableName, new TimeoutDataEntity(identifier, string.Empty) { Destination = timeout.Destination.ToString(), SagaId = timeout.SagaId, StateAddress = identifier, Time = timeout.Time, OwningTimeoutManager = timeout.OwningTimeoutManager, Headers = headers }); context.SaveChanges(); }
public void RemoveTimeoutBy(Guid sagaId) { var context = new ServiceContext(account.CreateCloudTableClient()); var query = (from c in context.TimeoutData where c.PartitionKey == sagaId.ToString() select c); var results = query .Take(1000) // fixes isue #208. .AsTableServiceQuery(context) // fixes issue #191 .ToList(); foreach (var timeoutDataEntityBySaga in results) { RemoveState(timeoutDataEntityBySaga.StateAddress); TimeoutDataEntity timeoutDataEntityByTime; if (TryGetTimeoutData(context, timeoutDataEntityBySaga.Time.ToString(PartitionKeyScope), timeoutDataEntityBySaga.RowKey, out timeoutDataEntityByTime)) context.DeleteObject(timeoutDataEntityByTime); TimeoutDataEntity timeoutDataEntity; if (TryGetTimeoutData(context, timeoutDataEntityBySaga.RowKey, string.Empty, out timeoutDataEntity)) context.DeleteObject(timeoutDataEntity); context.DeleteObject(timeoutDataEntityBySaga); } context.SaveChanges(); }
public bool TryRemove(string timeoutId, out TimeoutData timeoutData) { timeoutData = null; var context = new ServiceContext(account.CreateCloudTableClient()) { IgnoreResourceNotFoundException = true}; TimeoutDataEntity timeoutDataEntity; if (!TryGetTimeoutData(context, timeoutId, string.Empty, out timeoutDataEntity)) { return false; } timeoutData = new TimeoutData { Destination = Address.Parse(timeoutDataEntity.Destination), SagaId = timeoutDataEntity.SagaId, State = Download(timeoutDataEntity.StateAddress), Time = timeoutDataEntity.Time, Id = timeoutDataEntity.RowKey, OwningTimeoutManager = timeoutDataEntity.OwningTimeoutManager, Headers = Deserialize(timeoutDataEntity.Headers) }; TimeoutDataEntity timeoutDataEntityBySaga; if (TryGetTimeoutData(context, timeoutDataEntity.SagaId.ToString(), timeoutId, out timeoutDataEntityBySaga)) { context.DeleteObject(timeoutDataEntityBySaga); } TimeoutDataEntity timeoutDataEntityByTime; if (TryGetTimeoutData(context, timeoutDataEntity.Time.ToString(PartitionKeyScope), timeoutId, out timeoutDataEntityByTime)) { context.DeleteObject(timeoutDataEntityByTime); } RemoveState(timeoutDataEntity.StateAddress); context.DeleteObject(timeoutDataEntity); context.SaveChanges(); return true; }
public void Add(TimeoutData timeout) { var context = new ServiceContext(account.CreateCloudTableClient()); var hash = Hash(timeout); TimeoutDataEntity timeoutDataEntity; if (TryGetTimeoutData(context, hash, string.Empty, out timeoutDataEntity)) return; var stateAddress = Upload(timeout.State, hash); var headers = Serialize(timeout.Headers); if (!TryGetTimeoutData(context, timeout.Time.ToString(PartitionKeyScope), stateAddress, out timeoutDataEntity)) context.AddObject(ServiceContext.TimeoutDataTableName, new TimeoutDataEntity(timeout.Time.ToString(PartitionKeyScope), stateAddress) { Destination = timeout.Destination.ToString(), SagaId = timeout.SagaId, StateAddress = stateAddress, Time = timeout.Time, CorrelationId = timeout.CorrelationId, OwningTimeoutManager = timeout.OwningTimeoutManager, Headers = headers }); timeout.Id = stateAddress; if (timeout.SagaId != default(Guid) && !TryGetTimeoutData(context, timeout.SagaId.ToString(), stateAddress, out timeoutDataEntity)) context.AddObject(ServiceContext.TimeoutDataTableName, new TimeoutDataEntity(timeout.SagaId.ToString(), stateAddress) { Destination = timeout.Destination.ToString(), SagaId = timeout.SagaId, StateAddress = stateAddress, Time = timeout.Time, CorrelationId = timeout.CorrelationId, OwningTimeoutManager = timeout.OwningTimeoutManager, Headers = headers }); context.AddObject(ServiceContext.TimeoutDataTableName, new TimeoutDataEntity(stateAddress, string.Empty) { Destination = timeout.Destination.ToString(), SagaId = timeout.SagaId, StateAddress = stateAddress, Time = timeout.Time, CorrelationId = timeout.CorrelationId, OwningTimeoutManager = timeout.OwningTimeoutManager, Headers = headers }); context.SaveChanges(); }
private void MigrateExistingTimeouts(ServiceContext context) { var existing = (from c in context.TimeoutData where c.PartitionKey == "TimeoutData" select c).ToList(); foreach (var timeout in existing) { TimeoutDataEntity timeoutDataEntity; if (!TryGetTimeoutData(context, timeout.Time.ToString(PartitionKeyScope), timeout.RowKey, out timeoutDataEntity)) context.AddObject(ServiceContext.TimeoutDataTableName, new TimeoutDataEntity(timeout.Time.ToString(PartitionKeyScope), timeout.RowKey) { Destination = timeout.Destination, SagaId = timeout.SagaId, StateAddress = timeout.RowKey, Time = timeout.Time, CorrelationId = timeout.CorrelationId, OwningTimeoutManager = timeout.OwningTimeoutManager }); if (!TryGetTimeoutData(context, timeout.SagaId.ToString(), timeout.RowKey, out timeoutDataEntity)) context.AddObject(ServiceContext.TimeoutDataTableName, new TimeoutDataEntity(timeout.SagaId.ToString(), timeout.RowKey) { Destination = timeout.Destination, SagaId = timeout.SagaId, StateAddress = timeout.RowKey, Time = timeout.Time, CorrelationId = timeout.CorrelationId, OwningTimeoutManager = timeout.OwningTimeoutManager }); if (!TryGetTimeoutData(context, timeout.RowKey, string.Empty, out timeoutDataEntity)) context.AddObject(ServiceContext.TimeoutDataTableName, new TimeoutDataEntity(timeout.RowKey, string.Empty) { Destination = timeout.Destination, SagaId = timeout.SagaId, StateAddress = timeout.RowKey, Time = timeout.Time, CorrelationId = timeout.CorrelationId, OwningTimeoutManager = timeout.OwningTimeoutManager }); context.DeleteObject(timeout); context.SaveChanges(); } }
public bool TryRemove(string timeoutId, out TimeoutData timeoutData) { timeoutData = null; var context = new ServiceContext(account.CreateCloudTableClient()); try { TimeoutDataEntity timeoutDataEntity; if (!TryGetTimeoutData(context, timeoutId, string.Empty, out timeoutDataEntity)) { return false; } timeoutData = new TimeoutData { Destination = Address.Parse(timeoutDataEntity.Destination), SagaId = timeoutDataEntity.SagaId, State = Download(timeoutDataEntity.StateAddress), Time = timeoutDataEntity.Time, CorrelationId = timeoutDataEntity.CorrelationId, Id = timeoutDataEntity.RowKey, OwningTimeoutManager = timeoutDataEntity.OwningTimeoutManager, Headers = Deserialize(timeoutDataEntity.Headers) }; TimeoutDataEntity timeoutDataEntityBySaga; if (TryGetTimeoutData(context, timeoutDataEntity.SagaId.ToString(), timeoutId, out timeoutDataEntityBySaga)) { context.DeleteObject(timeoutDataEntityBySaga); } TimeoutDataEntity timeoutDataEntityByTime; if (TryGetTimeoutData(context, timeoutDataEntity.Time.ToString(PartitionKeyScope), timeoutId, out timeoutDataEntityByTime)) { context.DeleteObject(timeoutDataEntityByTime); } RemoveState(timeoutDataEntity.StateAddress); context.DeleteObject(timeoutDataEntity); context.SaveChanges(); } catch (Exception ex) { Logger.Debug(string.Format("Failed to clean up timeout {0}", timeoutId), ex); } return true; }
public void RemoveTimeoutBy(Guid sagaId) { var context = new ServiceContext(account.CreateCloudTableClient()); try { var results = (from c in context.TimeoutData where c.PartitionKey == sagaId.ToString() select c).ToList(); foreach (var timeoutDataEntityBySaga in results) { RemoveState(timeoutDataEntityBySaga.StateAddress); TimeoutDataEntity timeoutDataEntityByTime; if (TryGetTimeoutData(context, timeoutDataEntityBySaga.Time.ToString(PartitionKeyScope), timeoutDataEntityBySaga.RowKey, out timeoutDataEntityByTime)) context.DeleteObject(timeoutDataEntityByTime); TimeoutDataEntity timeoutDataEntity; if (TryGetTimeoutData(context, timeoutDataEntityBySaga.RowKey, string.Empty, out timeoutDataEntity)) context.DeleteObject(timeoutDataEntity); context.DeleteObject(timeoutDataEntityBySaga); } context.SaveChanges(); } catch (Exception ex) { Logger.Debug(string.Format("Failed to clean up timeouts for saga {0}", sagaId), ex); } }
public void Add(TimeoutData timeout) { var context = new ServiceContext(account.CreateCloudTableClient()) { IgnoreResourceNotFoundException = true }; string identifier; timeout.Headers.TryGetValue(Headers.MessageId, out identifier); if (string.IsNullOrEmpty(identifier)) { identifier = Guid.NewGuid().ToString(); } TimeoutDataEntity timeoutDataEntity; if (TryGetTimeoutData(context, identifier, string.Empty, out timeoutDataEntity)) { return; } Upload(timeout.State, identifier); var headers = Serialize(timeout.Headers); if (!TryGetTimeoutData(context, timeout.Time.ToString(PartitionKeyScope), identifier, out timeoutDataEntity)) { context.AddObject(ServiceContext.TimeoutDataTableName, new TimeoutDataEntity(timeout.Time.ToString(PartitionKeyScope), identifier) { Destination = timeout.Destination.ToString(), SagaId = timeout.SagaId, StateAddress = identifier, Time = timeout.Time, OwningTimeoutManager = timeout.OwningTimeoutManager, Headers = headers }); } timeout.Id = identifier; if (timeout.SagaId != default(Guid) && !TryGetTimeoutData(context, timeout.SagaId.ToString(), identifier, out timeoutDataEntity)) { context.AddObject(ServiceContext.TimeoutDataTableName, new TimeoutDataEntity(timeout.SagaId.ToString(), identifier) { Destination = timeout.Destination.ToString(), SagaId = timeout.SagaId, StateAddress = identifier, Time = timeout.Time, OwningTimeoutManager = timeout.OwningTimeoutManager, Headers = headers }); } context.AddObject(ServiceContext.TimeoutDataTableName, new TimeoutDataEntity(identifier, string.Empty) { Destination = timeout.Destination.ToString(), SagaId = timeout.SagaId, StateAddress = identifier, Time = timeout.Time, OwningTimeoutManager = timeout.OwningTimeoutManager, Headers = headers }); context.SaveChanges(); }