From 8eca022fb899f81facfd753a892d33ad794e2846 Mon Sep 17 00:00:00 2001 From: Aleksandr Nogikh Date: Sat, 28 Jun 2025 17:30:50 +0200 Subject: syz-cluster: make report reply tracking more flexible Replace an UpdateReport() call with a RecordReply(). This will eventually allow us to support the email sender implementations for which we do not immediately know the MessageID of the reported message. --- syz-cluster/pkg/db/entities.go | 1 - syz-cluster/pkg/db/migrations/1_initialize.down.sql | 1 - syz-cluster/pkg/db/migrations/1_initialize.up.sql | 2 -- syz-cluster/pkg/db/report_repo.go | 11 ----------- syz-cluster/pkg/db/report_repo_test.go | 13 ------------- syz-cluster/pkg/db/spanner.go | 7 ------- 6 files changed, 35 deletions(-) (limited to 'syz-cluster/pkg/db') diff --git a/syz-cluster/pkg/db/entities.go b/syz-cluster/pkg/db/entities.go index 13c440926..c914d7361 100644 --- a/syz-cluster/pkg/db/entities.go +++ b/syz-cluster/pkg/db/entities.go @@ -137,7 +137,6 @@ type SessionReport struct { SessionID string `spanner:"SessionID"` ReportedAt spanner.NullTime `spanner:"ReportedAt"` Moderation bool `spanner:"Moderation"` - MessageID string `spanner:"MessageID"` Reporter string `spanner:"Reporter"` } diff --git a/syz-cluster/pkg/db/migrations/1_initialize.down.sql b/syz-cluster/pkg/db/migrations/1_initialize.down.sql index 04bdb97e2..64c1fbb35 100644 --- a/syz-cluster/pkg/db/migrations/1_initialize.down.sql +++ b/syz-cluster/pkg/db/migrations/1_initialize.down.sql @@ -20,7 +20,6 @@ DROP INDEX SessionsByFinishedAt; DROP INDEX NoDupFindings; DROP INDEX NoDupSessionReports; DROP INDEX SessionReportsByStatus; -DROP INDEX SessionReportsByMessageID; DROP TABLE ReportReplies; DROP TABLE Findings; diff --git a/syz-cluster/pkg/db/migrations/1_initialize.up.sql b/syz-cluster/pkg/db/migrations/1_initialize.up.sql index baec817cb..139a9c21f 100644 --- a/syz-cluster/pkg/db/migrations/1_initialize.up.sql +++ b/syz-cluster/pkg/db/migrations/1_initialize.up.sql @@ -107,14 +107,12 @@ CREATE TABLE SessionReports ( SessionID STRING(36) NOT NULL, -- UUID ReportedAt TIMESTAMP, Moderation BOOL, - MessageID STRING(512), Reporter STRING(256), CONSTRAINT FK_SessionReports FOREIGN KEY (SessionID) REFERENCES Sessions (ID), ) PRIMARY KEY(ID); CREATE UNIQUE INDEX NoDupSessionReports ON SessionReports(SessionID, Moderation); CREATE INDEX SessionReportsByStatus ON SessionReports (Reporter, ReportedAt); -CREATE INDEX SessionReportsByMessageID ON SessionReports(Reporter, MessageID); -- Replies on a session report. CREATE TABLE ReportReplies ( diff --git a/syz-cluster/pkg/db/report_repo.go b/syz-cluster/pkg/db/report_repo.go index 37a09a746..4e039c4a7 100644 --- a/syz-cluster/pkg/db/report_repo.go +++ b/syz-cluster/pkg/db/report_repo.go @@ -44,14 +44,3 @@ func (repo *ReportRepository) ListNotReported(ctx context.Context, reporter stri addLimit(&stmt, limit) return repo.readEntities(ctx, stmt) } - -func (repo *ReportRepository) FindByMessageID(ctx context.Context, reporter, messageID string) (*SessionReport, error) { - stmt := spanner.Statement{ - SQL: "SELECT * FROM `SessionReports` WHERE `Reporter` = @reporter AND `MessageID` = @messageID", - Params: map[string]interface{}{ - "reporter": reporter, - "messageID": messageID, - }, - } - return repo.readEntity(ctx, stmt) -} diff --git a/syz-cluster/pkg/db/report_repo_test.go b/syz-cluster/pkg/db/report_repo_test.go index a0cee2a11..a9e23fd75 100644 --- a/syz-cluster/pkg/db/report_repo_test.go +++ b/syz-cluster/pkg/db/report_repo_test.go @@ -40,30 +40,17 @@ func TestReportRepository(t *testing.T) { assert.NoError(t, err) assert.Len(t, list, 3) - const messageID = "message-id" err = reportRepo.Update(ctx, keys[0], func(rep *SessionReport) error { rep.SetReportedAt(time.Now()) - rep.MessageID = messageID return nil }) assert.NoError(t, err) - t.Run("not-reported-count", func(t *testing.T) { // Now one less. list, err := reportRepo.ListNotReported(ctx, dummyReporter, 10) assert.NoError(t, err) assert.Len(t, list, 2) }) - t.Run("find-by-id-found", func(t *testing.T) { - report, err := reportRepo.FindByMessageID(ctx, dummyReporter, messageID) - assert.NoError(t, err) - assert.NotNil(t, report) - }) - t.Run("find-by-id-empty", func(t *testing.T) { - report, err := reportRepo.FindByMessageID(ctx, dummyReporter, "non-existing-id") - assert.NoError(t, err) - assert.Nil(t, report) - }) } func TestSessionsWithoutReports(t *testing.T) { diff --git a/syz-cluster/pkg/db/spanner.go b/syz-cluster/pkg/db/spanner.go index 9bdeee53b..1aee715f8 100644 --- a/syz-cluster/pkg/db/spanner.go +++ b/syz-cluster/pkg/db/spanner.go @@ -343,10 +343,3 @@ func (g *genericEntityOps[EntityType, KeyType]) readEntities(ctx context.Context defer iter.Stop() return readEntities[EntityType](iter) } - -func (g *genericEntityOps[EntityType, KeyType]) readEntity(ctx context.Context, - stmt spanner.Statement) (*EntityType, error) { - iter := g.client.Single().Query(ctx, stmt) - defer iter.Stop() - return readOne[EntityType](iter) -} -- cgit mrf-deployment