diff options
| author | Julie Qiu <julie@golang.org> | 2020-04-27 12:16:16 -0400 |
|---|---|---|
| committer | Julie Qiu <julieqiu@google.com> | 2020-04-29 02:55:01 +0000 |
| commit | e8b829309c4d22786ce1b2119f6e118b1bbbbff4 (patch) | |
| tree | b8eb346e952364fa0ec5a3fb3b7ea5794dfd21fb /internal/postgres/versionstate.go | |
| parent | e2a7746079017490697632e0d63f514172197f7c (diff) | |
| download | go-x-pkgsite-e8b829309c4d22786ce1b2119f6e118b1bbbbff4.tar.xz | |
internal/postgres: read/write module_version_states.num_packages
Change-Id: Ia0e4e59e81b9db3e5a439a58caf1b7627fa52f52
Reviewed-on: https://team-review.git.corp.google.com/c/golang/discovery/+/729485
Reviewed-by: Jonathan Amsterdam <jba@google.com>
Diffstat (limited to 'internal/postgres/versionstate.go')
| -rw-r--r-- | internal/postgres/versionstate.go | 27 |
1 files changed, 22 insertions, 5 deletions
diff --git a/internal/postgres/versionstate.go b/internal/postgres/versionstate.go index 565b991c..a870b1fa 100644 --- a/internal/postgres/versionstate.go +++ b/internal/postgres/versionstate.go @@ -9,6 +9,7 @@ import ( "database/sql" "fmt" "io" + "net/http" "sort" "strings" "time" @@ -59,6 +60,14 @@ func (db *DB) UpsertModuleVersionState(ctx context.Context, modulePath, vers, ap sqlErrorMsg = fetchErr.Error() } + var numPackages *int + if !(status >= http.StatusBadRequest && status <= http.StatusNotFound) { + // If a module was fetched a 40x error in this range, we won't know how + // many packages it has. + n := len(packageVersionStates) + numPackages = &n + } + result, err := tx.Exec(ctx, ` INSERT INTO module_version_states AS mvs ( module_path, @@ -68,8 +77,9 @@ func (db *DB) UpsertModuleVersionState(ctx context.Context, modulePath, vers, ap index_timestamp, status, go_mod_path, - error) - VALUES ($1, $2, $3, $4, $5, $6, $7, $8) + error, + num_packages) + VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9) ON CONFLICT (module_path, version) DO UPDATE SET @@ -77,6 +87,7 @@ func (db *DB) UpsertModuleVersionState(ctx context.Context, modulePath, vers, ap status=excluded.status, go_mod_path=excluded.go_mod_path, error=excluded.error, + num_packages=excluded.num_packages, try_count=mvs.try_count+1, last_processed_at=CURRENT_TIMESTAMP, -- back off exponentially until 1 hour, then at constant 1-hour intervals @@ -89,7 +100,7 @@ func (db *DB) UpsertModuleVersionState(ctx context.Context, modulePath, vers, ap CURRENT_TIMESTAMP + INTERVAL '1 hour' END;`, modulePath, vers, version.ForSorting(vers), - appVersion, timestamp, status, goModPath, sqlErrorMsg) + appVersion, timestamp, status, goModPath, sqlErrorMsg, numPackages) if err != nil { return err } @@ -187,7 +198,8 @@ const moduleVersionStateColumns = ` last_processed_at, next_processed_after, app_version, - go_mod_path` + go_mod_path, + num_packages` // scanModuleVersionState constructs an *internal.ModuleModuleVersionState from the given // scanner. It expects columns to be in the order of moduleVersionStateColumns. @@ -195,15 +207,20 @@ func scanModuleVersionState(scan func(dest ...interface{}) error) (*internal.Mod var ( v internal.ModuleVersionState lastProcessedAt pq.NullTime + numPackages sql.NullInt64 ) if err := scan(&v.ModulePath, &v.Version, &v.IndexTimestamp, &v.CreatedAt, &v.Status, &v.Error, - &v.TryCount, &v.LastProcessedAt, &v.NextProcessedAfter, &v.AppVersion, &v.GoModPath); err != nil { + &v.TryCount, &v.LastProcessedAt, &v.NextProcessedAfter, &v.AppVersion, &v.GoModPath, &numPackages); err != nil { return nil, err } if lastProcessedAt.Valid { lp := lastProcessedAt.Time v.LastProcessedAt = &lp } + if numPackages.Valid { + n := int(numPackages.Int64) + v.NumPackages = &n + } return &v, nil } |
