aboutsummaryrefslogtreecommitdiffstats
path: root/syz-cluster/pkg/db
diff options
context:
space:
mode:
authorAleksandr Nogikh <nogikh@google.com>2025-05-02 19:10:40 +0200
committerTaras Madan <tarasmadan@google.com>2025-05-09 08:56:10 +0000
commit268a57a6b0e9c29186f6e80acdc752b1442053a1 (patch)
tree034e842de692d3007e6532e6a656ecadb6ce0755 /syz-cluster/pkg/db
parentbb813bccb1da35d1a0140c842fb097525d920d97 (diff)
syz-cluster: support multiple reporter types
Introduce a Reporter column to the SessionReport. For finished reports, store both a MessageID instead of Link.
Diffstat (limited to 'syz-cluster/pkg/db')
-rw-r--r--syz-cluster/pkg/db/entities.go3
-rw-r--r--syz-cluster/pkg/db/migrations/1_initialize.up.sql5
-rw-r--r--syz-cluster/pkg/db/report_repo.go9
-rw-r--r--syz-cluster/pkg/db/report_repo_test.go10
4 files changed, 17 insertions, 10 deletions
diff --git a/syz-cluster/pkg/db/entities.go b/syz-cluster/pkg/db/entities.go
index 531861800..a7f08f9ab 100644
--- a/syz-cluster/pkg/db/entities.go
+++ b/syz-cluster/pkg/db/entities.go
@@ -134,7 +134,8 @@ type SessionReport struct {
SessionID string `spanner:"SessionID"`
ReportedAt spanner.NullTime `spanner:"ReportedAt"`
Moderation bool `spanner:"Moderation"`
- Link string `spanner:"Link"`
+ MessageID string `spanner:"MessageID"`
+ Reporter string `spanner:"Reporter"`
}
func (s *SessionReport) SetReportedAt(t time.Time) {
diff --git a/syz-cluster/pkg/db/migrations/1_initialize.up.sql b/syz-cluster/pkg/db/migrations/1_initialize.up.sql
index 9935774c4..ca91b343a 100644
--- a/syz-cluster/pkg/db/migrations/1_initialize.up.sql
+++ b/syz-cluster/pkg/db/migrations/1_initialize.up.sql
@@ -104,9 +104,10 @@ CREATE TABLE SessionReports (
SessionID STRING(36) NOT NULL, -- UUID
ReportedAt TIMESTAMP,
Moderation BOOL,
- Link STRING(256),
+ MessageID STRING(256),
+ 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 (Moderation, ReportedAt);
+CREATE INDEX SessionReportsByStatus ON SessionReports (Reporter, ReportedAt);
diff --git a/syz-cluster/pkg/db/report_repo.go b/syz-cluster/pkg/db/report_repo.go
index e1310d21c..4e039c4a7 100644
--- a/syz-cluster/pkg/db/report_repo.go
+++ b/syz-cluster/pkg/db/report_repo.go
@@ -33,10 +33,13 @@ func (repo *ReportRepository) Insert(ctx context.Context, rep *SessionReport) er
return repo.genericEntityOps.Insert(ctx, rep)
}
-func (repo *ReportRepository) ListNotReported(ctx context.Context, limit int) ([]*SessionReport, error) {
+func (repo *ReportRepository) ListNotReported(ctx context.Context, reporter string,
+ limit int) ([]*SessionReport, error) {
stmt := spanner.Statement{
- SQL: "SELECT * FROM `SessionReports` WHERE `ReportedAt` IS NULL",
- Params: map[string]interface{}{},
+ SQL: "SELECT * FROM `SessionReports` WHERE `Reporter` = @reporter AND `ReportedAt` IS NULL",
+ Params: map[string]interface{}{
+ "reporter": reporter,
+ },
}
addLimit(&stmt, limit)
return repo.readEntities(ctx, stmt)
diff --git a/syz-cluster/pkg/db/report_repo_test.go b/syz-cluster/pkg/db/report_repo_test.go
index ee05a2e18..bc81c37bd 100644
--- a/syz-cluster/pkg/db/report_repo_test.go
+++ b/syz-cluster/pkg/db/report_repo_test.go
@@ -12,6 +12,8 @@ import (
"github.com/stretchr/testify/assert"
)
+const dummyReporter = "abcd"
+
func TestReportRepository(t *testing.T) {
client, ctx := NewTransientDB(t)
sessionRepo := NewSessionRepository(client)
@@ -28,13 +30,13 @@ func TestReportRepository(t *testing.T) {
err = sessionRepo.Insert(ctx, session)
assert.NoError(t, err)
- report := &SessionReport{SessionID: session.ID}
+ report := &SessionReport{SessionID: session.ID, Reporter: dummyReporter}
err = reportRepo.Insert(ctx, report)
assert.NoError(t, err)
keys = append(keys, report.ID)
}
- list, err := reportRepo.ListNotReported(ctx, 10)
+ list, err := reportRepo.ListNotReported(ctx, dummyReporter, 10)
assert.NoError(t, err)
assert.Len(t, list, 3)
@@ -45,7 +47,7 @@ func TestReportRepository(t *testing.T) {
assert.NoError(t, err)
// Now one less.
- list, err = reportRepo.ListNotReported(ctx, 10)
+ list, err = reportRepo.ListNotReported(ctx, dummyReporter, 10)
assert.NoError(t, err)
assert.Len(t, list, 2)
}
@@ -105,7 +107,7 @@ func TestSessionsWithoutReports(t *testing.T) {
// Create a report for the first session.
reportRepo := NewReportRepository(client)
- err = reportRepo.Insert(ctx, &SessionReport{SessionID: sessions[0].ID})
+ err = reportRepo.Insert(ctx, &SessionReport{SessionID: sessions[0].ID, Reporter: dummyReporter})
assert.NoError(t, err)
// Now only the second session must be returned.