aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--dashboard/app/api.go4
-rw-r--r--dashboard/dashapi/dashapi.go10
-rw-r--r--pkg/coveragedb/spanner.go12
-rw-r--r--tools/syz-covermerger/syz_covermerger.go9
4 files changed, 24 insertions, 11 deletions
diff --git a/dashboard/app/api.go b/dashboard/app/api.go
index bfd3add1b..b70cac882 100644
--- a/dashboard/app/api.go
+++ b/dashboard/app/api.go
@@ -1906,7 +1906,7 @@ func apiSaveCoverage(c context.Context, r *http.Request, payload []byte) (interf
sss = service.List()
log.Infof(c, "found %d subsystems for %s namespace", len(sss), coverage.Namespace)
}
- err := coveragedb.SaveMergeResult(
+ rowsCreated, err := coveragedb.SaveMergeResult(
context.Background(),
appengine.AppID(context.Background()),
coverage.FileData,
@@ -1927,5 +1927,5 @@ func apiSaveCoverage(c context.Context, r *http.Request, payload []byte) (interf
log.Infof(c, "updated coverage for ns %s, date %s to %d rows",
coverage.Namespace, coverage.DateTo.String(), coverage.TotalRows)
}
- return nil, err
+ return &rowsCreated, err
}
diff --git a/dashboard/dashapi/dashapi.go b/dashboard/dashapi/dashapi.go
index 9e1d29d0b..8133d47c5 100644
--- a/dashboard/dashapi/dashapi.go
+++ b/dashboard/dashapi/dashapi.go
@@ -704,8 +704,14 @@ type SaveCoverageReq struct {
Coverage *MergedCoverage
}
-func (dash *Dashboard) SaveCoverage(req *SaveCoverageReq) error {
- return dash.Query("save_coverage", req, nil)
+// SaveCoverage returns amount of records created in db.
+func (dash *Dashboard) SaveCoverage(req *SaveCoverageReq) (int, error) {
+ resp := new(int)
+ if err := dash.Query("save_coverage", req, resp); err != nil {
+ return 0, err
+ } else {
+ return *resp, err
+ }
}
type TestPatchRequest struct {
diff --git a/pkg/coveragedb/spanner.go b/pkg/coveragedb/spanner.go
index 5bbe4cbbb..db6d9ac79 100644
--- a/pkg/coveragedb/spanner.go
+++ b/pkg/coveragedb/spanner.go
@@ -73,12 +73,13 @@ func (c *Coverage) AddLineHitCount(line, hitCount int) {
}
func SaveMergeResult(ctx context.Context, projectID string, manCovMap ManagersCoverage,
- template *HistoryRecord, totalRows int64, sss []*subsystem.Subsystem) error {
+ template *HistoryRecord, totalRows int64, sss []*subsystem.Subsystem) (int, error) {
client, err := NewClient(ctx, projectID)
if err != nil {
- return fmt.Errorf("spanner.NewClient() failed: %s", err.Error())
+ return 0, fmt.Errorf("spanner.NewClient() failed: %s", err.Error())
}
defer client.Close()
+ var rowsCreated int
ssMatcher := subsystem.MakePathMatcher(sss)
ssCache := make(map[string][]string)
@@ -97,17 +98,18 @@ func SaveMergeResult(ctx context.Context, projectID string, manCovMap ManagersCo
// We keep the number of records low enough for the number of explicit mutations * 10 does not exceed the limit.
if len(mutations) > 1000 {
if _, err = client.Apply(ctx, mutations); err != nil {
- return fmt.Errorf("failed to spanner.Apply(inserts): %s", err.Error())
+ return rowsCreated, fmt.Errorf("failed to spanner.Apply(inserts): %s", err.Error())
}
+ rowsCreated += len(mutations)
mutations = nil
}
}
}
mutations = append(mutations, historyMutation(session, template, totalRows))
if _, err = client.Apply(ctx, mutations); err != nil {
- return fmt.Errorf("failed to spanner.Apply(inserts): %s", err.Error())
+ return rowsCreated, fmt.Errorf("failed to spanner.Apply(inserts): %s", err.Error())
}
- return nil
+ return rowsCreated, nil
}
type linesCoverage struct {
diff --git a/tools/syz-covermerger/syz_covermerger.go b/tools/syz-covermerger/syz_covermerger.go
index c0c55f01d..61a25dc1f 100644
--- a/tools/syz-covermerger/syz_covermerger.go
+++ b/tools/syz-covermerger/syz_covermerger.go
@@ -84,8 +84,11 @@ func main() {
}
coverage, _, _ := mergeResultsToCoverage(mergeResult)
+ managers := maps.Keys(coverage)
+ sort.Strings(managers)
+ fmt.Printf("merged signals for the following managers: %v\n", managers)
if *flagToDashAPI != "" {
- if err := saveCoverage(*flagToDashAPI, *flagDashboardClientName, &dashapi.MergedCoverage{
+ if rowsCreated, err := saveCoverage(*flagToDashAPI, *flagDashboardClientName, &dashapi.MergedCoverage{
Namespace: *flagNamespace,
Repo: *flagRepo,
Commit: *flagCommit,
@@ -95,13 +98,15 @@ func main() {
FileData: coverage,
}); err != nil {
log.Fatalf("failed to saveCoverage: %v", err)
+ } else {
+ fmt.Printf("created %d DB rows\n", rowsCreated)
}
}
printOnlyTotal := *flagToDashAPI != ""
printMergeResult(mergeResult, printOnlyTotal)
}
-func saveCoverage(dashboard, clientName string, d *dashapi.MergedCoverage) error {
+func saveCoverage(dashboard, clientName string, d *dashapi.MergedCoverage) (int, error) {
dash, err := dashapi.New(clientName, dashboard, "")
if err != nil {
log.Fatalf("failed dashapi.New(): %v", err)