From 3d5f36cc4a6a20f16b7d350a46c70655fd13f014 Mon Sep 17 00:00:00 2001 From: Martin Kraft Date: Thu, 16 Jan 2020 06:43:32 -0500 Subject: [PATCH] MM-12773: Return error if ChannelMemberHistory record creation fails. (#13517) * MM-12773: Fail if creating ChannelMemberHistory record fails. * MM-12773: Guard against attempting to create duplicate channel member history record. --- app/channel.go | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/app/channel.go b/app/channel.go index f5a840ab8d..79ba1a0347 100644 --- a/app/channel.go +++ b/app/channel.go @@ -95,7 +95,8 @@ func (a *App) JoinDefaultChannels(teamId string, user *model.User, shouldBeAdmin _, err = a.Srv.Store.Channel().SaveMember(cm) if histErr := a.Srv.Store.ChannelMemberHistory().LogJoinEvent(user.Id, channel.Id, model.GetMillis()); histErr != nil { - mlog.Warn("Failed to update ChannelMemberHistory table", mlog.Err(histErr)) + mlog.Error("Failed to update ChannelMemberHistory table", mlog.Err(histErr)) + return histErr } if *a.Config().ServiceSettings.ExperimentalEnableDefaultChannelLeaveJoinMessages { @@ -249,7 +250,8 @@ func (a *App) CreateChannel(channel *model.Channel, addMember bool) (*model.Chan return nil, err } if err := a.Srv.Store.ChannelMemberHistory().LogJoinEvent(channel.CreatorId, sc.Id, model.GetMillis()); err != nil { - mlog.Warn("Failed to update ChannelMemberHistory table", mlog.Err(err)) + mlog.Error("Failed to update ChannelMemberHistory table", mlog.Err(err)) + return nil, err } a.InvalidateCacheForUser(channel.CreatorId) @@ -368,10 +370,14 @@ func (a *App) createDirectChannel(userId string, otherUserId string) (*model.Cha } if err = a.Srv.Store.ChannelMemberHistory().LogJoinEvent(userId, channel.Id, model.GetMillis()); err != nil { - mlog.Warn("Failed to update ChannelMemberHistory table", mlog.Err(err)) + mlog.Error("Failed to update ChannelMemberHistory table", mlog.Err(err)) + return nil, err } - if err = a.Srv.Store.ChannelMemberHistory().LogJoinEvent(otherUserId, channel.Id, model.GetMillis()); err != nil { - mlog.Warn("Failed to update ChannelMemberHistory table", mlog.Err(err)) + if userId != otherUserId { + if err = a.Srv.Store.ChannelMemberHistory().LogJoinEvent(otherUserId, channel.Id, model.GetMillis()); err != nil { + mlog.Error("Failed to update ChannelMemberHistory table", mlog.Err(err)) + return nil, err + } } return channel, nil @@ -479,7 +485,8 @@ func (a *App) createGroupChannel(userIds []string, creatorId string) (*model.Cha return nil, err } if err := a.Srv.Store.ChannelMemberHistory().LogJoinEvent(user.Id, channel.Id, model.GetMillis()); err != nil { - mlog.Warn("Failed to update ChannelMemberHistory table", mlog.Err(err)) + mlog.Error("Failed to update ChannelMemberHistory table", mlog.Err(err)) + return nil, err } } @@ -988,7 +995,8 @@ func (a *App) addUserToChannel(user *model.User, channel *model.Channel, teamMem a.WaitForChannelMembership(channel.Id, user.Id) if err = a.Srv.Store.ChannelMemberHistory().LogJoinEvent(user.Id, channel.Id, model.GetMillis()); err != nil { - mlog.Warn("Failed to update ChannelMemberHistory table", mlog.Err(err)) + mlog.Error("Failed to update ChannelMemberHistory table", mlog.Err(err)) + return nil, err } a.InvalidateCacheForUser(user.Id)