summaryrefslogtreecommitdiffstats
path: root/app/team.go
diff options
context:
space:
mode:
authorGeorge Goldberg <george@gberg.me>2017-10-04 18:17:58 +0100
committerChris <ccbrown112@gmail.com>2017-10-04 10:17:58 -0700
commite16bdf8d1d4d2972be4e89cbc9c4dbef134895ba (patch)
tree6e9a4f0000538f4720606da427519661f475d1cf /app/team.go
parent35d56821ff959d7041fb5ab5071756980c8c94d6 (diff)
downloadchat-e16bdf8d1d4d2972be4e89cbc9c4dbef134895ba.tar.gz
chat-e16bdf8d1d4d2972be4e89cbc9c4dbef134895ba.tar.bz2
chat-e16bdf8d1d4d2972be4e89cbc9c4dbef134895ba.zip
PLT-7789: Fix raciness on Aurora with importing team members. (#7573)
* PLT-7789: Fix raciness on Aurora with importing team members. * Fix and document return values.
Diffstat (limited to 'app/team.go')
-rw-r--r--app/team.go22
1 files changed, 14 insertions, 8 deletions
diff --git a/app/team.go b/app/team.go
index d9a857f0b..4bfb617a8 100644
--- a/app/team.go
+++ b/app/team.go
@@ -273,7 +273,11 @@ func (a *App) AddUserToTeamByInviteId(inviteId string, userId string) (*model.Te
return team, nil
}
-func (a *App) joinUserToTeam(team *model.Team, user *model.User) (bool, *model.AppError) {
+// Returns three values:
+// 1. a pointer to the team member, if successful
+// 2. a boolean: true if the user has a non-deleted team member for that team already, otherwise false.
+// 3. a pointer to an AppError if something went wrong.
+func (a *App) joinUserToTeam(team *model.Team, user *model.User) (*model.TeamMember, bool, *model.AppError) {
tm := &model.TeamMember{
TeamId: team.Id,
UserId: user.Id,
@@ -285,29 +289,31 @@ func (a *App) joinUserToTeam(team *model.Team, user *model.User) (bool, *model.A
}
if etmr := <-a.Srv.Store.Team().GetMember(team.Id, user.Id); etmr.Err == nil {
- // Membership alredy exists. Check if deleted and and update, otherwise do nothing
+ // Membership already exists. Check if deleted and and update, otherwise do nothing
rtm := etmr.Data.(*model.TeamMember)
// Do nothing if already added
if rtm.DeleteAt == 0 {
- return true, nil
+ return rtm, true, nil
}
if tmr := <-a.Srv.Store.Team().UpdateMember(tm); tmr.Err != nil {
- return false, tmr.Err
+ return nil, false, tmr.Err
+ } else {
+ return tmr.Data.(*model.TeamMember), false, nil
}
} else {
// Membership appears to be missing. Lets try to add.
if tmr := <-a.Srv.Store.Team().SaveMember(tm); tmr.Err != nil {
- return false, tmr.Err
+ return nil, false, tmr.Err
+ } else {
+ return tmr.Data.(*model.TeamMember), false, nil
}
}
-
- return false, nil
}
func (a *App) JoinUserToTeam(team *model.Team, user *model.User, userRequestorId string) *model.AppError {
- if alreadyAdded, err := a.joinUserToTeam(team, user); err != nil {
+ if _, alreadyAdded, err := a.joinUserToTeam(team, user); err != nil {
return err
} else if alreadyAdded {
return nil