From b6e6498aed5e2b5c8ce2264c52e95d711d97082c Mon Sep 17 00:00:00 2001 From: Julie Qiu Date: Sun, 26 Apr 2020 17:46:39 -0400 Subject: internal/postgres: sort packageVersionStates db.UpsertModuleVersionState now sorts packageVersionStates by package path before sorting to prevent deadlocks. Change-Id: Ic83f08db343dbd8e8790bddddb66b7bb20ae6d26 Reviewed-on: https://team-review.git.corp.google.com/c/golang/discovery/+/729481 Reviewed-by: Jonathan Amsterdam --- internal/postgres/versionstate.go | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'internal/postgres/versionstate.go') diff --git a/internal/postgres/versionstate.go b/internal/postgres/versionstate.go index b59f39a9..565b991c 100644 --- a/internal/postgres/versionstate.go +++ b/internal/postgres/versionstate.go @@ -9,6 +9,7 @@ import ( "database/sql" "fmt" "io" + "sort" "strings" "time" @@ -103,6 +104,9 @@ func (db *DB) UpsertModuleVersionState(ctx context.Context, modulePath, vers, ap return nil } + sort.Slice(packageVersionStates, func(i, j int) bool { + return packageVersionStates[i].PackagePath < packageVersionStates[j].PackagePath + }) var vals []interface{} for _, pvs := range packageVersionStates { vals = append(vals, pvs.PackagePath, pvs.ModulePath, pvs.Version, pvs.Status, pvs.Error) -- cgit v1.3