Monorepo for Tangled tangled.org

appview: move tx rollback logic out of db.UpsertProfile() #994

open opened by boltless.me targeting master from sl/sqkrqopzkvoo
Labels

None yet.

assignee

None yet.

Participants 1
AT URI
at://did:plc:xasnlahkri4ewmbuzly2rlc5/sh.tangled.repo.pull/3mcsfwwhtki22
+19 -9
Diff #0
+1 -4
appview/db/profile.go
··· 108 } 109 110 func UpsertProfile(tx *sql.Tx, profile *models.Profile) error { 111 - defer tx.Rollback() 112 - 113 // update links 114 _, err := tx.Exec(`delete from profile_links where did = ?`, profile.Did) 115 if err != nil { ··· 203 return err 204 } 205 } 206 - 207 - return tx.Commit() 208 } 209 210 func GetProfiles(e Execer, filters ...orm.Filter) (map[string]*models.Profile, error) {
··· 108 } 109 110 func UpsertProfile(tx *sql.Tx, profile *models.Profile) error { 111 // update links 112 _, err := tx.Exec(`delete from profile_links where did = ?`, profile.Did) 113 if err != nil { ··· 201 return err 202 } 203 } 204 + return nil 205 } 206 207 func GetProfiles(e Execer, filters ...orm.Filter) (map[string]*models.Profile, error) {
+6
appview/ingester.go
··· 341 if err != nil { 342 return fmt.Errorf("failed to start transaction") 343 } 344 345 err = db.ValidateProfile(tx, &profile) 346 if err != nil { ··· 348 } 349 350 err = db.UpsertProfile(tx, &profile) 351 case jmodels.CommitOperationDelete: 352 err = db.DeleteArtifact(i.Db, orm.FilterEq("did", did), orm.FilterEq("rkey", e.Commit.RKey)) 353 }
··· 341 if err != nil { 342 return fmt.Errorf("failed to start transaction") 343 } 344 + defer tx.Rollback() 345 346 err = db.ValidateProfile(tx, &profile) 347 if err != nil { ··· 349 } 350 351 err = db.UpsertProfile(tx, &profile) 352 + if err != nil { 353 + return fmt.Errorf("upserting profile: %w", err) 354 + } 355 + 356 + err = tx.Commit() 357 case jmodels.CommitOperationDelete: 358 err = db.DeleteArtifact(i.Db, orm.FilterEq("did", did), orm.FilterEq("rkey", e.Commit.RKey)) 359 }
+12 -5
appview/state/profile.go
··· 624 s.pages.Notice(w, "update-profile", "Failed to update profile, try again later.") 625 return 626 } 627 628 client, err := s.oauth.AuthorizedClient(r) 629 if err != nil { ··· 672 return 673 } 674 675 - err = db.UpsertProfile(tx, profile) 676 - if err != nil { 677 - log.Println("failed to update profile", err) 678 - s.pages.Notice(w, "update-profile", "Failed to update profile, try again later.") 679 - return 680 } 681 682 s.notifier.UpdateProfile(r.Context(), profile)
··· 624 s.pages.Notice(w, "update-profile", "Failed to update profile, try again later.") 625 return 626 } 627 + defer tx.Rollback() 628 + 629 + err = db.UpsertProfile(tx, profile) 630 + if err != nil { 631 + log.Println("failed to update profile", err) 632 + s.pages.Notice(w, "update-profile", "Failed to update profile, try again later.") 633 + return 634 + } 635 636 client, err := s.oauth.AuthorizedClient(r) 637 if err != nil { ··· 680 return 681 } 682 683 + if err := tx.Commit(); err != nil { 684 + s.logger.Error("failed to commit transaction", "err", err) 685 + // db failed, but PDS operation succeed. 686 + // log error and continue 687 } 688 689 s.notifier.UpdateProfile(r.Context(), profile)

Submissions

sign up or login to add to the discussion
boltless.me submitted #0
1 commit
expand
appview: move tx rollback logic out of db.UpsertProfile()
1/3 timeout, 2/3 success
expand
no conflicts, ready to merge