internal/postgres: remove module from version_map in DeleteModule
postgres.DeleteModule is updated to delete the corresponding module_path
and resolved_version row from the version_map table.
Fixes #39633
Change-Id: I9de46b08e535bea52c2ea4dbab1c71a8e1c2c2f7
Reviewed-on: https://go-review.googlesource.com/c/pkgsite/+/238637
Reviewed-by: Julie Qiu <julie@golang.org>
diff --git a/internal/postgres/insert_module.go b/internal/postgres/insert_module.go
index d2d0a76..7ccc4d7 100644
--- a/internal/postgres/insert_module.go
+++ b/internal/postgres/insert_module.go
@@ -697,6 +697,11 @@
if _, err := db.db.Exec(ctx, stmt, modulePath, version); err != nil {
return err
}
+
+ if _, err = db.db.Exec(ctx, `DELETE FROM version_map WHERE module_path = $1 AND resolved_version = $2`, modulePath, version); err != nil {
+ return err
+ }
+
var x int
err = db.db.QueryRow(ctx, `SELECT 1 FROM modules WHERE module_path=$1 LIMIT 1`, modulePath).Scan(&x)
if err != sql.ErrNoRows || err == nil {
diff --git a/internal/postgres/insert_module_test.go b/internal/postgres/insert_module_test.go
index 16275a5..4562ac3 100644
--- a/internal/postgres/insert_module_test.go
+++ b/internal/postgres/insert_module_test.go
@@ -291,25 +291,42 @@
defer ResetTestDB(testDB, t)
v := sample.DefaultModule()
+
if err := testDB.InsertModule(ctx, v); err != nil {
t.Fatal(err)
}
if _, err := testDB.LegacyGetModuleInfo(ctx, v.ModulePath, v.Version); err != nil {
t.Fatal(err)
}
+
+ vm := sample.DefaultVersionMap()
+ if err := testDB.UpsertVersionMap(ctx, vm); err != nil {
+ t.Fatal(err)
+ }
+ if _, err := testDB.GetVersionMap(ctx, v.ModulePath, v.Version); err != nil {
+ t.Fatal(err)
+ }
+
if err := testDB.DeleteModule(ctx, v.ModulePath, v.Version); err != nil {
t.Fatal(err)
}
if _, err := testDB.LegacyGetModuleInfo(ctx, v.ModulePath, v.Version); !errors.Is(err, derrors.NotFound) {
t.Errorf("got %v, want NotFound", err)
}
+
var x int
err := testDB.Underlying().QueryRow(ctx, "SELECT 1 FROM imports_unique WHERE from_module_path = $1",
v.ModulePath).Scan(&x)
if err != sql.ErrNoRows {
t.Errorf("imports_unique: got %v, want ErrNoRows", err)
}
- // TODO(golang/go#39633): check removal from version_map
+ err = testDB.Underlying().QueryRow(
+ ctx,
+ "SELECT 1 FROM version_map WHERE module_path = $1 AND resolved_version = $2",
+ v.ModulePath, v.Version).Scan(&x)
+ if err != sql.ErrNoRows {
+ t.Errorf("version_map: got %v, want ErrNoRows", err)
+ }
}
func TestPostgres_NewerAlternative(t *testing.T) {
diff --git a/internal/testing/sample/sample.go b/internal/testing/sample/sample.go
index 6f6af2c..13e17ae 100644
--- a/internal/testing/sample/sample.go
+++ b/internal/testing/sample/sample.go
@@ -9,6 +9,7 @@
import (
"fmt"
"math"
+ "net/http"
"path"
"strings"
"time"
@@ -150,6 +151,17 @@
LegacyPackage(ModulePath, Suffix))
}
+func DefaultVersionMap() *internal.VersionMap {
+ return &internal.VersionMap{
+ ModulePath: ModulePath,
+ RequestedVersion: VersionString,
+ ResolvedVersion: VersionString,
+ Status: http.StatusOK,
+ GoModPath: "",
+ Error: "",
+ }
+}
+
// Module creates a Module with the given path and version.
// The list of suffixes is used to create LegacyPackages within the module.
func Module(modulePath, version string, suffixes ...string) *internal.Module {
diff --git a/internal/worker/fetch_test.go b/internal/worker/fetch_test.go
index bf3fb91..f3ee028 100644
--- a/internal/worker/fetch_test.go
+++ b/internal/worker/fetch_test.go
@@ -80,12 +80,14 @@
if vs.Status != want {
t.Fatalf("testDB.GetModuleVersionState(ctx, %q, %q): status = %v, want = %d", modulePath, version, vs.Status, want)
}
- vm, err := testDB.GetVersionMap(ctx, modulePath, version)
- if err != nil {
- t.Fatal(err)
- }
- if vm.Status != want {
- t.Fatalf("testDB.GetVersionMap(ctx, %q, %q): status = %d, want = %d", modulePath, version, vm.Status, want)
+ if want != http.StatusNotFound {
+ vm, err := testDB.GetVersionMap(ctx, modulePath, version)
+ if err != nil {
+ t.Fatal(err)
+ }
+ if vm.Status != want {
+ t.Fatalf("testDB.GetVersionMap(ctx, %q, %q): status = %d, want = %d", modulePath, version, vm.Status, want)
+ }
}
}
@@ -203,12 +205,9 @@
if vs.Status != wantCode {
t.Fatalf("testDB.GetModuleVersionState(ctx, %q, %q): status=%v, want %d", modulePath, version, vs.Status, wantCode)
}
- vm, err := testDB.GetVersionMap(ctx, modulePath, version)
- if err != nil {
- t.Fatal(err)
- }
- if vm.Status != wantCode {
- t.Fatalf("testDB.GetVersionMap(ctx, %q, %q): status=%v, want %d", modulePath, version, vm.Status, wantCode)
+ _, err = testDB.GetVersionMap(ctx, modulePath, version)
+ if !errors.Is(err, derrors.NotFound) {
+ t.Fatalf("got %v, want Is(NotFound)", err)
}
}
@@ -357,12 +356,9 @@
t.Errorf("testDB.GetModuleVersionState(ctx, %q, %q): goModPath=%q, want %q", modulePath, version, vs.GoModPath, goModPath)
}
- vm, err := testDB.GetVersionMap(ctx, modulePath, version)
- if err != nil {
- t.Fatal(err)
- }
- if vm.Status != wantCode {
- t.Fatalf("testDB.GetVersionMap(ctx, %q, %q): status=%v, want %d", modulePath, version, vm.Status, wantCode)
+ _, err = testDB.GetVersionMap(ctx, modulePath, version)
+ if !errors.Is(err, derrors.NotFound) {
+ t.Fatalf("got %v, want Is(NotFound)", err)
}
}