public static void DeleteBatch(this IObjectStorage storage, IList <Tuple <ObjectInfo, Event> > batch) { foreach (var item in batch) { storage.DeleteObject(item.Item1.Path); } }
public static void DeleteFiles(this IObjectStorage storage, IEnumerable <ObjectInfo> files) { foreach (var file in files) { storage.DeleteObject(file.Path); } }
public void CanManageFiles() { Reset(); IObjectStorage storage = GetStorage(); storage.SaveObject("test.txt", "test"); Assert.Equal(1, storage.GetObjectList("test.txt").Count()); Assert.Equal(1, storage.GetObjectList().Count()); var file = storage.GetObjectList().FirstOrDefault(); Assert.NotNull(file); Assert.Equal("test.txt", file.Path); string content = storage.GetObject <string>("test.txt"); Assert.Equal("test", content); storage.RenameObject("test.txt", "new.txt"); Assert.True(storage.GetObjectList().Any(f => f.Path == "new.txt")); storage.DeleteObject("new.txt"); Assert.Equal(0, storage.GetObjectList().Count()); storage.SaveObject("test\\q\\" + Guid.NewGuid().ToString("N") + ".txt", "test"); Assert.Equal(1, storage.GetObjectList("test\\q\\*.txt").Count()); Assert.Equal(1, storage.GetObjectList("*", null, DateTime.Now).Count()); List <ObjectInfo> files = storage.GetObjectList("*", null, DateTime.Now.Subtract(TimeSpan.FromMinutes(5))).ToList(); Debug.WriteLine(String.Join(",", files.Select(f => f.Path + " " + f.Created))); Assert.Equal(0, files.Count); }
public static void CleanupQueueFiles(this IObjectStorage storage, string queueName, TimeSpan?maxAge = null, int?maxAttempts = null) { maxAge = maxAge ?? TimeSpan.FromDays(7); maxAttempts = maxAttempts ?? 3; foreach (var file in storage.GetObjectList(Path.Combine(queueName, "q", "*"), 500).ToList()) { if (DateTime.Now.Subtract(file.Created) > maxAge.Value) { storage.DeleteObject(file.Path); } if (GetAttempts(file) >= maxAttempts.Value) { storage.DeleteObject(file.Path); } } }
public static void CleanupQueueFiles(this IObjectStorage storage, string queueName, TimeSpan?maxAge = null, int?maxAttempts = 3) { if (!maxAge.HasValue) { maxAge = TimeSpan.FromDays(1); } if (!maxAttempts.HasValue || maxAttempts.Value <= 0) { maxAttempts = 3; } foreach (var file in storage.GetObjectList(queueName + "\\q\\*", 500).ToList()) { if (file.Created < DateTime.Now.Subtract(maxAge.Value)) { storage.DeleteObject(file.Path); } if (GetAttempts(file) >= maxAttempts) { storage.DeleteObject(file.Path); } } }
public void CanManageQueue() { Reset(); IObjectStorage storage = GetStorage(); const string queueName = "test"; IJsonSerializer serializer = new DefaultJsonSerializer(); var ev = new Event { Type = Event.KnownTypes.Log, Message = "test" }; storage.Enqueue(queueName, ev); storage.SaveObject("test.txt", "test"); Assert.True(storage.GetObjectList().Any(f => f.Path.StartsWith(queueName + "\\q\\") && f.Path.EndsWith("0.json"))); Assert.Equal(2, storage.GetObjectList().Count()); Assert.True(storage.GetQueueFiles(queueName).All(f => f.Path.EndsWith("0.json"))); Assert.Equal(1, storage.GetQueueFiles(queueName).Count()); storage.DeleteObject("test.txt"); Assert.Equal(1, storage.GetObjectList().Count()); Assert.True(storage.LockFile(storage.GetObjectList().FirstOrDefault())); Assert.True(storage.GetQueueFiles(queueName).All(f => f.Path.EndsWith("0.json.x"))); Assert.True(storage.ReleaseFile(storage.GetObjectList().FirstOrDefault())); var batch = storage.GetEventBatch(queueName, serializer); Assert.Equal(1, batch.Count); Assert.True(storage.GetObjectList().All(f => f.Path.StartsWith(queueName + "\\q\\") && f.Path.EndsWith("1.json.x"))); Assert.Equal(1, storage.GetObjectList().Count()); Assert.Equal(0, storage.GetQueueFiles(queueName).Count()); Assert.Equal(0, storage.GetEventBatch(queueName, serializer).Count()); Assert.False(storage.LockFile(storage.GetObjectList().FirstOrDefault())); storage.ReleaseBatch(batch); Assert.True(storage.GetObjectList().All(f => f.Path.StartsWith(queueName + "\\q\\") && f.Path.EndsWith("1.json"))); Assert.Equal(1, storage.GetObjectList().Count()); Assert.Equal(1, storage.GetQueueFiles(queueName).Count()); var file = storage.GetObjectList().FirstOrDefault(); storage.IncrementAttempts(file); Assert.True(storage.GetObjectList().All(f => f.Path.StartsWith(queueName + "\\q\\") && f.Path.EndsWith("2.json"))); storage.IncrementAttempts(file); Assert.True(storage.GetObjectList().All(f => f.Path.StartsWith(queueName + "\\q\\") && f.Path.EndsWith("3.json"))); Assert.True(storage.LockFile(file)); Assert.NotNull(file); Assert.True(storage.GetObjectList().All(f => f.Path.StartsWith(queueName + "\\q\\") && f.Path.EndsWith("3.json.x"))); Thread.Sleep(TimeSpan.FromMilliseconds(1)); storage.ReleaseStaleLocks(queueName, TimeSpan.Zero); Assert.True(storage.GetObjectList().All(f => f.Path.StartsWith(queueName + "\\q\\") && f.Path.EndsWith("3.json"))); batch = storage.GetEventBatch(queueName, serializer); Assert.Equal(1, batch.Count); Assert.True(storage.GetObjectList().All(f => f.Path.StartsWith(queueName + "\\q\\") && f.Path.EndsWith("4.json.x"))); storage.DeleteBatch(batch); Assert.Equal(0, storage.GetQueueFiles(queueName).Count()); ev = new Event { Type = Event.KnownTypes.Log, Message = "test" }; storage.Enqueue(queueName, ev); file = storage.GetObjectList().FirstOrDefault(); Assert.NotNull(file); Thread.Sleep(TimeSpan.FromMilliseconds(1)); storage.CleanupQueueFiles(queueName, TimeSpan.Zero); Assert.Equal(0, storage.GetQueueFiles(queueName).Count()); }