feat: enforce jetstream retention and limits

This commit is contained in:
Joseph Doherty
2026-02-23 06:04:23 -05:00
parent 95691fa9e7
commit d73e7e2f88
6 changed files with 107 additions and 8 deletions

View File

@@ -62,6 +62,17 @@ public sealed class FileStore : IStreamStore, IAsyncDisposable
});
}
public void TrimToMaxMessages(ulong maxMessages)
{
while ((ulong)_messages.Count > maxMessages)
{
var first = _messages.Keys.Min();
_messages.Remove(first);
}
RewriteDataFile();
}
public ValueTask DisposeAsync() => ValueTask.CompletedTask;
private void LoadExisting()
@@ -91,6 +102,22 @@ public sealed class FileStore : IStreamStore, IAsyncDisposable
}
}
private void RewriteDataFile()
{
var lines = new List<string>(_messages.Count);
foreach (var message in _messages.OrderBy(kv => kv.Key).Select(kv => kv.Value))
{
lines.Add(JsonSerializer.Serialize(new FileRecord
{
Sequence = message.Sequence,
Subject = message.Subject,
PayloadBase64 = Convert.ToBase64String(message.Payload.ToArray()),
}));
}
File.WriteAllLines(_dataFilePath, lines);
}
private sealed class FileRecord
{
public ulong Sequence { get; init; }