[perf] Make types for trace id and source file id.

Also use stronger types more consistenly.

Change-Id: I72122718d21627b449f397c89654c5e5dd8a1cba
Reviewed-on: https://skia-review.googlesource.com/c/buildbot/+/305682
Commit-Queue: Joe Gregorio <jcgregorio@google.com>
Reviewed-by: Kevin Lubick <kjlubick@google.com>
Reviewed-by: Joe Gregorio <jcgregorio@google.com>
diff --git a/perf/go/tracestore/sqltracestore/sqltracestore.go b/perf/go/tracestore/sqltracestore/sqltracestore.go
index f00ad8d..fcd9d10 100644
--- a/perf/go/tracestore/sqltracestore/sqltracestore.go
+++ b/perf/go/tracestore/sqltracestore/sqltracestore.go
@@ -152,10 +152,22 @@
 // per instance.
 const cacheSize = 20 * 1000 * 1000
 
-// Ingest instances have around 8 cores and many ingested files have ~10K values, so
-// pick a batch size that allows roughly one request per core.
+// Ingest instances have around 8 cores and many ingested files have ~10K
+// values, so pick a batch size that allows roughly one request per core.
 const traceValuesInsertBatchSize = 1000
 
+// traceIDFromSQL is the type of the IDs that are used in the SQL database for
+// traces.
+type traceIDFromSQL int64
+
+const badTraceIDFromSQL traceIDFromSQL = -1
+
+// sourceFileIDFromSQL is the type of the IDs that are used in the SQL database
+// for source files.
+type sourceFileIDFromSQL int64
+
+const badSourceFileIDFromSQL sourceFileIDFromSQL = -1
+
 // statement is an SQL statement or fragment of an SQL statement.
 type statement int
 
@@ -201,15 +213,15 @@
 type insertIntoPostingsValue struct {
 	TileNumber types.TileNumber
 	KeyValue   string
-	TraceID    int64
+	TraceID    traceIDFromSQL
 }
 
 // replaceTraceValue is used in the replaceTraceValues template.
 type replaceTraceValue struct {
-	TraceID      int64
+	TraceID      traceIDFromSQL
 	CommitNumber types.CommitNumber
 	Val          float32
-	SourceFileID int64
+	SourceFileID sourceFileIDFromSQL
 }
 
 var statementsByDialect = map[perfsql.Dialect]statements{
@@ -303,8 +315,8 @@
 	// unpreparedStatements are parsed templates that can be used to construct SQL statements.
 	unpreparedStatements map[statement]*template.Template
 
-	// cache is an LRU cache used to store the ids (int64) of trace names (string):
-	//    "traceName" -> int64
+	// cache is an LRU cache used to store the ids (traceIDFromSQL) of trace names (string):
+	//    "traceName" -> traceIDFromSQL
 	// and if a traces postings have been written for a tile (bool).
 	//    "traceID-tileNumber" -> bool
 	cache *lru.Cache
@@ -368,11 +380,11 @@
 
 // GetLatestTile implements the tracestore.TraceStore interface.
 func (s *SQLTraceStore) GetLatestTile() (types.TileNumber, error) {
-	var tileNumber int64
+	tileNumber := types.BadTileNumber
 	if err := s.preparedStatements[getLatestTile].QueryRowContext(context.TODO()).Scan(&tileNumber); err != nil {
-		return types.BadTileNumber, skerr.Wrap(err)
+		return tileNumber, skerr.Wrap(err)
 	}
-	return types.TileNumber(tileNumber), nil
+	return tileNumber, nil
 }
 
 func (s *SQLTraceStore) paramSetForTile(tileNumber types.TileNumber) (paramtools.ParamSet, error) {
@@ -495,19 +507,19 @@
 
 	for rows.Next() {
 		var traceName string
-		var commitNumber int64
+		var commitNumber types.CommitNumber
 		var val float64
 		if err := rows.Scan(&traceName, &commitNumber, &val); err != nil {
 			return nil, skerr.Wrap(err)
 		}
 		if _, ok := ret[traceName]; ok {
-			ret[traceName][commitNumber%int64(s.tileSize)] = float32(val)
+			ret[traceName][s.OffsetFromCommitNumber(commitNumber)] = float32(val)
 		} else {
 			// TODO(jcgregorio) Replace this vec32.New() with a
 			// https://golang.org/pkg/sync/#Pool since this is our most used/reused
 			// type of memory.
 			ret[traceName] = vec32.New(int(s.tileSize))
-			ret[traceName][commitNumber%int64(s.tileSize)] = float32(val)
+			ret[traceName][s.OffsetFromCommitNumber(commitNumber)] = float32(val)
 		}
 	}
 	if err := rows.Err(); err != nil {
@@ -571,6 +583,7 @@
 	AND `, beginCommit, endCommit)
 
 	// TODO(jcgregorio) Break out into own function.
+	// TODO(jcgregorio) Convert to use text/templates.
 	whereClauses := make([]string, len(plan))
 	clauseIndex := 0
 	for key, values := range plan {
@@ -662,12 +675,12 @@
 	}
 	for rows.Next() {
 		var traceName string
-		var commitNumber int64
+		var commitNumber types.CommitNumber
 		var val float64
 		if err := rows.Scan(&traceName, &commitNumber, &val); err != nil {
 			return nil, skerr.Wrap(err)
 		}
-		ret[traceName][commitNumber%int64(s.tileSize)] = float32(val)
+		ret[traceName][s.OffsetFromCommitNumber(commitNumber)] = float32(val)
 	}
 	if err := rows.Err(); err != nil {
 		return nil, skerr.Wrapf(err, "tileNumber=%d", tileNumber)
@@ -701,9 +714,9 @@
 }
 
 // updateSourceFile writes the filename into the SourceFiles table and returns
-// the int64 id of that filename.
-func (s *SQLTraceStore) updateSourceFile(filename string) (int64, error) {
-	ret := int64(-1)
+// the sourceFileIDFromSQL of that filename.
+func (s *SQLTraceStore) updateSourceFile(filename string) (sourceFileIDFromSQL, error) {
+	ret := badSourceFileIDFromSQL
 	_, err := s.preparedStatements[insertIntoSourceFiles].ExecContext(context.TODO(), filename)
 	if err != nil {
 		return ret, skerr.Wrap(err)
@@ -719,7 +732,7 @@
 // updatePostings writes all the entries into our inverted index in Postings for
 // the given traceID and tileNumber. The Params given are from the parse trace
 // name.
-func (s *SQLTraceStore) updatePostings(p paramtools.Params, tileNumber types.TileNumber, traceID int64) error {
+func (s *SQLTraceStore) updatePostings(p paramtools.Params, tileNumber types.TileNumber, traceID traceIDFromSQL) error {
 	// Clean the data to avoid SQL injection attacks.
 	p = query.ForceValid(p)
 
@@ -748,24 +761,24 @@
 	return nil
 }
 
-func getPostingsCacheEntryKey(traceID int64, tileNumber types.TileNumber) string {
+func getPostingsCacheEntryKey(traceID traceIDFromSQL, tileNumber types.TileNumber) string {
 	return fmt.Sprintf("%d-%d", traceID, tileNumber)
 }
 
-// writeTraceIDAndPostings writes the trace name into the TraceIDs table and returns the
-// int64 id of that trace name. This operation will happen repeatedly as data is
-// ingested so we cache the results in the LRU cache.
-func (s *SQLTraceStore) writeTraceIDAndPostings(traceNameAsParams paramtools.Params, tileNumber types.TileNumber) (int64, error) {
-	traceID := int64(-1)
+// writeTraceIDAndPostings writes the trace name into the TraceIDs table and
+// returns the traceIDFromSQL of that trace name. This operation will happen
+// repeatedly as data is ingested so we cache the results in the LRU cache.
+func (s *SQLTraceStore) writeTraceIDAndPostings(traceNameAsParams paramtools.Params, tileNumber types.TileNumber) (traceIDFromSQL, error) {
+	traceID := badTraceIDFromSQL
 
 	traceName, err := query.MakeKey(traceNameAsParams)
 	if err != nil {
 		return traceID, skerr.Wrap(err)
 	}
 
-	// Get an int64 trace id for the traceName.
+	// Get a traceIDFromSQL for the traceName.
 	if iret, ok := s.cache.Get(traceName); ok {
-		traceID = iret.(int64)
+		traceID = iret.(traceIDFromSQL)
 	} else {
 		_, err := s.preparedStatements[insertIntoTraceIDs].ExecContext(context.TODO(), traceName)
 		if err != nil {
diff --git a/perf/go/tracestore/sqltracestore/sqltracestore_test.go b/perf/go/tracestore/sqltracestore/sqltracestore_test.go
index 737cdd8..cf7c3eb 100644
--- a/perf/go/tracestore/sqltracestore/sqltracestore_test.go
+++ b/perf/go/tracestore/sqltracestore/sqltracestore_test.go
@@ -62,8 +62,8 @@
 
 func testWriteTraceIDAndPostings(t *testing.T, s *SQLTraceStore) {
 	const traceName = ",arch=x86,config=8888,"
-	const tileNumber types.TileNumber = 1
 	p := paramtools.NewParams(traceName)
+	const tileNumber types.TileNumber = 1
 
 	// Do each update twice to ensure the IDs don't change.
 	traceID, err := s.writeTraceIDAndPostings(p, tileNumber)
@@ -76,7 +76,7 @@
 	// Confirm the cache entries exist.
 	got, ok := s.cache.Get(traceName)
 	assert.True(t, ok)
-	assert.Equal(t, traceID, got.(int64))
+	assert.Equal(t, traceID, got.(traceIDFromSQL))
 	assert.True(t, s.cache.Contains(getPostingsCacheEntryKey(traceID, tileNumber)))
 
 	const traceName2 = ",arch=arm,config=8888,"
@@ -359,13 +359,14 @@
 }
 
 func testParamSetForTile(t *testing.T, s *SQLTraceStore) {
-	_, err := s.writeTraceIDAndPostings(paramtools.NewParams(",config=8888,arch=x86,"), 1)
+	const tileNumber types.TileNumber = 1
+	_, err := s.writeTraceIDAndPostings(paramtools.NewParams(",config=8888,arch=x86,"), tileNumber)
 	assert.NoError(t, err)
-	_, err = s.writeTraceIDAndPostings(paramtools.NewParams(",config=565,arch=arm,"), 1)
+	_, err = s.writeTraceIDAndPostings(paramtools.NewParams(",config=565,arch=arm,"), tileNumber)
 	assert.NoError(t, err)
-	_, err = s.writeTraceIDAndPostings(paramtools.NewParams(",config=8888,arch=arm64,"), 1)
+	_, err = s.writeTraceIDAndPostings(paramtools.NewParams(",config=8888,arch=arm64,"), tileNumber)
 	assert.NoError(t, err)
-	_, err = s.writeTraceIDAndPostings(paramtools.NewParams(",config=gpu,arch=x86_64,"), 1)
+	_, err = s.writeTraceIDAndPostings(paramtools.NewParams(",config=gpu,arch=x86_64,"), tileNumber)
 	assert.NoError(t, err)
 
 	ps, err := s.paramSetForTile(1)
@@ -385,11 +386,11 @@
 }
 
 func testGetLatestTile(t *testing.T, s *SQLTraceStore) {
-	_, err := s.writeTraceIDAndPostings(paramtools.NewParams(",config=8888,arch=x86,"), 1)
+	_, err := s.writeTraceIDAndPostings(paramtools.NewParams(",config=8888,arch=x86,"), types.TileNumber(1))
 	assert.NoError(t, err)
-	_, err = s.writeTraceIDAndPostings(paramtools.NewParams(",config=8888,arch=arm64,"), 5)
+	_, err = s.writeTraceIDAndPostings(paramtools.NewParams(",config=8888,arch=arm64,"), types.TileNumber(5))
 	assert.NoError(t, err)
-	_, err = s.writeTraceIDAndPostings(paramtools.NewParams(",config=gpu,arch=x86_64,"), 7)
+	_, err = s.writeTraceIDAndPostings(paramtools.NewParams(",config=gpu,arch=x86_64,"), types.TileNumber(7))
 	assert.NoError(t, err)
 
 	tileNumber, err := s.GetLatestTile()
@@ -407,14 +408,15 @@
 func testGetOrderedParamSet(t *testing.T, s *SQLTraceStore) {
 	ctx := context.Background()
 
+	const tileNumber types.TileNumber = 1
 	// Now add some trace ids.
-	_, err := s.writeTraceIDAndPostings(paramtools.NewParams(",config=8888,arch=x86,"), 1)
+	_, err := s.writeTraceIDAndPostings(paramtools.NewParams(",config=8888,arch=x86,"), tileNumber)
 	assert.NoError(t, err)
-	_, err = s.writeTraceIDAndPostings(paramtools.NewParams(",config=565,arch=arm,"), 1)
+	_, err = s.writeTraceIDAndPostings(paramtools.NewParams(",config=565,arch=arm,"), tileNumber)
 	assert.NoError(t, err)
-	_, err = s.writeTraceIDAndPostings(paramtools.NewParams(",config=8888,arch=arm64,"), 1)
+	_, err = s.writeTraceIDAndPostings(paramtools.NewParams(",config=8888,arch=arm64,"), tileNumber)
 	assert.NoError(t, err)
-	_, err = s.writeTraceIDAndPostings(paramtools.NewParams(",config=gpu,arch=x86_64,"), 1)
+	_, err = s.writeTraceIDAndPostings(paramtools.NewParams(",config=gpu,arch=x86_64,"), tileNumber)
 	assert.NoError(t, err)
 
 	ops, err := s.GetOrderedParamSet(ctx, 1)
@@ -439,14 +441,15 @@
 func testCountIndices(t *testing.T, s *SQLTraceStore) {
 	ctx := context.Background()
 
+	const tileNumber types.TileNumber = 1
 	// Now add some trace ids.
-	_, err := s.writeTraceIDAndPostings(paramtools.NewParams(",config=8888,arch=x86,"), 1)
+	_, err := s.writeTraceIDAndPostings(paramtools.NewParams(",config=8888,arch=x86,"), tileNumber)
 	assert.NoError(t, err)
-	_, err = s.writeTraceIDAndPostings(paramtools.NewParams(",config=565,arch=arm,"), 1)
+	_, err = s.writeTraceIDAndPostings(paramtools.NewParams(",config=565,arch=arm,"), tileNumber)
 	assert.NoError(t, err)
-	_, err = s.writeTraceIDAndPostings(paramtools.NewParams(",config=8888,arch=arm64,"), 1)
+	_, err = s.writeTraceIDAndPostings(paramtools.NewParams(",config=8888,arch=arm64,"), tileNumber)
 	assert.NoError(t, err)
-	_, err = s.writeTraceIDAndPostings(paramtools.NewParams(",config=gpu,arch=x86_64,"), 1)
+	_, err = s.writeTraceIDAndPostings(paramtools.NewParams(",config=gpu,arch=x86_64,"), tileNumber)
 	assert.NoError(t, err)
 
 	count, err := s.CountIndices(ctx, 1)