diff --git a/ZeroLevel.UnitTests/DumpTests.cs b/ZeroLevel.UnitTests/DumpTests.cs index 236574e..2c7758f 100644 --- a/ZeroLevel.UnitTests/DumpTests.cs +++ b/ZeroLevel.UnitTests/DumpTests.cs @@ -34,5 +34,29 @@ namespace ZeroLevel.UnitTests Assert.True(0 == storage.ReadAndTruncate().ToArray().Length); } + + [Fact] + public void DumpStorageLongTest() + { + // Arrange + var storage = new DumpStorage(); + long index = 0; + + for (int i = 0; i < 1000; i++) + { + // Dump + for (int j = 0; j < 100; j++) + { + storage.Dump(new TestSerializableDTO { Id = i * 1000 + j, Timestamp = DateTime.UtcNow.Ticks, Title = $"#{i * j}" }); + } + // Clean + foreach (var entry in storage.ReadAndTruncate()) + { + Assert.True(entry.Id == index); + index++; + } + } + Assert.True(0 == storage.ReadAndTruncate().ToArray().Length); + } } } diff --git a/ZeroLevel/Services/Microservices/Dump/DumpStorage.cs b/ZeroLevel/Services/Microservices/Dump/DumpStorage.cs index 7ea1421..d5be7bb 100644 --- a/ZeroLevel/Services/Microservices/Dump/DumpStorage.cs +++ b/ZeroLevel/Services/Microservices/Dump/DumpStorage.cs @@ -1,4 +1,5 @@ using FASTER.core; +using System; using System.Collections.Generic; using System.IO; using System.Threading.Tasks; @@ -21,15 +22,22 @@ namespace ZeroLevel.Services.Microservices.Dump } device = Devices.CreateLogDevice(Path.Combine(folder, $"dump.log"), true, true, -1, false); - + log = new FasterLog(new FasterLogSettings { LogDevice = device }); } public void Dump(T value) { var packet = MessageSerializer.SerializeCompatible(value); - while (!log.TryEnqueue(packet, out _)) ; - log.Commit(); + try + { + while (!log.TryEnqueue(packet, out _)) ; + log.Commit(); + } + catch (Exception ex) + { + + } } public async Task DumpAsync(T value) @@ -41,7 +49,7 @@ namespace ZeroLevel.Services.Microservices.Dump public IEnumerable ReadAndTruncate() { byte[] result; - using (var iter = log.Scan(log.BeginAddress, log.TailAddress)) + using (var iter = log.Scan(log.BeginAddress, long.MaxValue)) { while (iter.GetNext(out result, out int length)) {