Skip to content

Commit 6ceb256

Browse files
authored
Merge branch 'master' into master
2 parents 8facea4 + a4fa04e commit 6ceb256

File tree

5 files changed

+78
-23
lines changed

5 files changed

+78
-23
lines changed

syz-cluster/db-mgmt/main.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ func main() {
6666
switch os.Args[1] {
6767
case "migrate":
6868
log.Printf("running schema migrations")
69-
err = db.RunMigrations(ctx, uri.Full)
69+
err = db.RunMigrations(uri.Full)
7070
case "run":
7171
if len(os.Args) < 3 {
7272
app.Fatalf("second argument is the SQL query to run")
Lines changed: 29 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,32 @@
1-
BEGIN TRANSACTION;
1+
-- Delete constraints first as these may create ciruclar dependencies.
2+
ALTER TABLE Patches DROP CONSTRAINT FK_SeriesPatches;
3+
ALTER TABLE Builds DROP CONSTRAINT FK_Series;
4+
ALTER TABLE Sessions DROP CONSTRAINT FK_SeriesSessions;
5+
ALTER TABLE Series DROP CONSTRAINT FK_SeriesLatestSession;
6+
ALTER TABLE SessionTests DROP CONSTRAINT FK_SessionResults;
7+
ALTER TABLE SessionTests DROP CONSTRAINT FK_BaseBuild;
8+
ALTER TABLE SessionTests DROP CONSTRAINT FK_PatchedBuild;
9+
ALTER TABLE Findings DROP CONSTRAINT FK_SessionCrashes;
10+
ALTER TABLE Findings DROP CONSTRAINT FK_TestCrashes;
11+
ALTER TABLE SessionReports DROP CONSTRAINT FK_SessionReports;
12+
ALTER TABLE ReportReplies DROP CONSTRAINT FK_ReplyReportID;
213

3-
DROP TABLE Series;
4-
DROP TABLE Patches;
5-
DROP TABLE Sessions;
14+
-- Spanner does not let drop tables without first deleting the indices.
15+
DROP INDEX SeriesByPublishedAt;
16+
DROP INDEX SeriesByExtID;
17+
DROP INDEX PatchesBySeriesAndSeq;
18+
DROP INDEX LastSuccessfulBuild;
19+
DROP INDEX SessionsByFinishedAt;
20+
DROP INDEX NoDupFindings;
21+
DROP INDEX NoDupSessionReports;
22+
DROP INDEX SessionReportsByStatus;
23+
DROP INDEX SessionReportsByMessageID;
24+
25+
DROP TABLE ReportReplies;
26+
DROP TABLE Findings;
627
DROP TABLE SessionTests;
28+
DROP TABLE SessionReports;
29+
DROP TABLE Patches;
730
DROP TABLE Builds;
8-
DROP TABLE Findings;
9-
10-
COMMIT;
31+
DROP TABLE Sessions;
32+
DROP TABLE Series;

syz-cluster/pkg/db/spanner.go

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -104,24 +104,29 @@ func dropSpannerDB(ctx context.Context, uri ParsedURI) error {
104104
//go:embed migrations/*.sql
105105
var migrationsFs embed.FS
106106

107-
func RunMigrations(ctx context.Context, uri string) error {
108-
sourceDriver, err := iofs.New(migrationsFs, "migrations")
107+
func RunMigrations(uri string) error {
108+
m, err := getMigrateInstance(uri)
109109
if err != nil {
110110
return err
111111
}
112+
return m.Up()
113+
}
114+
115+
func getMigrateInstance(uri string) (*migrate.Migrate, error) {
116+
sourceDriver, err := iofs.New(migrationsFs, "migrations")
117+
if err != nil {
118+
return nil, err
119+
}
112120
s := &migrate_spanner.Spanner{}
113121
dbDriver, err := s.Open("spanner://" + uri + "?x-clean-statements=true")
114122
if err != nil {
115-
return err
123+
return nil, err
116124
}
117125
m, err := migrate.NewWithInstance("iofs", sourceDriver, "spanner", dbDriver)
118-
if err == migrate.ErrNoChange {
119-
// This is not a problem.
120-
return nil
121-
} else if err != nil {
122-
return err
126+
if err != nil {
127+
return nil, err
123128
}
124-
return m.Up()
129+
return m, nil
125130
}
126131

127132
func NewTransientDB(t *testing.T) (*spanner.Client, context.Context) {
@@ -162,7 +167,7 @@ func NewTransientDB(t *testing.T) (*spanner.Client, context.Context) {
162167
t.Fatal(err)
163168
}
164169
t.Cleanup(client.Close)
165-
err = RunMigrations(ctx, uri.Full)
170+
err = RunMigrations(uri.Full)
166171
if err != nil {
167172
t.Fatal(err)
168173
}

syz-cluster/pkg/db/spanner_test.go

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
// Copyright 2025 syzkaller project authors. All rights reserved.
2+
// Use of this source code is governed by Apache 2 LICENSE that can be found in the LICENSE file.
3+
4+
package db
5+
6+
import (
7+
"testing"
8+
9+
"github.com/stretchr/testify/require"
10+
)
11+
12+
func TestMigrations(t *testing.T) {
13+
// Run, rollback and then again apply all DB migrations.
14+
client, _ := NewTransientDB(t)
15+
m, err := getMigrateInstance(client.DatabaseName())
16+
require.NoError(t, err)
17+
err = m.Down()
18+
require.NoError(t, err, "migrating down failed")
19+
err = m.Up()
20+
require.NoError(t, err, "migrating up again failed")
21+
}

tools/syz-symbolize/symbolize.go

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ var (
2424
flagKernelObj = flag.String("kernel_obj", ".", "path to kernel build/obj dir")
2525
flagKernelSrc = flag.String("kernel_src", "", "path to kernel sources (defaults to kernel_obj)")
2626
flagOutDir = flag.String("outdir", "", "output directory")
27+
flagConfig = flag.String("config", "", "optional configuration file")
2728
)
2829

2930
func main() {
@@ -33,11 +34,17 @@ func main() {
3334
flag.PrintDefaults()
3435
os.Exit(1)
3536
}
36-
cfg, err := mgrconfig.LoadPartialData([]byte(`{
37-
"kernel_obj": "` + *flagKernelObj + `",
38-
"kernel_src": "` + *flagKernelSrc + `",
39-
"target": "` + *flagOS + "/" + *flagArch + `"
40-
}`))
37+
var err error
38+
cfg := &mgrconfig.Config{}
39+
if *flagConfig != "" {
40+
cfg, err = mgrconfig.LoadPartialFile(*flagConfig)
41+
} else {
42+
cfg, err = mgrconfig.LoadPartialData([]byte(`{
43+
"kernel_obj": "` + *flagKernelObj + `",
44+
"kernel_src": "` + *flagKernelSrc + `",
45+
"target": "` + *flagOS + "/" + *flagArch + `"
46+
}`))
47+
}
4148
if err != nil {
4249
tool.Fail(err)
4350
}

0 commit comments

Comments
 (0)