@@ -57,13 +57,35 @@ func FetchAndUpdateState(ctx context.Context, modulePath, requestedVersion strin
57
57
58
58
ft := fetchAndInsertModule (ctx , modulePath , requestedVersion , proxyClient , sourceClient , db )
59
59
span .AddAttributes (trace .Int64Attribute ("numPackages" , int64 (len (ft .PackageVersionStates ))))
60
- dbErr := updateVersionMapAndDeleteModulesWithErrors (ctx , db , ft )
61
- if dbErr != nil {
62
- log .Error (ctx , dbErr )
63
- ft .Error = dbErr
64
- ft .Status = http .StatusInternalServerError
60
+
61
+ // If there were any errors processing the module then we didn't insert it.
62
+ // Delete it in case we are reprocessing an existing module.
63
+ if ft .Status >= 400 {
64
+ if err := deleteModule (ctx , db , ft ); err != nil {
65
+ log .Error (ctx , err )
66
+ ft .Error = err
67
+ ft .Status = http .StatusInternalServerError
68
+ }
69
+ // Do not return an error here, because we want to insert into
70
+ // module_version_states below.
71
+ }
72
+ // Regardless of what the status code is, insert the result into
73
+ // version_map, so that a response can be returned for frontend_fetch.
74
+ if err := updateVersionMap (ctx , db , ft ); err != nil {
75
+ log .Error (ctx , err )
76
+ if ft .Status != http .StatusInternalServerError {
77
+ ft .Error = err
78
+ ft .Status = http .StatusInternalServerError
79
+ }
80
+ // Do not return an error here, because we want to insert into
81
+ // module_version_states below.
65
82
}
66
83
if ! semver .IsValid (ft .ResolvedVersion ) {
84
+ // If the requestedVersion was not successfully resolved to a semantic
85
+ // version, then at this point it will be the same as the
86
+ // resolvedVersion. This fetch request does not need to be recorded in
87
+ // module_version_states, since that table is only used to track
88
+ // modules that have been published to index.golang.org.
67
89
return ft .Status , ft .Error
68
90
}
69
91
@@ -160,11 +182,14 @@ func fetchAndInsertModule(ctx context.Context, modulePath, requestedVersion stri
160
182
return ft
161
183
}
162
184
163
- func updateVersionMapAndDeleteModulesWithErrors (ctx context.Context , db * postgres.DB , ft * fetchTask ) (err error ) {
164
- defer derrors .Wrap (& err , "updateVersionMapAndDeleteModulesWithErrors(%q, %q, %q, %d, %v)" ,
165
- ft .ModulePath , ft .RequestedVersion , ft .ResolvedVersion , ft .Status , ft .Error )
166
-
167
- ctx , span := trace .StartSpan (ctx , "worker.updateFetchResult" )
185
+ func updateVersionMap (ctx context.Context , db * postgres.DB , ft * fetchTask ) (err error ) {
186
+ start := time .Now ()
187
+ defer func () {
188
+ ft .timings ["worker.updatedVersionMap" ] = time .Since (start )
189
+ derrors .Wrap (& err , "updateVersionMap(%q, %q, %q, %d, %v)" ,
190
+ ft .ModulePath , ft .RequestedVersion , ft .ResolvedVersion , ft .Status , ft .Error )
191
+ }()
192
+ ctx , span := trace .StartSpan (ctx , "worker.updateVersionMap" )
168
193
defer span .End ()
169
194
170
195
var errMsg string
@@ -179,31 +204,26 @@ func updateVersionMapAndDeleteModulesWithErrors(ctx context.Context, db *postgre
179
204
GoModPath : ft .GoModPath ,
180
205
Error : errMsg ,
181
206
}
182
- start := time .Now ()
183
- err = db .UpsertVersionMap (ctx , vm )
184
- ft .timings ["db.UpsertVersionMap" ] = time .Since (start )
185
- if err != nil {
207
+ if err := db .UpsertVersionMap (ctx , vm ); err != nil {
186
208
return err
187
209
}
188
- if ! semver .IsValid (vm .ResolvedVersion ) {
189
- // If the requestedVersion was not successfully resolved, at
190
- // this point it will be the same as the resolvedVersion.
191
- // No additional tables need to be updated.
192
- return nil
193
- }
210
+ return nil
211
+ }
194
212
195
- // If there were any errors processing the module then we didn't insert it.
196
- // Delete it in case we are reprocessing an existing module.
197
- if vm .Status > 400 {
198
- log .Infof (ctx , "%s@%s: code=%d, deleting" , vm .ModulePath , vm .ResolvedVersion , vm .Status )
199
- start = time .Now ()
200
- err = db .DeleteModule (ctx , vm .ModulePath , vm .ResolvedVersion )
201
- ft .timings ["db.DeleteModule" ] = time .Since (start )
202
- if err != nil {
203
- return err
204
- }
205
- }
213
+ func deleteModule (ctx context.Context , db * postgres.DB , ft * fetchTask ) (err error ) {
214
+ start := time .Now ()
215
+ defer func () {
216
+ ft .timings ["worker.deleteModule" ] = time .Since (start )
217
+ derrors .Wrap (& err , "deleteModule(%q, %q, %q, %d, %v)" ,
218
+ ft .ModulePath , ft .RequestedVersion , ft .ResolvedVersion , ft .Status , ft .Error )
219
+ }()
220
+ ctx , span := trace .StartSpan (ctx , "worker.deleteModule" )
221
+ defer span .End ()
206
222
223
+ log .Infof (ctx , "%s@%s: code=%d, deleting" , ft .ModulePath , ft .ResolvedVersion , ft .Status )
224
+ if err := db .DeleteModule (ctx , ft .ModulePath , ft .ResolvedVersion ); err != nil {
225
+ return err
226
+ }
207
227
// If this was an alternative path (ft.Status == 491) and there is an older
208
228
// version in search_documents, delete it. This is the case where a module's
209
229
// canonical path was changed by the addition of a go.mod file. For example,
@@ -212,12 +232,9 @@ func updateVersionMapAndDeleteModulesWithErrors(ctx context.Context, db *postgre
212
232
// path is all lower-case, the old versions should not show up in search. We
213
233
// still leave their pages in the database so users of those old versions
214
234
// can still view documentation.
215
- if vm .Status == derrors .ToStatus (derrors .AlternativeModule ) {
216
- log .Infof (ctx , "%s@%s: code=491, deleting older version from search" , vm .ModulePath , vm .ResolvedVersion )
217
- start = time .Now ()
218
- err = db .DeleteOlderVersionFromSearchDocuments (ctx , vm .ModulePath , vm .ResolvedVersion )
219
- ft .timings ["db.DeleteOlderVersionFromSearchDocuments" ] = time .Since (start )
220
- if err != nil {
235
+ if ft .Status == derrors .ToStatus (derrors .AlternativeModule ) {
236
+ log .Infof (ctx , "%s@%s: code=491, deleting older version from search" , ft .ModulePath , ft .ResolvedVersion )
237
+ if err := db .DeleteOlderVersionFromSearchDocuments (ctx , ft .ModulePath , ft .ResolvedVersion ); err != nil {
221
238
return err
222
239
}
223
240
}
0 commit comments