diff --git a/appview/ingester.go b/appview/ingester.go --- a/appview/ingester.go +++ b/appview/ingester.go @@ -347,6 +347,7 @@ 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 @@ } 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/db/profile.go b/appview/db/profile.go --- a/appview/db/profile.go +++ b/appview/db/profile.go @@ -131,8 +131,6 @@ } 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 @@ return err } } - - return tx.Commit() + return nil } func GetProfiles(e Execer, filters ...orm.Filter) (map[string]*models.Profile, error) { 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 @@ 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 @@ 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)