Refactor session close as xorm already does everything needed internally (#2020)

release/v1.15
Lauris BH 2017-06-21 03:57:05 +03:00 committed by Lunny Xiao
parent 754482bf5d
commit 6db387a21e
23 changed files with 60 additions and 74 deletions

View File

@ -48,7 +48,7 @@ func (a *Attachment) AfterSet(colName string, _ xorm.Cell) {
// IncreaseDownloadCount is update download count + 1 // IncreaseDownloadCount is update download count + 1
func (a *Attachment) IncreaseDownloadCount() error { func (a *Attachment) IncreaseDownloadCount() error {
sess := x.NewSession() sess := x.NewSession()
defer sessionRelease(sess) defer sess.Close()
// Update download count. // Update download count.
if _, err := sess.Exec("UPDATE `attachment` SET download_count=download_count+1 WHERE id=?", a.ID); err != nil { if _, err := sess.Exec("UPDATE `attachment` SET download_count=download_count+1 WHERE id=?", a.ID); err != nil {

View File

@ -95,7 +95,7 @@ func (repo *Repository) AddProtectedBranch(branchName string, canPush bool) erro
} }
sess := x.NewSession() sess := x.NewSession()
defer sessionRelease(sess) defer sess.Close()
if err = sess.Begin(); err != nil { if err = sess.Begin(); err != nil {
return err return err
} }
@ -126,7 +126,7 @@ func (repo *Repository) ChangeProtectedBranch(id int64, canPush bool) error {
ProtectedBranch.CanPush = canPush ProtectedBranch.CanPush = canPush
sess := x.NewSession() sess := x.NewSession()
defer sessionRelease(sess) defer sess.Close()
if err = sess.Begin(); err != nil { if err = sess.Begin(); err != nil {
return err return err
} }
@ -146,7 +146,7 @@ func (repo *Repository) DeleteProtectedBranch(id int64) (err error) {
} }
sess := x.NewSession() sess := x.NewSession()
defer sessionRelease(sess) defer sess.Close()
if err = sess.Begin(); err != nil { if err = sess.Begin(); err != nil {
return err return err
} }

View File

@ -127,7 +127,7 @@ func AddGPGKey(ownerID int64, content string) (*GPGKey, error) {
//Get DB session //Get DB session
sess := x.NewSession() sess := x.NewSession()
defer sessionRelease(sess) defer sess.Close()
if err = sess.Begin(); err != nil { if err = sess.Begin(); err != nil {
return nil, err return nil, err
} }
@ -267,7 +267,7 @@ func DeleteGPGKey(doer *User, id int64) (err error) {
} }
sess := x.NewSession() sess := x.NewSession()
defer sessionRelease(sess) defer sess.Close()
if err = sess.Begin(); err != nil { if err = sess.Begin(); err != nil {
return err return err
} }

View File

@ -406,7 +406,7 @@ func (issue *Issue) clearLabels(e *xorm.Session, doer *User) (err error) {
// Triggers appropriate WebHooks, if any. // Triggers appropriate WebHooks, if any.
func (issue *Issue) ClearLabels(doer *User) (err error) { func (issue *Issue) ClearLabels(doer *User) (err error) {
sess := x.NewSession() sess := x.NewSession()
defer sessionRelease(sess) defer sess.Close()
if err = sess.Begin(); err != nil { if err = sess.Begin(); err != nil {
return err return err
} }
@ -470,7 +470,7 @@ func (ts labelSorter) Swap(i, j int) {
// Triggers appropriate WebHooks, if any. // Triggers appropriate WebHooks, if any.
func (issue *Issue) ReplaceLabels(labels []*Label, doer *User) (err error) { func (issue *Issue) ReplaceLabels(labels []*Label, doer *User) (err error) {
sess := x.NewSession() sess := x.NewSession()
defer sessionRelease(sess) defer sess.Close()
if err = sess.Begin(); err != nil { if err = sess.Begin(); err != nil {
return err return err
} }
@ -598,7 +598,7 @@ func (issue *Issue) changeStatus(e *xorm.Session, doer *User, repo *Repository,
// ChangeStatus changes issue status to open or closed. // ChangeStatus changes issue status to open or closed.
func (issue *Issue) ChangeStatus(doer *User, repo *Repository, isClosed bool) (err error) { func (issue *Issue) ChangeStatus(doer *User, repo *Repository, isClosed bool) (err error) {
sess := x.NewSession() sess := x.NewSession()
defer sessionRelease(sess) defer sess.Close()
if err = sess.Begin(); err != nil { if err = sess.Begin(); err != nil {
return err return err
} }
@ -899,7 +899,7 @@ func newIssue(e *xorm.Session, doer *User, opts NewIssueOptions) (err error) {
// NewIssue creates new issue with labels for repository. // NewIssue creates new issue with labels for repository.
func NewIssue(repo *Repository, issue *Issue, labelIDs []int64, uuids []string) (err error) { func NewIssue(repo *Repository, issue *Issue, labelIDs []int64, uuids []string) (err error) {
sess := x.NewSession() sess := x.NewSession()
defer sessionRelease(sess) defer sess.Close()
if err = sess.Begin(); err != nil { if err = sess.Begin(); err != nil {
return err return err
} }

View File

@ -502,7 +502,7 @@ type CreateCommentOptions struct {
// CreateComment creates comment of issue or commit. // CreateComment creates comment of issue or commit.
func CreateComment(opts *CreateCommentOptions) (comment *Comment, err error) { func CreateComment(opts *CreateCommentOptions) (comment *Comment, err error) {
sess := x.NewSession() sess := x.NewSession()
defer sessionRelease(sess) defer sess.Close()
if err = sess.Begin(); err != nil { if err = sess.Begin(); err != nil {
return nil, err return nil, err
} }
@ -620,7 +620,7 @@ func UpdateComment(c *Comment) error {
// DeleteComment deletes the comment // DeleteComment deletes the comment
func DeleteComment(comment *Comment) error { func DeleteComment(comment *Comment) error {
sess := x.NewSession() sess := x.NewSession()
defer sessionRelease(sess) defer sess.Close()
if err := sess.Begin(); err != nil { if err := sess.Begin(); err != nil {
return err return err
} }

View File

@ -223,7 +223,7 @@ func DeleteLabel(repoID, labelID int64) error {
} }
sess := x.NewSession() sess := x.NewSession()
defer sessionRelease(sess) defer sess.Close()
if err = sess.Begin(); err != nil { if err = sess.Begin(); err != nil {
return err return err
} }
@ -298,7 +298,7 @@ func NewIssueLabel(issue *Issue, label *Label, doer *User) (err error) {
} }
sess := x.NewSession() sess := x.NewSession()
defer sessionRelease(sess) defer sess.Close()
if err = sess.Begin(); err != nil { if err = sess.Begin(); err != nil {
return err return err
} }
@ -327,7 +327,7 @@ func newIssueLabels(e *xorm.Session, issue *Issue, labels []*Label, doer *User)
// NewIssueLabels creates a list of issue-label relations. // NewIssueLabels creates a list of issue-label relations.
func NewIssueLabels(issue *Issue, labels []*Label, doer *User) (err error) { func NewIssueLabels(issue *Issue, labels []*Label, doer *User) (err error) {
sess := x.NewSession() sess := x.NewSession()
defer sessionRelease(sess) defer sess.Close()
if err = sess.Begin(); err != nil { if err = sess.Begin(); err != nil {
return err return err
} }
@ -375,7 +375,7 @@ func deleteIssueLabel(e *xorm.Session, issue *Issue, label *Label, doer *User) (
// DeleteIssueLabel deletes issue-label relation. // DeleteIssueLabel deletes issue-label relation.
func DeleteIssueLabel(issue *Issue, label *Label, doer *User) (err error) { func DeleteIssueLabel(issue *Issue, label *Label, doer *User) (err error) {
sess := x.NewSession() sess := x.NewSession()
defer sessionRelease(sess) defer sess.Close()
if err = sess.Begin(); err != nil { if err = sess.Begin(); err != nil {
return err return err
} }

View File

@ -104,7 +104,7 @@ func (m *Milestone) APIFormat() *api.Milestone {
// NewMilestone creates new milestone of repository. // NewMilestone creates new milestone of repository.
func NewMilestone(m *Milestone) (err error) { func NewMilestone(m *Milestone) (err error) {
sess := x.NewSession() sess := x.NewSession()
defer sessionRelease(sess) defer sess.Close()
if err = sess.Begin(); err != nil { if err = sess.Begin(); err != nil {
return err return err
} }
@ -215,7 +215,7 @@ func ChangeMilestoneStatus(m *Milestone, isClosed bool) (err error) {
} }
sess := x.NewSession() sess := x.NewSession()
defer sessionRelease(sess) defer sess.Close()
if err = sess.Begin(); err != nil { if err = sess.Begin(); err != nil {
return err return err
} }
@ -330,7 +330,7 @@ func DeleteMilestoneByRepoID(repoID, id int64) error {
} }
sess := x.NewSession() sess := x.NewSession()
defer sessionRelease(sess) defer sess.Close()
if err = sess.Begin(); err != nil { if err = sess.Begin(); err != nil {
return err return err
} }

View File

@ -69,7 +69,7 @@ func updateIssueUserByAssignee(e Engine, issue *Issue) (err error) {
// UpdateIssueUserByAssignee updates issue-user relation for assignee. // UpdateIssueUserByAssignee updates issue-user relation for assignee.
func UpdateIssueUserByAssignee(issue *Issue) (err error) { func UpdateIssueUserByAssignee(issue *Issue) (err error) {
sess := x.NewSession() sess := x.NewSession()
defer sessionRelease(sess) defer sess.Close()
if err = sess.Begin(); err != nil { if err = sess.Begin(); err != nil {
return err return err
} }

View File

@ -56,7 +56,7 @@ func NewLFSMetaObject(m *LFSMetaObject) (*LFSMetaObject, error) {
} }
sess := x.NewSession() sess := x.NewSession()
defer sessionRelease(sess) defer sess.Close()
if err = sess.Begin(); err != nil { if err = sess.Begin(); err != nil {
return nil, err return nil, err
} }
@ -94,7 +94,7 @@ func RemoveLFSMetaObjectByOid(oid string) error {
} }
sess := x.NewSession() sess := x.NewSession()
defer sessionRelease(sess) defer sess.Close()
if err := sess.Begin(); err != nil { if err := sess.Begin(); err != nil {
return err return err
} }

View File

@ -167,13 +167,6 @@ Please try to upgrade to a lower version (>= v0.6.0) first, then upgrade to curr
return nil return nil
} }
func sessionRelease(sess *xorm.Session) {
if !sess.IsCommitedOrRollbacked {
sess.Rollback()
}
sess.Close()
}
func fixLocaleFileLoadPanic(_ *xorm.Engine) error { func fixLocaleFileLoadPanic(_ *xorm.Engine) error {
cfg, err := ini.Load(setting.CustomConf) cfg, err := ini.Load(setting.CustomConf)
if err != nil { if err != nil {
@ -214,7 +207,7 @@ func trimCommitActionAppURLPrefix(x *xorm.Engine) error {
} }
sess := x.NewSession() sess := x.NewSession()
defer sessionRelease(sess) defer sess.Close()
if err = sess.Begin(); err != nil { if err = sess.Begin(); err != nil {
return err return err
} }
@ -287,7 +280,7 @@ func issueToIssueLabel(x *xorm.Engine) error {
} }
sess := x.NewSession() sess := x.NewSession()
defer sessionRelease(sess) defer sess.Close()
if err = sess.Begin(); err != nil { if err = sess.Begin(); err != nil {
return err return err
} }
@ -330,7 +323,7 @@ func attachmentRefactor(x *xorm.Engine) error {
} }
sess := x.NewSession() sess := x.NewSession()
defer sessionRelease(sess) defer sess.Close()
if err = sess.Begin(); err != nil { if err = sess.Begin(); err != nil {
return err return err
} }
@ -408,7 +401,7 @@ func renamePullRequestFields(x *xorm.Engine) (err error) {
} }
sess := x.NewSession() sess := x.NewSession()
defer sessionRelease(sess) defer sess.Close()
if err = sess.Begin(); err != nil { if err = sess.Begin(); err != nil {
return err return err
} }
@ -492,7 +485,7 @@ func generateOrgRandsAndSalt(x *xorm.Engine) (err error) {
} }
sess := x.NewSession() sess := x.NewSession()
defer sessionRelease(sess) defer sess.Close()
if err = sess.Begin(); err != nil { if err = sess.Begin(); err != nil {
return err return err
} }

View File

@ -23,7 +23,7 @@ func ldapUseSSLToSecurityProtocol(x *xorm.Engine) error {
} }
sess := x.NewSession() sess := x.NewSession()
defer sessionRelease(sess) defer sess.Close()
if err = sess.Begin(); err != nil { if err = sess.Begin(); err != nil {
return err return err
} }

View File

@ -49,13 +49,6 @@ type Engine interface {
Where(interface{}, ...interface{}) *xorm.Session Where(interface{}, ...interface{}) *xorm.Session
} }
func sessionRelease(sess *xorm.Session) {
if !sess.IsCommitedOrRollbacked {
sess.Rollback()
}
sess.Close()
}
var ( var (
x *xorm.Engine x *xorm.Engine
tables []interface{} tables []interface{}

View File

@ -127,7 +127,7 @@ func CreateOrganization(org, owner *User) (err error) {
org.Type = UserTypeOrganization org.Type = UserTypeOrganization
sess := x.NewSession() sess := x.NewSession()
defer sessionRelease(sess) defer sess.Close()
if err = sess.Begin(); err != nil { if err = sess.Begin(); err != nil {
return err return err
} }
@ -481,7 +481,7 @@ func RemoveOrgUser(orgID, userID int64) error {
} }
sess := x.NewSession() sess := x.NewSession()
defer sessionRelease(sess) defer sess.Close()
if err := sess.Begin(); err != nil { if err := sess.Begin(); err != nil {
return err return err
} }

View File

@ -119,7 +119,7 @@ func (t *Team) AddRepository(repo *Repository) (err error) {
} }
sess := x.NewSession() sess := x.NewSession()
defer sessionRelease(sess) defer sess.Close()
if err = sess.Begin(); err != nil { if err = sess.Begin(); err != nil {
return err return err
} }
@ -180,7 +180,7 @@ func (t *Team) RemoveRepository(repoID int64) error {
} }
sess := x.NewSession() sess := x.NewSession()
defer sessionRelease(sess) defer sess.Close()
if err = sess.Begin(); err != nil { if err = sess.Begin(); err != nil {
return err return err
} }
@ -309,7 +309,7 @@ func UpdateTeam(t *Team, authChanged bool) (err error) {
} }
sess := x.NewSession() sess := x.NewSession()
defer sessionRelease(sess) defer sess.Close()
if err = sess.Begin(); err != nil { if err = sess.Begin(); err != nil {
return err return err
} }
@ -354,7 +354,7 @@ func DeleteTeam(t *Team) error {
} }
sess := x.NewSession() sess := x.NewSession()
defer sessionRelease(sess) defer sess.Close()
if err := sess.Begin(); err != nil { if err := sess.Begin(); err != nil {
return err return err
} }
@ -482,7 +482,7 @@ func AddTeamMember(team *Team, userID int64) error {
} }
sess := x.NewSession() sess := x.NewSession()
defer sessionRelease(sess) defer sess.Close()
if err := sess.Begin(); err != nil { if err := sess.Begin(); err != nil {
return err return err
} }
@ -584,7 +584,7 @@ func removeTeamMember(e Engine, team *Team, userID int64) error {
// RemoveTeamMember removes member from given team of given organization. // RemoveTeamMember removes member from given team of given organization.
func RemoveTeamMember(team *Team, userID int64) error { func RemoveTeamMember(team *Team, userID int64) error {
sess := x.NewSession() sess := x.NewSession()
defer sessionRelease(sess) defer sess.Close()
if err := sess.Begin(); err != nil { if err := sess.Begin(); err != nil {
return err return err
} }

View File

@ -406,7 +406,7 @@ func (pr *PullRequest) setMerged() (err error) {
pr.HasMerged = true pr.HasMerged = true
sess := x.NewSession() sess := x.NewSession()
defer sessionRelease(sess) defer sess.Close()
if err = sess.Begin(); err != nil { if err = sess.Begin(); err != nil {
return err return err
} }
@ -602,7 +602,7 @@ func (pr *PullRequest) testPatch() (err error) {
// NewPullRequest creates new pull request with labels for repository. // NewPullRequest creates new pull request with labels for repository.
func NewPullRequest(repo *Repository, pull *Issue, labelIDs []int64, uuids []string, pr *PullRequest, patch []byte) (err error) { func NewPullRequest(repo *Repository, pull *Issue, labelIDs []int64, uuids []string, pr *PullRequest, patch []byte) (err error) {
sess := x.NewSession() sess := x.NewSession()
defer sessionRelease(sess) defer sess.Close()
if err = sess.Begin(); err != nil { if err = sess.Begin(); err != nil {
return err return err
} }

View File

@ -1271,7 +1271,7 @@ func CreateRepository(u *User, opts CreateRepoOptions) (_ *Repository, err error
} }
sess := x.NewSession() sess := x.NewSession()
defer sessionRelease(sess) defer sess.Close()
if err = sess.Begin(); err != nil { if err = sess.Begin(); err != nil {
return nil, err return nil, err
} }
@ -1355,7 +1355,7 @@ func TransferOwnership(doer *User, newOwnerName string, repo *Repository) error
} }
sess := x.NewSession() sess := x.NewSession()
defer sessionRelease(sess) defer sess.Close()
if err = sess.Begin(); err != nil { if err = sess.Begin(); err != nil {
return fmt.Errorf("sess.Begin: %v", err) return fmt.Errorf("sess.Begin: %v", err)
} }
@ -1580,7 +1580,7 @@ func updateRepository(e Engine, repo *Repository, visibilityChanged bool) (err e
// UpdateRepository updates a repository // UpdateRepository updates a repository
func UpdateRepository(repo *Repository, visibilityChanged bool) (err error) { func UpdateRepository(repo *Repository, visibilityChanged bool) (err error) {
sess := x.NewSession() sess := x.NewSession()
defer sessionRelease(sess) defer sess.Close()
if err = sess.Begin(); err != nil { if err = sess.Begin(); err != nil {
return err return err
} }
@ -1625,7 +1625,7 @@ func DeleteRepository(uid, repoID int64) error {
} }
sess := x.NewSession() sess := x.NewSession()
defer sessionRelease(sess) defer sess.Close()
if err = sess.Begin(); err != nil { if err = sess.Begin(); err != nil {
return err return err
} }
@ -2240,7 +2240,7 @@ func ForkRepository(u *User, oldRepo *Repository, name, desc string) (_ *Reposit
} }
sess := x.NewSession() sess := x.NewSession()
defer sessionRelease(sess) defer sess.Close()
if err = sess.Begin(); err != nil { if err = sess.Begin(); err != nil {
return nil, err return nil, err
} }
@ -2284,7 +2284,7 @@ func ForkRepository(u *User, oldRepo *Repository, name, desc string) (_ *Reposit
// Copy LFS meta objects in new session // Copy LFS meta objects in new session
sess2 := x.NewSession() sess2 := x.NewSession()
defer sessionRelease(sess2) defer sess2.Close()
if err = sess2.Begin(); err != nil { if err = sess2.Begin(); err != nil {
return nil, err return nil, err
} }

View File

@ -46,7 +46,7 @@ func (repo *Repository) AddCollaborator(u *User) error {
collaboration.Mode = AccessModeWrite collaboration.Mode = AccessModeWrite
sess := x.NewSession() sess := x.NewSession()
defer sessionRelease(sess) defer sess.Close()
if err = sess.Begin(); err != nil { if err = sess.Begin(); err != nil {
return err return err
} }
@ -136,7 +136,7 @@ func (repo *Repository) ChangeCollaborationAccessMode(uid int64, mode AccessMode
collaboration.Mode = mode collaboration.Mode = mode
sess := x.NewSession() sess := x.NewSession()
defer sessionRelease(sess) defer sess.Close()
if err = sess.Begin(); err != nil { if err = sess.Begin(); err != nil {
return err return err
} }
@ -161,7 +161,7 @@ func (repo *Repository) DeleteCollaboration(uid int64) (err error) {
} }
sess := x.NewSession() sess := x.NewSession()
defer sessionRelease(sess) defer sess.Close()
if err = sess.Begin(); err != nil { if err = sess.Begin(); err != nil {
return err return err
} }

View File

@ -401,7 +401,7 @@ func DeleteUploads(uploads ...*Upload) (err error) {
} }
sess := x.NewSession() sess := x.NewSession()
defer sessionRelease(sess) defer sess.Close()
if err = sess.Begin(); err != nil { if err = sess.Begin(); err != nil {
return err return err
} }

View File

@ -430,7 +430,7 @@ func AddPublicKey(ownerID int64, name, content string) (*PublicKey, error) {
} }
sess := x.NewSession() sess := x.NewSession()
defer sessionRelease(sess) defer sess.Close()
if err = sess.Begin(); err != nil { if err = sess.Begin(); err != nil {
return nil, err return nil, err
} }
@ -535,7 +535,7 @@ func DeletePublicKey(doer *User, id int64) (err error) {
} }
sess := x.NewSession() sess := x.NewSession()
defer sessionRelease(sess) defer sess.Close()
if err = sess.Begin(); err != nil { if err = sess.Begin(); err != nil {
return err return err
} }
@ -732,7 +732,7 @@ func AddDeployKey(repoID int64, name, content string) (*DeployKey, error) {
} }
sess := x.NewSession() sess := x.NewSession()
defer sessionRelease(sess) defer sess.Close()
if err = sess.Begin(); err != nil { if err = sess.Begin(); err != nil {
return nil, err return nil, err
} }
@ -812,7 +812,7 @@ func DeleteDeployKey(doer *User, id int64) error {
} }
sess := x.NewSession() sess := x.NewSession()
defer sessionRelease(sess) defer sess.Close()
if err = sess.Begin(); err != nil { if err = sess.Begin(); err != nil {
return err return err
} }

View File

@ -436,7 +436,7 @@ func (u *User) UploadAvatar(data []byte) error {
m := resize.Resize(avatar.AvatarSize, avatar.AvatarSize, img, resize.NearestNeighbor) m := resize.Resize(avatar.AvatarSize, avatar.AvatarSize, img, resize.NearestNeighbor)
sess := x.NewSession() sess := x.NewSession()
defer sessionRelease(sess) defer sess.Close()
if err = sess.Begin(); err != nil { if err = sess.Begin(); err != nil {
return err return err
} }
@ -715,7 +715,7 @@ func CreateUser(u *User) (err error) {
u.MaxRepoCreation = -1 u.MaxRepoCreation = -1
sess := x.NewSession() sess := x.NewSession()
defer sessionRelease(sess) defer sess.Close()
if err = sess.Begin(); err != nil { if err = sess.Begin(); err != nil {
return err return err
} }
@ -1033,7 +1033,7 @@ func deleteUser(e *xorm.Session, u *User) error {
// but issues/comments/pulls will be kept and shown as someone has been deleted. // but issues/comments/pulls will be kept and shown as someone has been deleted.
func DeleteUser(u *User) (err error) { func DeleteUser(u *User) (err error) {
sess := x.NewSession() sess := x.NewSession()
defer sessionRelease(sess) defer sess.Close()
if err = sess.Begin(); err != nil { if err = sess.Begin(); err != nil {
return err return err
} }

View File

@ -24,7 +24,7 @@ func FollowUser(userID, followID int64) (err error) {
} }
sess := x.NewSession() sess := x.NewSession()
defer sessionRelease(sess) defer sess.Close()
if err = sess.Begin(); err != nil { if err = sess.Begin(); err != nil {
return err return err
} }
@ -50,7 +50,7 @@ func UnfollowUser(userID, followID int64) (err error) {
} }
sess := x.NewSession() sess := x.NewSession()
defer sessionRelease(sess) defer sess.Close()
if err = sess.Begin(); err != nil { if err = sess.Begin(); err != nil {
return err return err
} }

View File

@ -127,7 +127,7 @@ func (email *EmailAddress) Activate() error {
} }
sess := x.NewSession() sess := x.NewSession()
defer sessionRelease(sess) defer sess.Close()
if err = sess.Begin(); err != nil { if err = sess.Begin(); err != nil {
return err return err
} }
@ -208,7 +208,7 @@ func MakeEmailPrimary(email *EmailAddress) error {
} }
sess := x.NewSession() sess := x.NewSession()
defer sessionRelease(sess) defer sess.Close()
if err = sess.Begin(); err != nil { if err = sess.Begin(); err != nil {
return err return err
} }

View File

@ -267,7 +267,7 @@ func UpdateWebhook(w *Webhook) error {
// ID must be specified and do not assign unnecessary fields. // ID must be specified and do not assign unnecessary fields.
func deleteWebhook(bean *Webhook) (err error) { func deleteWebhook(bean *Webhook) (err error) {
sess := x.NewSession() sess := x.NewSession()
defer sessionRelease(sess) defer sess.Close()
if err = sess.Begin(); err != nil { if err = sess.Begin(); err != nil {
return err return err
} }