Monorepo for Tangled

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

Signed-off-by: Seongmin Lee <git@boltless.me>

boltless.me d2b09d54 2bd868cb

verified
+19 -9
+1 -4
appview/db/profile.go
··· 131 } 132 133 func UpsertProfile(tx *sql.Tx, profile *models.Profile) error { 134 - defer tx.Rollback() 135 - 136 // update links 137 _, err := tx.Exec(`delete from profile_links where did = ?`, profile.Did) 138 if err != nil { ··· 228 return err 229 } 230 } 231 - 232 - return tx.Commit() 233 } 234 235 func GetProfiles(e Execer, filters ...orm.Filter) (map[string]*models.Profile, error) {
··· 131 } 132 133 func UpsertProfile(tx *sql.Tx, profile *models.Profile) error { 134 // update links 135 _, err := tx.Exec(`delete from profile_links where did = ?`, profile.Did) 136 if err != nil { ··· 226 return err 227 } 228 } 229 + return nil 230 } 231 232 func GetProfiles(e Execer, filters ...orm.Filter) (map[string]*models.Profile, error) {
+6
appview/ingester.go
··· 347 if err != nil { 348 return fmt.Errorf("failed to start transaction") 349 } 350 351 err = db.ValidateProfile(tx, &profile) 352 if err != nil { ··· 354 } 355 356 err = db.UpsertProfile(tx, &profile) 357 case jmodels.CommitOperationDelete: 358 err = db.DeleteArtifact(i.Db, orm.FilterEq("did", did), orm.FilterEq("rkey", e.Commit.RKey)) 359 }
··· 347 if err != nil { 348 return fmt.Errorf("failed to start transaction") 349 } 350 + defer tx.Rollback() 351 352 err = db.ValidateProfile(tx, &profile) 353 if err != nil { ··· 355 } 356 357 err = db.UpsertProfile(tx, &profile) 358 + if err != nil { 359 + return fmt.Errorf("upserting profile: %w", err) 360 + } 361 + 362 + err = tx.Commit() 363 case jmodels.CommitOperationDelete: 364 err = db.DeleteArtifact(i.Db, orm.FilterEq("did", did), orm.FilterEq("rkey", e.Commit.RKey)) 365 }
+12 -5
appview/state/profile.go
··· 613 s.pages.Notice(w, "update-profile", "Failed to update profile, try again later.") 614 return 615 } 616 617 client, err := s.oauth.AuthorizedClient(r) 618 if err != nil { ··· 661 return 662 } 663 664 - err = db.UpsertProfile(tx, profile) 665 - if err != nil { 666 - log.Println("failed to update profile", err) 667 - s.pages.Notice(w, "update-profile", "Failed to update profile, try again later.") 668 - return 669 } 670 671 s.notifier.UpdateProfile(r.Context(), profile)
··· 613 s.pages.Notice(w, "update-profile", "Failed to update profile, try again later.") 614 return 615 } 616 + defer tx.Rollback() 617 + 618 + err = db.UpsertProfile(tx, profile) 619 + if err != nil { 620 + log.Println("failed to update profile", err) 621 + s.pages.Notice(w, "update-profile", "Failed to update profile, try again later.") 622 + return 623 + } 624 625 client, err := s.oauth.AuthorizedClient(r) 626 if err != nil { ··· 669 return 670 } 671 672 + if err := tx.Commit(); err != nil { 673 + s.logger.Error("failed to commit transaction", "err", err) 674 + // db failed, but PDS operation succeed. 675 + // log error and continue 676 } 677 678 s.notifier.UpdateProfile(r.Context(), profile)