diff options
| -rw-r--r-- | pkg/email/lore/parse.go | 2 | ||||
| -rw-r--r-- | pkg/email/lore/parse_test.go | 7 | ||||
| -rw-r--r-- | syz-cluster/pkg/api/api.go | 1 | ||||
| -rw-r--r-- | syz-cluster/pkg/controller/api_test.go | 6 | ||||
| -rw-r--r-- | syz-cluster/pkg/db/entities.go | 19 | ||||
| -rw-r--r-- | syz-cluster/pkg/db/migrations/4_add_series_subject_tags.down.sql | 1 | ||||
| -rw-r--r-- | syz-cluster/pkg/db/migrations/4_add_series_subject_tags.up.sql | 1 | ||||
| -rw-r--r-- | syz-cluster/pkg/service/series.go | 8 | ||||
| -rw-r--r-- | syz-cluster/series-tracker/main.go | 2 |
9 files changed, 33 insertions, 14 deletions
diff --git a/pkg/email/lore/parse.go b/pkg/email/lore/parse.go index 98152b408..9d1a010f5 100644 --- a/pkg/email/lore/parse.go +++ b/pkg/email/lore/parse.go @@ -29,6 +29,7 @@ type Series struct { MessageID string Version int Corrupted string // If non-empty, contains a reason why the series better be ignored. + Tags []string Patches []Patch } @@ -74,6 +75,7 @@ func PatchSeries(emails []*email.Email) []*Series { Subject: patch.Title, MessageID: thread.MessageID, Version: patch.Version.ValueOr(1), + Tags: patch.Tags, } ret = append(ret, series) if patch.Seq.IsSet() && patch.Seq.Value() > 1 { diff --git a/pkg/email/lore/parse_test.go b/pkg/email/lore/parse_test.go index 81d1eaebc..0480729ff 100644 --- a/pkg/email/lore/parse_test.go +++ b/pkg/email/lore/parse_test.go @@ -381,7 +381,7 @@ Content-Type: text/plain Some text`, // A series with a cover. `Date: Sun, 7 May 2017 19:55:00 -0700 -Subject: [PATCH v2 00/02] A longer series +Subject: [PATCH net v2 00/02] A longer series Message-ID: <Second> From: UserB <b@user.com> To: UserA <a@user.com> @@ -389,7 +389,7 @@ Content-Type: text/plain Some cover`, `Date: Sun, 7 May 2017 19:56:00 -0700 -Subject: [PATCH v2 01/02] First patch +Subject: [PATCH net v2 01/02] First patch Message-ID: <Second-1> From: UserC <c@user.com> To: UserA <a@user.com>, UserB <b@user.com> @@ -399,7 +399,7 @@ In-Reply-To: <Second> Patch 1/2`, `Date: Sun, 7 May 2017 19:56:00 -0700 -Subject: [PATCH v2 02/02] Second patch +Subject: [PATCH net v2 02/02] Second patch Message-ID: <Second-2> From: UserC <c@user.com> To: UserA <a@user.com>, UserB <b@user.com> @@ -444,6 +444,7 @@ Bug report`, "<Second>": { Subject: "A longer series", Version: 2, + Tags: []string{"net"}, Patches: []Patch{ { Seq: 1, diff --git a/syz-cluster/pkg/api/api.go b/syz-cluster/pkg/api/api.go index 128be02ba..5483513af 100644 --- a/syz-cluster/pkg/api/api.go +++ b/syz-cluster/pkg/api/api.go @@ -103,6 +103,7 @@ type Series struct { Cc []string `json:"cc"` Version int `json:"version"` Link string `json:"link"` + SubjectTags []string `json:"subject_tags"` PublishedAt time.Time `json:"published_at"` Patches []SeriesPatch `json:"patches"` } diff --git a/syz-cluster/pkg/controller/api_test.go b/syz-cluster/pkg/controller/api_test.go index 9e709e089..1c1c8de9f 100644 --- a/syz-cluster/pkg/controller/api_test.go +++ b/syz-cluster/pkg/controller/api_test.go @@ -5,11 +5,12 @@ package controller import ( "bytes" + "testing" + "time" + "github.com/google/syzkaller/syz-cluster/pkg/api" "github.com/google/syzkaller/syz-cluster/pkg/app" "github.com/stretchr/testify/assert" - "testing" - "time" ) func TestAPIGetSeries(t *testing.T) { @@ -108,6 +109,7 @@ var testSeries = &api.Series{ Version: 2, PublishedAt: time.Date(2020, time.January, 1, 3, 0, 0, 0, time.UTC), Cc: []string{"email"}, + SubjectTags: []string{"tag"}, Patches: []api.SeriesPatch{ { Seq: 1, diff --git a/syz-cluster/pkg/db/entities.go b/syz-cluster/pkg/db/entities.go index 77c066b5e..b1ffc6949 100644 --- a/syz-cluster/pkg/db/entities.go +++ b/syz-cluster/pkg/db/entities.go @@ -4,18 +4,21 @@ package db import ( - "cloud.google.com/go/spanner" "time" + + "cloud.google.com/go/spanner" ) type Series struct { - ID string `spanner:"ID"` - ExtID string `spanner:"ExtID"` - AuthorName string `spanner:"AuthorName"` - AuthorEmail string `spanner:"AuthorEmail"` - Title string `spanner:"Title"` - Link string `spanner:"Link"` - Version int64 `spanner:"Version"` + ID string `spanner:"ID"` + ExtID string `spanner:"ExtID"` + AuthorName string `spanner:"AuthorName"` + AuthorEmail string `spanner:"AuthorEmail"` + Title string `spanner:"Title"` + Link string `spanner:"Link"` + Version int64 `spanner:"Version"` + // In LKML patches, there are often hints at the target tree for the patch. + SubjectTags []string `spanner:"SubjectTags"` PublishedAt time.Time `spanner:"PublishedAt"` // TODO: we could ger rid of the field by using slightly more complicated SQL queries. LatestSessionID spanner.NullString `spanner:"LatestSessionID"` diff --git a/syz-cluster/pkg/db/migrations/4_add_series_subject_tags.down.sql b/syz-cluster/pkg/db/migrations/4_add_series_subject_tags.down.sql new file mode 100644 index 000000000..d63028aa2 --- /dev/null +++ b/syz-cluster/pkg/db/migrations/4_add_series_subject_tags.down.sql @@ -0,0 +1 @@ +ALTER TABLE Series DROP COLUMN SubjectTags; diff --git a/syz-cluster/pkg/db/migrations/4_add_series_subject_tags.up.sql b/syz-cluster/pkg/db/migrations/4_add_series_subject_tags.up.sql new file mode 100644 index 000000000..a049fdde6 --- /dev/null +++ b/syz-cluster/pkg/db/migrations/4_add_series_subject_tags.up.sql @@ -0,0 +1 @@ +ALTER TABLE Series ADD COLUMN SubjectTags ARRAY<STRING(512)>; diff --git a/syz-cluster/pkg/service/series.go b/syz-cluster/pkg/service/series.go index 6583306ce..d1ace9b09 100644 --- a/syz-cluster/pkg/service/series.go +++ b/syz-cluster/pkg/service/series.go @@ -63,6 +63,13 @@ func (s *SeriesService) UploadSeries(ctx context.Context, series *api.Series) (* PublishedAt: series.PublishedAt, Cc: series.Cc, } + for _, tag := range series.SubjectTags { + const tageSizeLimit = 511 + if len(tag) > tageSizeLimit { + tag = tag[:tageSizeLimit] + } + seriesObj.SubjectTags = append(seriesObj.SubjectTags, tag) + } err := s.seriesRepo.Insert(ctx, seriesObj, func() ([]*db.Patch, error) { var ret []*db.Patch for _, patch := range series.Patches { @@ -121,6 +128,7 @@ func (s *SeriesService) getSeries(ctx context.Context, Cc: series.Cc, PublishedAt: series.PublishedAt, Link: series.Link, + SubjectTags: series.SubjectTags, } for _, patch := range patches { var body []byte diff --git a/syz-cluster/series-tracker/main.go b/syz-cluster/series-tracker/main.go index b8638d897..d6f28a497 100644 --- a/syz-cluster/series-tracker/main.go +++ b/syz-cluster/series-tracker/main.go @@ -155,9 +155,9 @@ func (sf *SeriesFetcher) handleSeries(ctx context.Context, series *lore.Series, apiSeries := &api.Series{ ExtID: series.MessageID, AuthorEmail: first.Author, - // TODO: set Cc. Title: series.Subject, Version: series.Version, + SubjectTags: series.Tags, Link: "https://lore.kernel.org/all/" + series.MessageID, PublishedAt: date, } |
