Skip to content

Commit d7deac3

Browse files
committed
Updated retention cleanup to include saga snapshots and known endpoints
1 parent 315cf2a commit d7deac3

File tree

2 files changed

+44
-9
lines changed

2 files changed

+44
-9
lines changed

src/ServiceControl.Audit.Persistence.PostgreSQL/PostgreSQLPersistenceInstaller.cs

Lines changed: 27 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,8 @@ CREATE TABLE IF NOT EXISTS saga_snapshots (
162162
id UUID PRIMARY KEY,
163163
saga_id UUID,
164164
saga_type TEXT,
165-
changes JSONB
165+
changes JSONB,
166+
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
166167
);", connection))
167168
{
168169
await cmd.ExecuteNonQueryAsync(cancellationToken);
@@ -184,17 +185,38 @@ CREATE TABLE IF NOT EXISTS known_endpoints (
184185
name TEXT,
185186
host_id UUID,
186187
host TEXT,
187-
last_seen TIMESTAMPTZ
188+
last_seen TIMESTAMPTZ,
189+
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
188190
);", connection))
189191
{
190192
await cmd.ExecuteNonQueryAsync(cancellationToken);
191193
}
194+
195+
// Create trigger to auto-update updated_at for saga_snapshots
196+
await using (var cmd = new NpgsqlCommand(@"
197+
CREATE OR REPLACE FUNCTION update_updated_at_column() RETURNS trigger AS $$
198+
BEGIN
199+
NEW.updated_at = now();
200+
RETURN NEW;
201+
END
202+
$$ LANGUAGE plpgsql;
203+
204+
DROP TRIGGER IF EXISTS saga_snapshots_updated_at_trigger ON saga_snapshots;
205+
CREATE TRIGGER saga_snapshots_updated_at_trigger
206+
BEFORE UPDATE ON saga_snapshots
207+
FOR EACH ROW EXECUTE FUNCTION update_updated_at_column();
208+
209+
DROP TRIGGER IF EXISTS known_endpoints_updated_at_trigger ON known_endpoints;
210+
CREATE TRIGGER known_endpoints_updated_at_trigger
211+
BEFORE UPDATE ON known_endpoints
212+
FOR EACH ROW EXECUTE FUNCTION update_updated_at_column();", connection))
213+
{
214+
await cmd.ExecuteNonQueryAsync(cancellationToken);
215+
}
192216
}
193217

194218
public Task StopAsync(CancellationToken cancellationToken)
195219
{
196220
return Task.CompletedTask;
197221
}
198-
}
199-
200-
222+
}

src/ServiceControl.Audit.Persistence.PostgreSQL/RetentionCleanupService.cs

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,14 +43,27 @@ async Task CleanupOldMessagesAsync(CancellationToken cancellationToken)
4343
await using var conn = await connectionFactory.OpenConnection(cancellationToken);
4444

4545
var cutoffDate = DateTime.UtcNow - config.AuditRetentionPeriod;
46+
47+
// Cleanup processed messages
48+
await CleanupTable("processed_messages", "created_at", cutoffDate, conn, cancellationToken);
49+
50+
// Cleanup saga snapshots
51+
await CleanupTable("saga_snapshots", "updated_at", cutoffDate, conn, cancellationToken);
52+
53+
// Cleanup known endpoints
54+
await CleanupTable("known_endpoints", "updated_at", cutoffDate, conn, cancellationToken);
55+
}
56+
57+
async Task CleanupTable(string tableName, string dateColumn, DateTime cutoffDate, NpgsqlConnection conn, CancellationToken cancellationToken)
58+
{
4659
var totalDeleted = 0;
4760

4861
while (!cancellationToken.IsCancellationRequested)
4962
{
5063
// Delete in batches
51-
var sql = @"
52-
DELETE FROM processed_messages
53-
WHERE created_at < @cutoff
64+
var sql = $@"
65+
DELETE FROM {tableName}
66+
WHERE {dateColumn} < @cutoff
5467
LIMIT 1000;";
5568

5669
await using var cmd = new NpgsqlCommand(sql, conn);
@@ -69,7 +82,7 @@ WHERE created_at < @cutoff
6982

7083
if (totalDeleted > 0)
7184
{
72-
logger.LogInformation("Deleted {Count} old messages older than {Cutoff}", totalDeleted, cutoffDate);
85+
logger.LogInformation("Deleted {Count} old records from {Table} older than {Cutoff}", totalDeleted, tableName, cutoffDate);
7386
}
7487
}
7588
}

0 commit comments

Comments
 (0)