/// <summary> /// Removes the timeout if it hasn't been previously removed. /// </summary> /// <param name="timeoutId">The timeout id to remove.</param> /// <param name="timeoutData">The timeout data of the removed timeout.</param> /// <returns> /// <c>true</c> it the timeout was successfully removed. /// </returns> public bool TryRemove(string timeoutId, out Timeout.Core.TimeoutData timeoutData) { timeoutData = null; var collection = this.mongoDatabase.GetCollection <TimeoutData>(TimeoutDataName); var findAndRemoveArgs = new FindAndRemoveArgs { Query = Query <TimeoutData> .EQ(t => t.Id, timeoutId) }; var result = collection.FindAndRemove(findAndRemoveArgs); if (!result.Ok) { throw new InvalidOperationException( string.Format("Unable to remove timeout for id {0}: {1}", timeoutId, result.ErrorMessage)); } var data = result.GetModifiedDocumentAs <TimeoutData>(); if (data != null) { timeoutData = new Timeout.Core.TimeoutData() { Id = data.Id, Destination = data.Destination, SagaId = data.SagaId, State = data.State, Time = data.Time, Headers = data.Headers, OwningTimeoutManager = data.OwningTimeoutManager }; } return(data != null); }
public TimeoutData(Timeout.Core.TimeoutData data) { Destination = data.Destination; SagaId = data.SagaId; State = data.State; Time = data.Time; OwningTimeoutManager = data.OwningTimeoutManager; Headers = data.Headers; }
public TimeoutDocument(string id, Timeout.Core.TimeoutData data) { Id = id; Destination = data.Destination; SagaId = data.SagaId; State = data.State; Time = data.Time; OwningTimeoutManager = data.OwningTimeoutManager; Headers = data.Headers; }
public void RemoveTimeoutByIdOnEmptyTimeoutCollection( MongoTimeoutPersister sut, MongoDatabaseFactory factory, Timeout.Core.TimeoutData timeoutData) { factory.ResetTimeoutCollection(); sut.RemoveTimeoutBy(timeoutData.SagaId); factory.RetrieveAllTimeouts().Should().HaveCount(0); }
public void RemoveTimeoutByIdOnNonExistantIdDoesNotRemoveOtherTimeout( MongoTimeoutPersister sut, MongoDatabaseFactory factory, Timeout.Core.TimeoutData timeoutData) { factory.ResetTimeoutCollection(); sut.Add(timeoutData); sut.RemoveTimeoutBy(Guid.NewGuid()); factory.RetrieveAllTimeouts().Should().HaveCount(1); }
public void AddOneTimeout( MongoTimeoutPersister sut, MongoDatabaseFactory factory, Timeout.Core.TimeoutData timeoutData) { factory.ResetTimeoutCollection(); sut.Add(timeoutData); var result = factory.RetrieveAllTimeouts(); result.Should().HaveCount(1); }
public void RemoveTimeoutByIdRemovesTimeout( MongoTimeoutPersister sut, MongoDatabaseFactory factory, Timeout.Core.TimeoutData timeoutData, ContextBag context) { factory.ResetTimeoutCollection(); sut.Add(timeoutData, context).Wait(); sut.RemoveTimeoutBy(timeoutData.SagaId, context).Wait(); factory.RetrieveAllTimeouts().Should().HaveCount(0); }
public void PeekExistingTimeout( MongoTimeoutPersister sut, MongoDatabaseFactory factory, Timeout.Core.TimeoutData timeout1, ContextBag context) { factory.ResetTimeoutCollection(); sut.Add(timeout1, context).Wait(); var result = factory.RetrieveAllTimeouts().First(); var peeked = sut.Peek(result.Id, context).Result; peeked.SagaId.Should().Be(timeout1.SagaId); }
public void AddTwoDifferentTimeouts( MongoTimeoutPersister sut, MongoDatabaseFactory factory, Timeout.Core.TimeoutData timeout1, Timeout.Core.TimeoutData timeout2, ContextBag context) { factory.ResetTimeoutCollection(); sut.Add(timeout1, context).Wait(); sut.Add(timeout2, context).Wait(); var result = factory.RetrieveAllTimeouts(); result.Should().HaveCount(2); }
public void GetNextChunkReturnsOneTimeoutWhenCollectionHasOneTimeout( MongoTimeoutPersister sut, MongoDatabaseFactory factory, Timeout.Core.TimeoutData timeoutData) { factory.ResetTimeoutCollection(); timeoutData.Time = DateTime.UtcNow.AddMinutes(-1); sut.Add(timeoutData); var startSlice = DateTime.UtcNow.AddMinutes(-5); DateTime nextTimeToRunQuery; var result = sut.GetNextChunk(startSlice, out nextTimeToRunQuery); result.Should().HaveCount(1); nextTimeToRunQuery.Should().BeOnOrAfter(timeoutData.Time); }
public void GetNextChunkReturnsOneTimeoutWhenCollectionHasOneTimeout( MongoTimeoutPersister sut, MongoDatabaseFactory factory, Timeout.Core.TimeoutData timeoutData, ContextBag context) { factory.ResetTimeoutCollection(); timeoutData.Time = DateTime.UtcNow.AddMinutes(-1); sut.Add(timeoutData, context).Wait(); var startSlice = DateTime.UtcNow.AddMinutes(-5); var result = sut.GetNextChunk(startSlice).Result; result.DueTimeouts.Should().HaveCount(1); result.NextTimeToQuery.Should().BeOnOrAfter(timeoutData.Time); }
public void TryRemoveShouldSucceedAndReturnData( MongoTimeoutPersister sut, MongoDatabaseFactory factory, Timeout.Core.TimeoutData timeoutData, ContextBag context) { factory.ResetTimeoutCollection(); sut.Add(timeoutData, context).Wait(); var timeouts = factory.RetrieveAllTimeouts(); var result = sut.TryRemove(timeouts.First().Id, context).Result; result.Should().BeTrue(); factory.RetrieveAllTimeouts().Should().HaveCount(0); }
public void TryRemoveShouldSucceedAndReturnData( MongoTimeoutPersister sut, MongoDatabaseFactory factory, Timeout.Core.TimeoutData timeoutData) { factory.ResetTimeoutCollection(); sut.Add(timeoutData); Timeout.Core.TimeoutData returnedTimeoutData; var timeouts = factory.RetrieveAllTimeouts(); var result = sut.TryRemove(timeouts.First().Id.ToString(), out returnedTimeoutData); result.Should().BeTrue(); returnedTimeoutData.ShouldBeEquivalentTo(timeoutData); factory.RetrieveAllTimeouts().Should().HaveCount(0); }
public void RemoveTimeoutByIdRemovesCorrectTimeoutAndDoesNotRemoveOtherTimeout( MongoTimeoutPersister sut, MongoDatabaseFactory factory, Timeout.Core.TimeoutData timeoutData1, Timeout.Core.TimeoutData timeoutData2) { factory.ResetTimeoutCollection(); sut.Add(timeoutData1); sut.Add(timeoutData2); sut.RemoveTimeoutBy(timeoutData2.SagaId); var remainingTimeouts = factory.RetrieveAllTimeouts().ToList(); remainingTimeouts.Should().HaveCount(1); remainingTimeouts.First().SagaId.Should().Be(timeoutData1.SagaId); }
/// <summary> /// Adds a new timeout. /// </summary> /// <param name="timeout">Timeout data.</param> /// <exception cref="InvalidOperationException"> /// Throws exception if timeout is not saved. /// </exception> public void Add(Timeout.Core.TimeoutData timeout) { var data = new TimeoutData() { Id = Guid.NewGuid().ToString(), Destination = timeout.Destination, SagaId = timeout.SagaId, State = timeout.State, Time = timeout.Time, Headers = timeout.Headers, OwningTimeoutManager = timeout.OwningTimeoutManager }; var collection = this.mongoDatabase.GetCollection <TimeoutData>(TimeoutDataName); var result = collection.Save(data); if (result.HasLastErrorMessage) { throw new InvalidOperationException(string.Format("Unable to save timeout [{0}]", timeout)); } timeout.Id = data.Id; }
public void TryRemoveShouldSucceedAndReturnDataForOneTimeoutAndLeaveTheOther( MongoTimeoutPersister sut, MongoDatabaseFactory factory, Timeout.Core.TimeoutData timeoutData1, Timeout.Core.TimeoutData timeoutData2, ContextBag context) { factory.ResetTimeoutCollection(); sut.Add(timeoutData1, context).Wait(); sut.Add(timeoutData2, context).Wait(); var timeouts = factory.RetrieveAllTimeouts(); var result = sut.TryRemove(timeouts.First().Id, context).Result; result.Should().BeTrue(); var remainingTimeout = factory.RetrieveAllTimeouts().ToList(); remainingTimeout.Should().HaveCount(1); remainingTimeout.First().Id.Should().Be(timeouts.Last().Id); }
/// <summary> /// Removes the timeout if it hasn't been previously removed. /// </summary> /// <param name="timeoutId">The timeout id to remove.</param> /// <param name="timeoutData">The timeout data of the removed timeout.</param> /// <returns> /// <c>true</c> it the timeout was successfully removed. /// </returns> public bool TryRemove(string timeoutId, out Timeout.Core.TimeoutData timeoutData) { timeoutData = null; var collection = this.mongoDatabase.GetCollection<TimeoutData>(TimeoutDataName); var findAndRemoveArgs = new FindAndRemoveArgs { Query = Query<TimeoutData>.EQ(t => t.Id, timeoutId) }; var result = collection.FindAndRemove(findAndRemoveArgs); if (!result.Ok) { throw new InvalidOperationException( string.Format("Unable to remove timeout for id {0}: {1}", timeoutId, result.ErrorMessage)); } var data = result.GetModifiedDocumentAs<TimeoutData>(); if (data != null) { timeoutData = new Timeout.Core.TimeoutData() { Id = data.Id, Destination = data.Destination, SagaId = data.SagaId, State = data.State, Time = data.Time, Headers = data.Headers, OwningTimeoutManager = data.OwningTimeoutManager }; } return data != null; }