blob: 064e5e99e82524f7c8b05f4b4bc899a68c887880 [file] [log] [blame]
package main
import (
"flag"
"log"
"time"
"github.com/davecgh/go-spew/spew"
"go.skia.org/infra/go/common"
"go.skia.org/infra/go/filetilestore"
"go.skia.org/infra/go/grpclog"
"go.skia.org/infra/go/sklog"
"go.skia.org/infra/go/tiling"
"go.skia.org/infra/go/trace/db"
"go.skia.org/infra/go/util"
gtypes "go.skia.org/infra/golden/go/types"
"google.golang.org/grpc"
)
// flags
var (
address = flag.String("address", "localhost:9090", "The address of the traceserver gRPC endpoint.")
tilestore = flag.String("tilestore", "/usr/local/google/home/jcgregorio/projects/tiles/tileStore3/", "The directory of the file tile store.")
)
func diff(tile *tiling.Tile, ts db.DB) error {
commits := tile.Commits
startTime := time.Unix(commits[0].CommitTime, 0)
commitIDs, err := ts.List(startTime, time.Now())
if err != nil {
return err
}
sklog.Infof("COMMIT ids:\n\n\n %s\n\n\n", spew.Sdump(commitIDs))
sklog.Infof("LOADING tile")
traceDBTile, _, err := ts.TileFromCommits(commitIDs)
if err != nil {
return err
}
minLen := util.MinInt(len(commits), len(traceDBTile.Commits))
tdbTraces := traceDBTile.Traces
sklog.Infof("Commits/traces in tilestore: %d - %d", len(commits), len(tile.Traces))
sklog.Infof("Commits/traces in tracedb : %d - %d", len(traceDBTile.Commits), len(tdbTraces))
count := 0
matchingCount := 0
for traceID, trace := range tile.Traces {
_, ok := tdbTraces[traceID]
if !ok {
sklog.Fatalf("Trace missing: %s", traceID)
}
v1 := trace.(*gtypes.GoldenTrace).Digests[:minLen]
v2 := tdbTraces[traceID].(*gtypes.GoldenTrace).Digests[:minLen]
identicalCount := 0
indices := make([]int, 0, minLen)
for idx, val := range v1 {
if val == v2[idx] {
identicalCount++
} else {
indices = append(indices, idx)
}
}
if identicalCount != minLen {
sklog.Infof("Trace differs by %d / %d / %.2f, %v", identicalCount, minLen, float64(identicalCount)/float64(minLen), indices)
} else {
matchingCount++
}
count++
}
sklog.Infof("Compared %d traces. Matching: %d", count, matchingCount)
return nil
}
func main() {
common.Init()
grpclog.Init()
// Load the 0,-1 tile.
fileTilestore := filetilestore.NewFileTileStore(*tilestore, "gold", time.Hour)
tile, err := fileTilestore.Get(0, -1)
if err != nil {
sklog.Fatalf("Failed to load tile: %s", err)
}
// Trim to the last 50 commits.
begin := 0
end := tile.LastCommitIndex()
if end >= 49 {
begin = end - 49
}
sklog.Infof("Loaded Tile")
tile, err = tile.Trim(begin, end)
// Set up a connection to the server.
conn, err := grpc.Dial(*address, grpc.WithInsecure())
if err != nil {
sklog.Fatalf("did not connect: %v", err)
}
defer util.Close(conn)
builder := gtypes.GoldenTraceBuilder
sklog.Infof("START load tracedb.")
ts, err := db.NewTraceServiceDB(conn, builder)
if err != nil {
log.Fatalf("Failed to create db.DB: %s", err)
}
sklog.Infof("DONE load tracedb.")
if err = diff(tile, ts); err != nil {
sklog.Fatalf("Diff error: %s", err)
}
}