Skip to content

Commit b936869

Browse files
committed
fix(ent): retry PackageVersion upsert on FK race in upsertBulkPackage and upsertPackage
Signed-off-by: Daniel Gellman <dgellman8@gmail.com>
1 parent 1361a15 commit b936869

1 file changed

Lines changed: 23 additions & 22 deletions

File tree

pkg/assembler/backends/ent/backend/package.go

Lines changed: 23 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -249,16 +249,17 @@ func upsertBulkPackage(ctx context.Context, tx *ent.Tx, pkgInputs []*model.IDorP
249249
return nil, errors.Wrap(err, "bulk upsert pkgName node")
250250
}
251251

252-
if err := tx.PackageVersion.CreateBulk(pkgVersionCreates...).
253-
OnConflict(
254-
sql.ConflictColumns(
255-
packageversion.FieldHash,
256-
packageversion.FieldNameID,
257-
),
258-
).
259-
DoNothing().
260-
Exec(ctx); err != nil && err != stdsql.ErrNoRows {
261-
252+
if err := retryOnFKViolation(ctx, func() error {
253+
return tx.PackageVersion.CreateBulk(pkgVersionCreates...).
254+
OnConflict(
255+
sql.ConflictColumns(
256+
packageversion.FieldHash,
257+
packageversion.FieldNameID,
258+
),
259+
).
260+
DoNothing().
261+
Exec(ctx)
262+
}); err != nil && err != stdsql.ErrNoRows {
262263
return nil, errors.Wrap(err, "bulk upsert pkgVersion node")
263264
}
264265
}
@@ -293,18 +294,18 @@ func upsertPackage(ctx context.Context, tx *ent.Tx, pkg model.IDorPkgInput) (*mo
293294

294295
pkgVersionCreate := generatePackageVersionCreate(tx, &pkgVersionID, &pkgNameID, &pkg)
295296

296-
if err := pkgVersionCreate.
297-
OnConflict(
298-
sql.ConflictColumns(
299-
packageversion.FieldHash,
300-
packageversion.FieldNameID,
301-
),
302-
).
303-
DoNothing().
304-
Exec(ctx); err != nil {
305-
if err != stdsql.ErrNoRows {
306-
return nil, errors.Wrap(err, "upsert package version")
307-
}
297+
if err := retryOnFKViolation(ctx, func() error {
298+
return pkgVersionCreate.
299+
OnConflict(
300+
sql.ConflictColumns(
301+
packageversion.FieldHash,
302+
packageversion.FieldNameID,
303+
),
304+
).
305+
DoNothing().
306+
Exec(ctx)
307+
}); err != nil && err != stdsql.ErrNoRows {
308+
return nil, errors.Wrap(err, "upsert package version")
308309
}
309310

310311
return &model.PackageIDs{

0 commit comments

Comments
 (0)