aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--pkg/email/lore/parse.go2
-rw-r--r--pkg/email/lore/parse_test.go7
-rw-r--r--syz-cluster/pkg/api/api.go1
-rw-r--r--syz-cluster/pkg/controller/api_test.go6
-rw-r--r--syz-cluster/pkg/db/entities.go19
-rw-r--r--syz-cluster/pkg/db/migrations/4_add_series_subject_tags.down.sql1
-rw-r--r--syz-cluster/pkg/db/migrations/4_add_series_subject_tags.up.sql1
-rw-r--r--syz-cluster/pkg/service/series.go8
-rw-r--r--syz-cluster/series-tracker/main.go2
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,
}