From a6cd8b67bd444751dbfe1706184f37c21e0a3ef5 Mon Sep 17 00:00:00 2001 From: Seongmin Lee Date: Mon, 19 Jan 2026 11:18:51 +0000 Subject: [PATCH] appview: move tx rollback logic out of `db.UpsertProfile()` Signed-off-by: Seongmin Lee --- appview/db/profile.go | 5 +---- appview/ingester.go | 6 ++++++ appview/state/profile.go | 17 ++++++++++++----- 3 file(s) changed, 19 insertion(s)(+), 9 deletion(s)(-) diff --git a/appview/db/profile.go b/appview/db/profile.go --- a/appview/db/profile.go +++ b/appview/db/profile.go @@ -131,8 +131,6 @@ return years*12 + months } func UpsertProfile(tx *sql.Tx, profile *models.Profile) error { - defer tx.Rollback() - // update links _, err := tx.Exec(`delete from profile_links where did = ?`, profile.Did) if err != nil { @@ -228,8 +226,7 @@ log.Println("profile_pinned_repositories", "err", err) return err } } - - return tx.Commit() + return nil } func GetProfiles(e Execer, filters ...orm.Filter) (map[string]*models.Profile, error) { diff --git a/appview/ingester.go b/appview/ingester.go --- a/appview/ingester.go +++ b/appview/ingester.go @@ -347,6 +347,7 @@ tx, err := ddb.Begin() if err != nil { return fmt.Errorf("failed to start transaction") } + defer tx.Rollback() err = db.ValidateProfile(tx, &profile) if err != nil { @@ -354,6 +355,11 @@ return fmt.Errorf("invalid profile record") } err = db.UpsertProfile(tx, &profile) + if err != nil { + return fmt.Errorf("upserting profile: %w", err) + } + + err = tx.Commit() case jmodels.CommitOperationDelete: err = db.DeleteArtifact(i.Db, orm.FilterEq("did", did), orm.FilterEq("rkey", e.Commit.RKey)) } diff --git a/appview/state/profile.go b/appview/state/profile.go --- a/appview/state/profile.go +++ b/appview/state/profile.go @@ -661,6 +661,14 @@ log.Println("failed to start transaction", err) s.pages.Notice(w, "update-profile", "Failed to update profile, try again later.") return } + defer tx.Rollback() + + err = db.UpsertProfile(tx, profile) + if err != nil { + log.Println("failed to update profile", err) + s.pages.Notice(w, "update-profile", "Failed to update profile, try again later.") + return + } client, err := s.oauth.AuthorizedClient(r) if err != nil { @@ -709,11 +717,10 @@ s.pages.Notice(w, "update-profile", "Failed to update PDS, try again later.") return } - err = db.UpsertProfile(tx, profile) - if err != nil { - log.Println("failed to update profile", err) - s.pages.Notice(w, "update-profile", "Failed to update profile, try again later.") - return + if err := tx.Commit(); err != nil { + s.logger.Error("failed to commit transaction", "err", err) + // db failed, but PDS operation succeed. + // log error and continue } s.notifier.UpdateProfile(r.Context(), profile) -- tangled.sh