Пример #1
0
        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();
        }
Пример #2
0
        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();
        }
Пример #3
0
        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);
            }
        }
Пример #4
0
        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();
            }
        }
Пример #5
0
        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);
        }
Пример #6
0
        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;
        }
Пример #10
0
        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();
        }
Пример #11
0
        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();
            }
        }
Пример #12
0
        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;
        }
Пример #13
0
        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);
            }
        }
Пример #14
0
        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();
        }