Skip to content

Commit

Permalink
Removing unnecessary transactions.
Browse files Browse the repository at this point in the history
  • Loading branch information
cscatolini committed Nov 28, 2016
1 parent 7042b2e commit 2550ff2
Show file tree
Hide file tree
Showing 4 changed files with 77 additions and 201 deletions.
109 changes: 28 additions & 81 deletions api/game.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,6 @@ import (
"strings"
"time"

gorp "gopkg.in/gorp.v1"

"github.com/labstack/echo"
"github.com/topfreegames/khan/log"
"github.com/topfreegames/khan/models"
Expand Down Expand Up @@ -53,62 +51,35 @@ func CreateGameHandler(app *App) func(c echo.Context) error {
)
})

var game *models.Game
var tx *gorp.Transaction
err = WithSegment("game-create", c, func() error {
err = WithSegment("tx-begin", c, func() error {
tx, err = app.BeginTrans(l)
return err
})
if err != nil {
return err
}
log.D(l, "DB Tx begun successful.")

log.D(l, "Creating game...")
game, err = models.CreateGame(
tx,
payload.PublicID,
payload.Name,
payload.MembershipLevels,
payload.Metadata,
payload.MinLevelToAcceptApplication,
payload.MinLevelToCreateInvitation,
payload.MinLevelToRemoveMember,
payload.MinLevelOffsetToRemoveMember,
payload.MinLevelOffsetToPromoteMember,
payload.MinLevelOffsetToDemoteMember,
payload.MaxMembers,
payload.MaxClansPerPlayer,
payload.CooldownAfterDeny,
payload.CooldownAfterDelete,
optional.cooldownBeforeApply,
optional.cooldownBeforeInvite,
optional.maxPendingInvites,
false,
optional.clanUpdateMetadataFieldsHookTriggerWhitelist,
optional.playerUpdateMetadataFieldsHookTriggerWhitelist,
)

if err != nil {
txErr := app.Rollback(tx, "Create game failed", c, l, err)
if txErr != nil {
return txErr
}
log.E(l, "Create game failed.", func(cm log.CM) {
cm.Write(zap.Error(err))
})
return err
}

err = app.Commit(tx, "Create game", c, l)
if err != nil {
return err
}
log.D(l, "Creating game...")
game, err := models.CreateGame(
app.Db,
payload.PublicID,
payload.Name,
payload.MembershipLevels,
payload.Metadata,
payload.MinLevelToAcceptApplication,
payload.MinLevelToCreateInvitation,
payload.MinLevelToRemoveMember,
payload.MinLevelOffsetToRemoveMember,
payload.MinLevelOffsetToPromoteMember,
payload.MinLevelOffsetToDemoteMember,
payload.MaxMembers,
payload.MaxClansPerPlayer,
payload.CooldownAfterDeny,
payload.CooldownAfterDelete,
optional.cooldownBeforeApply,
optional.cooldownBeforeInvite,
optional.maxPendingInvites,
false,
optional.clanUpdateMetadataFieldsHookTriggerWhitelist,
optional.playerUpdateMetadataFieldsHookTriggerWhitelist,
)

return nil
})
if err != nil {
log.E(l, "Create game failed.", func(cm log.CM) {
cm.Write(zap.Error(err))
})
return FailWith(500, err.Error(), c)
}

Expand Down Expand Up @@ -179,19 +150,10 @@ func UpdateGameHandler(app *App) func(c echo.Context) error {
return FailWith(status, err.Error(), c)
}

var tx *gorp.Transaction
err = WithSegment("game-update", c, func() error {
err = WithSegment("tx-begin", c, func() error {
tx, err = app.BeginTrans(l)
return err
})
if err != nil {
return err
}

log.D(l, "Updating game...")
_, err = models.UpdateGame(
tx,
app.Db,
gameID,
payload.Name,
payload.MembershipLevels,
Expand All @@ -216,11 +178,6 @@ func UpdateGameHandler(app *App) func(c echo.Context) error {
})

if err != nil {
txErr := app.Rollback(tx, "Game update failed", c, l, err)
if txErr != nil {
return FailWith(500, txErr.Error(), c)
}

log.E(l, "Game update failed.", func(cm log.CM) {
cm.Write(zap.Error(err))
})
Expand Down Expand Up @@ -250,11 +207,6 @@ func UpdateGameHandler(app *App) func(c echo.Context) error {
err = WithSegment("hook-dispatch", c, func() error {
dErr := app.DispatchHooks(gameID, models.GameUpdatedHook, successPayload)
if dErr != nil {
txErr := app.Rollback(tx, "Game update hook dispatch failed", c, l, dErr)
if txErr != nil {
return txErr
}

log.E(l, "Game update hook dispatch failed.", func(cm log.CM) {
cm.Write(zap.Error(dErr))
})
Expand All @@ -266,11 +218,6 @@ func UpdateGameHandler(app *App) func(c echo.Context) error {
return FailWith(500, err.Error(), c)
}

err = app.Commit(tx, "Update game", c, l)
if err != nil {
return FailWith(500, err.Error(), c)
}

log.I(l, "Game updated succesfully.", func(cm log.CM) {
cm.Write(zap.Duration("duration", time.Now().Sub(start)))
})
Expand Down
44 changes: 2 additions & 42 deletions api/hook.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,6 @@ import (
"net/http"
"time"

gorp "gopkg.in/gorp.v1"

"github.com/labstack/echo"
"github.com/topfreegames/khan/log"
"github.com/topfreegames/khan/models"
Expand Down Expand Up @@ -48,30 +46,16 @@ func CreateHookHandler(app *App) func(c echo.Context) error {
}

var hook *models.Hook
var tx *gorp.Transaction
err = WithSegment("hook-create", c, func() error {
err := WithSegment("tx-begin", c, func() error {
tx, err = app.BeginTrans(l)
return err
})
if err != nil {
return err
}

log.D(l, "Creating hook...")
hook, err = models.CreateHook(
tx,
app.Db,
gameID,
payload.Type,
payload.HookURL,
)

if err != nil {
txErr := app.Rollback(tx, "Failed to create hook", c, l, err)
if txErr != nil {
return txErr
}

log.E(l, "Failed to create the hook.", func(cm log.CM) {
cm.Write(zap.Error(err))
})
Expand All @@ -84,11 +68,6 @@ func CreateHookHandler(app *App) func(c echo.Context) error {
return FailWith(http.StatusInternalServerError, err.Error(), c)
}

err = app.Commit(tx, "Create hook", c, l)
if err != nil {
return FailWith(http.StatusInternalServerError, err.Error(), c)
}

log.I(l, "Created hook successfully.", func(cm log.CM) {
cm.Write(
zap.String("hookPublicID", hook.PublicID),
Expand Down Expand Up @@ -116,30 +95,16 @@ func RemoveHookHandler(app *App) func(c echo.Context) error {
zap.String("hookPublicID", publicID),
)

var tx *gorp.Transaction
var err error
err = WithSegment("hook-remove", c, func() error {
err = WithSegment("tx-begin", c, func() error {
tx, err = app.BeginTrans(l)
return err
})
if err != nil {
return err
}

log.D(l, "Removing hook...")
err = models.RemoveHook(
tx,
app.Db,
gameID,
publicID,
)

if err != nil {
txErr := app.Rollback(tx, "Remove hook failed", c, l, err)
if txErr != nil {
return txErr
}

log.E(l, "Failed to remove hook.", func(cm log.CM) {
cm.Write(zap.Error(err))
})
Expand All @@ -151,11 +116,6 @@ func RemoveHookHandler(app *App) func(c echo.Context) error {
return FailWith(http.StatusInternalServerError, err.Error(), c)
}

err = app.Commit(tx, "Remove hook", c, l)
if err != nil {
return FailWith(http.StatusInternalServerError, err.Error(), c)
}

log.I(l, "Hook removed successfully.", func(cm log.CM) {
cm.Write(zap.Duration("duration", time.Now().Sub(start)))
})
Expand Down
57 changes: 13 additions & 44 deletions api/membership.go
Original file line number Diff line number Diff line change
Expand Up @@ -698,7 +698,6 @@ func PromoteOrDemoteMembershipHandler(app *App, action string) func(c echo.Conte
var requestor *models.Player
var status int
var err error
var tx *gorp.Transaction

c.Set("route", "PromoteOrDemoteMember")
start := time.Now()
Expand Down Expand Up @@ -728,29 +727,11 @@ func PromoteOrDemoteMembershipHandler(app *App, action string) func(c echo.Conte
zap.String("requestorPublicID", payload.RequestorPublicID),
)

rb := func(err error) error {
txErr := app.Rollback(tx, "Promoting/Demoting member failed", c, l, err)
if txErr != nil {
return txErr
}

return nil
}

err = WithSegment("membership-promote-demote", c, func() error {
err = WithSegment("tx-begin", c, func() error {
tx, err = app.BeginTrans(l)
return err
})
if err != nil {
return err
}
log.D(l, "DB Tx begun successful.")

err = WithSegment("membership-promote-demote-query", c, func() error {
log.D(l, "Promoting/Demoting member...")
membership, err = models.PromoteOrDemoteMember(
tx,
app.Db,
game,
game.PublicID,
payload.PlayerPublicID,
Expand All @@ -760,31 +741,26 @@ func PromoteOrDemoteMembershipHandler(app *App, action string) func(c echo.Conte
)

if err != nil {
txErr := rb(err)
if txErr == nil {
log.E(l, "Member promotion/demotion failed.", func(cm log.CM) {
cm.Write(zap.Error(err))
})
}
log.E(l, "Member promotion/demotion failed.", func(cm log.CM) {
cm.Write(zap.Error(err))
})
return err
}
log.I(l, "Member promoted/demoted successful.")
return nil
})

if err != nil {
return err
}

err = WithSegment("player-retrieve", c, func() error {
log.D(l, "Retrieving promoter/demoter member...")
requestor, err = models.GetPlayerByPublicID(tx, membership.GameID, payload.RequestorPublicID)
requestor, err = models.GetPlayerByPublicID(app.Db, membership.GameID, payload.RequestorPublicID)
if err != nil {
txErr := rb(err)
if txErr == nil {
log.E(l, "Promoter/Demoter member retrieval failed.", func(cm log.CM) {
cm.Write(zap.Error(err))
})
}
log.E(l, "Promoter/Demoter member retrieval failed.", func(cm log.CM) {
cm.Write(zap.Error(err))
})
return err
}
return nil
Expand All @@ -803,26 +779,19 @@ func PromoteOrDemoteMembershipHandler(app *App, action string) func(c echo.Conte
}

err = dispatchMembershipHookByID(
app, tx, hookType,
app, app.Db, hookType,
membership.GameID, membership.ClanID, membership.PlayerID,
requestor.ID, membership.Message, membership.Level,
)
if err != nil {
txErr := rb(err)
if txErr == nil {
log.E(l, "Promote/Demote member hook dispatch failed.", func(cm log.CM) {
cm.Write(zap.Error(err))
})
}
log.E(l, "Promote/Demote member hook dispatch failed.", func(cm log.CM) {
cm.Write(zap.Error(err))
})
return err
}
return nil
})
if err != nil {
return FailWith(http.StatusInternalServerError, err.Error(), c)
}

err = app.Commit(tx, "Membership invitation approval/deny", c, l)
if err != nil {
return FailWith(http.StatusInternalServerError, err.Error(), c)
}
Expand Down
Loading

0 comments on commit 2550ff2

Please sign in to comment.