Revert "MM-55295: Improve DB performance of some APIs (#25318)" (#25852)

This reverts commit ec88ab4ee9.
Этот коммит содержится в:
Claudio Costa
2024-01-05 10:05:37 -06:00
коммит произвёл GitHub
родитель 4b88bfd5fb
Коммит 077221a940
12 изменённых файлов: 53 добавлений и 189 удалений

Просмотреть файл

@@ -83,6 +83,7 @@ func (a *App) SessionHasPermissionToChannel(c request.CTX, session model.Session
} }
ids, err := a.Srv().Store().Channel().GetAllChannelMembersForUser(session.UserId, true, true) ids, err := a.Srv().Store().Channel().GetAllChannelMembersForUser(session.UserId, true, true)
var channelRoles []string var channelRoles []string
if err == nil { if err == nil {
if roles, ok := ids[channelID]; ok { if roles, ok := ids[channelID]; ok {
@@ -259,22 +260,17 @@ func (a *App) HasPermissionToChannel(c request.CTX, askingUserId string, channel
return false return false
} }
// We call GetAllChannelMembersForUser instead of just getting channelMember, err := a.GetChannelMember(c, channelID, askingUserId)
// a single member from the DB, because it's cache backed
// and this is a very frequent call.
ids, err := a.Srv().Store().Channel().GetAllChannelMembersForUser(askingUserId, true, true)
var channelRoles []string
if err == nil { if err == nil {
if roles, ok := ids[channelID]; ok { roles := channelMember.GetRoles()
channelRoles = strings.Fields(roles) if a.RolesGrantPermission(roles, permission.Id) {
if a.RolesGrantPermission(channelRoles, permission.Id) { return true
return true
}
} }
} }
channel, appErr := a.GetChannel(c, channelID) var channel *model.Channel
if appErr == nil { channel, err = a.GetChannel(c, channelID)
if err == nil {
return a.HasPermissionToTeam(c, askingUserId, channel.TeamId, permission) return a.HasPermissionToTeam(c, askingUserId, channel.TeamId, permission)
} }

Просмотреть файл

@@ -2063,21 +2063,6 @@ func (s *Server) getChannelMember(c request.CTX, channelID string, userID string
return channelMember, nil return channelMember, nil
} }
func (s *Server) getChannelMemberOnly(c request.CTX, channelID string, userID string) (*model.ChannelMember, *model.AppError) {
channelMember, err := s.Store().Channel().GetMemberOnly(c.Context(), channelID, userID)
if err != nil {
var nfErr *store.ErrNotFound
switch {
case errors.As(err, &nfErr):
return nil, model.NewAppError("getChannelMemberOnly", MissingChannelMemberError, nil, "", http.StatusNotFound).Wrap(err)
default:
return nil, model.NewAppError("getChannelMemberOnly", "app.channel.get_member.app_error", nil, "", http.StatusInternalServerError).Wrap(err)
}
}
return channelMember, nil
}
func (a *App) GetChannelMembersPage(c request.CTX, channelID string, page, perPage int) (model.ChannelMembers, *model.AppError) { func (a *App) GetChannelMembersPage(c request.CTX, channelID string, page, perPage int) (model.ChannelMembers, *model.AppError) {
channelMembers, err := a.Srv().Store().Channel().GetMembers(channelID, page*perPage, perPage) channelMembers, err := a.Srv().Store().Channel().GetMembers(channelID, page*perPage, perPage)
if err != nil { if err != nil {

Просмотреть файл

@@ -810,9 +810,9 @@ func (a *App) publishWebsocketEventForPermalinkPost(c request.CTX, post *model.P
return false, err return false, err
} }
userIDs, nErr := a.Srv().Store().Channel().GetAllChannelMemberIdsByChannelId(post.ChannelId) channelMembers, err := a.GetChannelMembersPage(c, post.ChannelId, 0, 10000000)
if nErr != nil { if err != nil {
return false, model.NewAppError("publishWebsocketEventForPermalinkPost", "app.channel.get_members.app_error", nil, "", http.StatusInternalServerError).Wrap(err) return false, err
} }
permalinkPreviewedChannel, err := a.GetChannel(c, previewedPost.ChannelId) permalinkPreviewedChannel, err := a.GetChannel(c, previewedPost.ChannelId)
@@ -827,19 +827,19 @@ func (a *App) publishWebsocketEventForPermalinkPost(c request.CTX, post *model.P
originalEmbeds := post.Metadata.Embeds originalEmbeds := post.Metadata.Embeds
originalProps := post.GetProps() originalProps := post.GetProps()
permalinkPreviewedPost := post.GetPreviewPost() permalinkPreviewedPost := post.GetPreviewPost()
for _, userID := range userIDs { for _, cm := range channelMembers {
if permalinkPreviewedPost != nil { if permalinkPreviewedPost != nil {
post.Metadata.Embeds = originalEmbeds post.Metadata.Embeds = originalEmbeds
post.SetProps(originalProps) post.SetProps(originalProps)
} }
postForUser := a.sanitizePostMetadataForUserAndChannel(c, post, permalinkPreviewedPost, permalinkPreviewedChannel, userID) postForUser := a.sanitizePostMetadataForUserAndChannel(c, post, permalinkPreviewedPost, permalinkPreviewedChannel, cm.UserId)
// Using DeepCopy here to avoid a race condition // Using DeepCopy here to avoid a race condition
// between publishing the event and setting the "post" data value below. // between publishing the event and setting the "post" data value below.
messageCopy := message.DeepCopy() messageCopy := message.DeepCopy()
broadcastCopy := messageCopy.GetBroadcast() broadcastCopy := messageCopy.GetBroadcast()
broadcastCopy.UserId = userID broadcastCopy.UserId = cm.UserId
messageCopy.SetBroadcast(broadcastCopy) messageCopy.SetBroadcast(broadcastCopy)
postJSON, jsonErr := postForUser.ToJSON() postJSON, jsonErr := postForUser.ToJSON()
@@ -1294,7 +1294,7 @@ func (a *App) AddCursorIdsForPostList(originalList *model.PostList, afterPost, b
func (a *App) GetPostsForChannelAroundLastUnread(c request.CTX, channelID, userID string, limitBefore, limitAfter int, skipFetchThreads bool, collapsedThreads, collapsedThreadsExtended bool) (*model.PostList, *model.AppError) { func (a *App) GetPostsForChannelAroundLastUnread(c request.CTX, channelID, userID string, limitBefore, limitAfter int, skipFetchThreads bool, collapsedThreads, collapsedThreadsExtended bool) (*model.PostList, *model.AppError) {
var member *model.ChannelMember var member *model.ChannelMember
var err *model.AppError var err *model.AppError
if member, err = a.Srv().getChannelMemberOnly(c, channelID, userID); err != nil { if member, err = a.GetChannelMember(c, channelID, userID); err != nil {
return nil, err return nil, err
} else if member.LastViewedAt == 0 { } else if member.LastViewedAt == 0 {
return model.NewPostList(), nil return model.NewPostList(), nil
@@ -1870,9 +1870,9 @@ func (a *App) countThreadMentions(c request.CTX, user *model.User, post *model.P
// countMentionsFromPost returns the number of posts in the post's channel that mention the user after and including the // countMentionsFromPost returns the number of posts in the post's channel that mention the user after and including the
// given post. // given post.
func (a *App) countMentionsFromPost(c request.CTX, user *model.User, post *model.Post) (int, int, int, *model.AppError) { func (a *App) countMentionsFromPost(c request.CTX, user *model.User, post *model.Post) (int, int, int, *model.AppError) {
channel, appErr := a.GetChannel(c, post.ChannelId) channel, err := a.GetChannel(c, post.ChannelId)
if appErr != nil { if err != nil {
return 0, 0, 0, appErr return 0, 0, 0, err
} }
if channel.Type == model.ChannelTypeDirect || channel.Type == model.ChannelTypeGroup { if channel.Type == model.ChannelTypeDirect || channel.Type == model.ChannelTypeGroup {
@@ -1893,15 +1893,15 @@ func (a *App) countMentionsFromPost(c request.CTX, user *model.User, post *model
return count, countRoot, urgentCount, nil return count, countRoot, urgentCount, nil
} }
members, err := a.Srv().Store().Channel().GetAllChannelMembersNotifyPropsForChannel(channel.Id, true) channelMember, err := a.GetChannelMember(c, channel.Id, user.Id)
if err != nil { if err != nil {
return 0, 0, 0, model.NewAppError("countMentionsFromPost", "app.channel.count_posts_since.app_error", nil, "", http.StatusInternalServerError).Wrap(err) return 0, 0, 0, err
} }
keywords := MentionKeywords{} keywords := MentionKeywords{}
keywords.AddUser( keywords.AddUser(
user, user,
members[user.Id], channelMember.NotifyProps,
&model.Status{Status: model.StatusOnline}, // Assume the user is online since they would've triggered this &model.Status{Status: model.StatusOnline}, // Assume the user is online since they would've triggered this
true, // Assume channel mentions are always allowed for simplicity true, // Assume channel mentions are always allowed for simplicity
) )
@@ -1911,9 +1911,9 @@ func (a *App) countMentionsFromPost(c request.CTX, user *model.User, post *model
// A mapping of thread root IDs to whether or not a post in that thread mentions the user // A mapping of thread root IDs to whether or not a post in that thread mentions the user
mentionedByThread := make(map[string]bool) mentionedByThread := make(map[string]bool)
thread, appErr := a.GetPostThread(post.Id, model.GetPostsOptions{}, user.Id) thread, err := a.GetPostThread(post.Id, model.GetPostsOptions{}, user.Id)
if appErr != nil { if err != nil {
return 0, 0, 0, appErr return 0, 0, 0, err
} }
count := 0 count := 0

Просмотреть файл

@@ -965,16 +965,16 @@ func (s *OpenTracingLayerChannelStore) GetAll(teamID string) ([]*model.Channel,
return result, err return result, err
} }
func (s *OpenTracingLayerChannelStore) GetAllChannelMemberIdsByChannelId(id string) ([]string, error) { func (s *OpenTracingLayerChannelStore) GetAllChannelMembersById(id string) ([]string, error) {
origCtx := s.Root.Store.Context() origCtx := s.Root.Store.Context()
span, newCtx := tracing.StartSpanWithParentByContext(s.Root.Store.Context(), "ChannelStore.GetAllChannelMemberIdsByChannelId") span, newCtx := tracing.StartSpanWithParentByContext(s.Root.Store.Context(), "ChannelStore.GetAllChannelMembersById")
s.Root.Store.SetContext(newCtx) s.Root.Store.SetContext(newCtx)
defer func() { defer func() {
s.Root.Store.SetContext(origCtx) s.Root.Store.SetContext(origCtx)
}() }()
defer span.Finish() defer span.Finish()
result, err := s.ChannelStore.GetAllChannelMemberIdsByChannelId(id) result, err := s.ChannelStore.GetAllChannelMembersById(id)
if err != nil { if err != nil {
span.LogFields(spanlog.Error(err)) span.LogFields(spanlog.Error(err))
ext.Error.Set(span, true) ext.Error.Set(span, true)
@@ -1572,24 +1572,6 @@ func (s *OpenTracingLayerChannelStore) GetMemberForPost(postID string, userID st
return result, err return result, err
} }
func (s *OpenTracingLayerChannelStore) GetMemberOnly(ctx context.Context, channelID string, userID string) (*model.ChannelMember, error) {
origCtx := s.Root.Store.Context()
span, newCtx := tracing.StartSpanWithParentByContext(s.Root.Store.Context(), "ChannelStore.GetMemberOnly")
s.Root.Store.SetContext(newCtx)
defer func() {
s.Root.Store.SetContext(origCtx)
}()
defer span.Finish()
result, err := s.ChannelStore.GetMemberOnly(ctx, channelID, userID)
if err != nil {
span.LogFields(spanlog.Error(err))
ext.Error.Set(span, true)
}
return result, err
}
func (s *OpenTracingLayerChannelStore) GetMembers(channelID string, offset int, limit int) (model.ChannelMembers, error) { func (s *OpenTracingLayerChannelStore) GetMembers(channelID string, offset int, limit int) (model.ChannelMembers, error) {
origCtx := s.Root.Store.Context() origCtx := s.Root.Store.Context()
span, newCtx := tracing.StartSpanWithParentByContext(s.Root.Store.Context(), "ChannelStore.GetMembers") span, newCtx := tracing.StartSpanWithParentByContext(s.Root.Store.Context(), "ChannelStore.GetMembers")

Просмотреть файл

@@ -1049,11 +1049,11 @@ func (s *RetryLayerChannelStore) GetAll(teamID string) ([]*model.Channel, error)
} }
func (s *RetryLayerChannelStore) GetAllChannelMemberIdsByChannelId(id string) ([]string, error) { func (s *RetryLayerChannelStore) GetAllChannelMembersById(id string) ([]string, error) {
tries := 0 tries := 0
for { for {
result, err := s.ChannelStore.GetAllChannelMemberIdsByChannelId(id) result, err := s.ChannelStore.GetAllChannelMembersById(id)
if err == nil { if err == nil {
return result, nil return result, nil
} }
@@ -1748,27 +1748,6 @@ func (s *RetryLayerChannelStore) GetMemberForPost(postID string, userID string)
} }
func (s *RetryLayerChannelStore) GetMemberOnly(ctx context.Context, channelID string, userID string) (*model.ChannelMember, error) {
tries := 0
for {
result, err := s.ChannelStore.GetMemberOnly(ctx, channelID, userID)
if err == nil {
return result, nil
}
if !isRepeatableError(err) {
return result, err
}
tries++
if tries >= 3 {
err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
return result, err
}
timepkg.Sleep(100 * timepkg.Millisecond)
}
}
func (s *RetryLayerChannelStore) GetMembers(channelID string, offset int, limit int) (model.ChannelMembers, error) { func (s *RetryLayerChannelStore) GetMembers(channelID string, offset int, limit int) (model.ChannelMembers, error) {
tries := 0 tries := 0

Просмотреть файл

@@ -40,7 +40,7 @@ func (c *SearchChannelStore) indexChannel(rctx request.CTX, channel *model.Chann
var userIDs, teamMemberIDs []string var userIDs, teamMemberIDs []string
var err error var err error
if channel.Type == model.ChannelTypePrivate { if channel.Type == model.ChannelTypePrivate {
userIDs, err = c.GetAllChannelMemberIdsByChannelId(channel.Id) userIDs, err = c.GetAllChannelMembersById(channel.Id)
if err != nil { if err != nil {
rctx.Logger().Warn("Encountered error while indexing channel", mlog.String("channel_id", channel.Id), mlog.Err(err)) rctx.Logger().Warn("Encountered error while indexing channel", mlog.String("channel_id", channel.Id), mlog.Err(err))
return return

Просмотреть файл

@@ -1126,16 +1126,26 @@ func (s SqlChannelStore) GetChannelsByUser(userId string, includeDeleted bool, l
return channels, nil return channels, nil
} }
func (s SqlChannelStore) GetAllChannelMemberIdsByChannelId(channelID string) ([]string, error) { func (s SqlChannelStore) GetAllChannelMembersById(channelID string) ([]string, error) {
userIDs := []string{} sql, args, err := s.channelMembersForTeamWithSchemeSelectQuery.Where(sq.Eq{
err := s.GetReplicaX().Select(&userIDs, `SELECT UserId "ChannelId": channelID,
FROM ChannelMembers }).ToSql()
WHERE ChannelId=?`, channelID) if err != nil {
return nil, errors.Wrap(err, "GetAllChannelMembersById_ToSql")
}
dbMembers := channelMemberWithSchemeRolesList{}
err = s.GetReplicaX().Select(&dbMembers, sql, args...)
if err != nil { if err != nil {
return nil, errors.Wrapf(err, "failed to get ChannelMembers with channelID=%s", channelID) return nil, errors.Wrapf(err, "failed to get ChannelMembers with channelID=%s", channelID)
} }
return userIDs, nil res := make([]string, len(dbMembers))
for i, member := range dbMembers.ToModel() {
res[i] = member.UserId
}
return res, nil
} }
func (s SqlChannelStore) GetAllChannels(offset, limit int, opts store.ChannelSearchOpts) (model.ChannelListWithTeamData, error) { func (s SqlChannelStore) GetAllChannels(offset, limit int, opts store.ChannelSearchOpts) (model.ChannelListWithTeamData, error) {
@@ -2060,33 +2070,6 @@ func (s SqlChannelStore) GetMember(ctx context.Context, channelID string, userID
return dbMember.ToModel(), nil return dbMember.ToModel(), nil
} }
func (s SqlChannelStore) GetMemberOnly(ctx context.Context, channelID string, userID string) (*model.ChannelMember, error) {
var dbMember model.ChannelMember
if err := s.DBXFromContext(ctx).Get(&dbMember, `SELECT ChannelId,
UserId,
Roles,
LastViewedAt,
MsgCount,
MentionCount,
MentionCountRoot,
COALESCE(UrgentMentionCount, 0) AS UrgentMentionCount,
MsgCountRoot,
NotifyProps,
LastUpdateAt,
SchemeUser,
SchemeAdmin,
SchemeGuest
FROM ChannelMembers
WHERE ChannelId=? AND UserId=?`, channelID, userID); err != nil {
if err == sql.ErrNoRows {
return nil, store.NewErrNotFound("ChannelMember", fmt.Sprintf("channelId=%s, userId=%s", channelID, userID))
}
return nil, errors.Wrapf(err, "failed to get ChannelMember with channelId=%s and userId=%s", channelID, userID)
}
return &dbMember, nil
}
func (s SqlChannelStore) InvalidateAllChannelMembersForUser(userId string) { func (s SqlChannelStore) InvalidateAllChannelMembersForUser(userId string) {
allChannelMembersForUserCache.Remove(userId) allChannelMembersForUserCache.Remove(userId)
allChannelMembersForUserCache.Remove(userId + "_deleted") allChannelMembersForUserCache.Remove(userId + "_deleted")

Просмотреть файл

@@ -205,7 +205,7 @@ type ChannelStore interface {
GetDeleted(team_id string, offset int, limit int, userID string) (model.ChannelList, error) GetDeleted(team_id string, offset int, limit int, userID string) (model.ChannelList, error)
GetChannels(teamID, userID string, opts *model.ChannelSearchOpts) (model.ChannelList, error) GetChannels(teamID, userID string, opts *model.ChannelSearchOpts) (model.ChannelList, error)
GetChannelsByUser(userID string, includeDeleted bool, lastDeleteAt, pageSize int, fromChannelID string) (model.ChannelList, error) GetChannelsByUser(userID string, includeDeleted bool, lastDeleteAt, pageSize int, fromChannelID string) (model.ChannelList, error)
GetAllChannelMemberIdsByChannelId(id string) ([]string, error) GetAllChannelMembersById(id string) ([]string, error)
GetAllChannels(page, perPage int, opts ChannelSearchOpts) (model.ChannelListWithTeamData, error) GetAllChannels(page, perPage int, opts ChannelSearchOpts) (model.ChannelListWithTeamData, error)
GetAllChannelsCount(opts ChannelSearchOpts) (int64, error) GetAllChannelsCount(opts ChannelSearchOpts) (int64, error)
GetMoreChannels(teamID string, userID string, offset int, limit int) (model.ChannelList, error) GetMoreChannels(teamID string, userID string, offset int, limit int) (model.ChannelList, error)
@@ -227,9 +227,6 @@ type ChannelStore interface {
UpdateMemberNotifyProps(channelID, userID string, props map[string]string) (*model.ChannelMember, error) UpdateMemberNotifyProps(channelID, userID string, props map[string]string) (*model.ChannelMember, error)
GetMembers(channelID string, offset, limit int) (model.ChannelMembers, error) GetMembers(channelID string, offset, limit int) (model.ChannelMembers, error)
GetMember(ctx context.Context, channelID string, userID string) (*model.ChannelMember, error) GetMember(ctx context.Context, channelID string, userID string) (*model.ChannelMember, error)
// GetMemberOnly is a lite version of GetMember where it does not join
// with the different schemes tables.
GetMemberOnly(ctx context.Context, channelID string, userID string) (*model.ChannelMember, error)
GetChannelMembersTimezones(channelID string) ([]model.StringMap, error) GetChannelMembersTimezones(channelID string) ([]model.StringMap, error)
GetAllChannelMembersForUser(userID string, allowFromCache bool, includeDeleted bool) (map[string]string, error) GetAllChannelMembersForUser(userID string, allowFromCache bool, includeDeleted bool) (map[string]string, error)
GetChannelsMemberCount(channelIDs []string) (map[string]int64, error) GetChannelsMemberCount(channelIDs []string) (map[string]int64, error)

Просмотреть файл

@@ -246,10 +246,6 @@ func testChannelStoreSaveDirectChannel(t *testing.T, rctx request.CTX, ss store.
require.NoError(t, nErr) require.NoError(t, nErr)
require.Len(t, members, 2, "should have saved 2 members") require.Len(t, members, 2, "should have saved 2 members")
userIDs, nErr := ss.Channel().GetAllChannelMemberIdsByChannelId(o1.Id)
require.NoError(t, nErr)
require.ElementsMatch(t, []string{u1.Id, u2.Id}, userIDs)
_, nErr = ss.Channel().SaveDirectChannel(rctx, &o1, &m1, &m2) _, nErr = ss.Channel().SaveDirectChannel(rctx, &o1, &m1, &m2)
require.Error(t, nErr, "shouldn't be a able to update from save") require.Error(t, nErr, "shouldn't be a able to update from save")
@@ -286,10 +282,6 @@ func testChannelStoreSaveDirectChannel(t *testing.T, rctx request.CTX, ss store.
require.NoError(t, nErr) require.NoError(t, nErr)
require.Len(t, members, 1, "should have saved just 1 member") require.Len(t, members, 1, "should have saved just 1 member")
userIDs, nErr = ss.Channel().GetAllChannelMemberIdsByChannelId(o1.Id)
require.NoError(t, nErr)
require.ElementsMatch(t, []string{u1.Id}, userIDs)
// Manually truncate Channels table until testlib can handle cleanups // Manually truncate Channels table until testlib can handle cleanups
s.GetMasterX().Exec("TRUNCATE Channels") s.GetMasterX().Exec("TRUNCATE Channels")
} }
@@ -7485,10 +7477,6 @@ func testChannelStoreRemoveAllDeactivatedMembers(t *testing.T, rctx request.CTX,
assert.NoError(t, err) assert.NoError(t, err)
assert.Len(t, d1, 3) assert.Len(t, d1, 3)
userIDs, nErr := ss.Channel().GetAllChannelMemberIdsByChannelId(c1.Id)
require.NoError(t, nErr)
require.ElementsMatch(t, []string{u1.Id, u2.Id, u3.Id}, userIDs)
// Deactivate users 1 & 2. // Deactivate users 1 & 2.
u1.DeleteAt = model.GetMillis() u1.DeleteAt = model.GetMillis()
u2.DeleteAt = model.GetMillis() u2.DeleteAt = model.GetMillis()
@@ -7506,10 +7494,6 @@ func testChannelStoreRemoveAllDeactivatedMembers(t *testing.T, rctx request.CTX,
assert.Len(t, d2, 1) assert.Len(t, d2, 1)
assert.Equal(t, u3.Id, d2[0].UserId) assert.Equal(t, u3.Id, d2[0].UserId)
userIDs, nErr = ss.Channel().GetAllChannelMemberIdsByChannelId(c1.Id)
require.NoError(t, nErr)
require.ElementsMatch(t, []string{u3.Id}, userIDs)
// Manually truncate Channels table until testlib can handle cleanups // Manually truncate Channels table until testlib can handle cleanups
s.GetMasterX().Exec("TRUNCATE Channels") s.GetMasterX().Exec("TRUNCATE Channels")
} }

Просмотреть файл

@@ -432,8 +432,8 @@ func (_m *ChannelStore) GetAll(teamID string) ([]*model.Channel, error) {
return r0, r1 return r0, r1
} }
// GetAllChannelMemberIdsByChannelId provides a mock function with given fields: id // GetAllChannelMembersById provides a mock function with given fields: id
func (_m *ChannelStore) GetAllChannelMemberIdsByChannelId(id string) ([]string, error) { func (_m *ChannelStore) GetAllChannelMembersById(id string) ([]string, error) {
ret := _m.Called(id) ret := _m.Called(id)
var r0 []string var r0 []string
@@ -1314,32 +1314,6 @@ func (_m *ChannelStore) GetMemberForPost(postID string, userID string) (*model.C
return r0, r1 return r0, r1
} }
// GetMemberOnly provides a mock function with given fields: ctx, channelID, userID
func (_m *ChannelStore) GetMemberOnly(ctx context.Context, channelID string, userID string) (*model.ChannelMember, error) {
ret := _m.Called(ctx, channelID, userID)
var r0 *model.ChannelMember
var r1 error
if rf, ok := ret.Get(0).(func(context.Context, string, string) (*model.ChannelMember, error)); ok {
return rf(ctx, channelID, userID)
}
if rf, ok := ret.Get(0).(func(context.Context, string, string) *model.ChannelMember); ok {
r0 = rf(ctx, channelID, userID)
} else {
if ret.Get(0) != nil {
r0 = ret.Get(0).(*model.ChannelMember)
}
}
if rf, ok := ret.Get(1).(func(context.Context, string, string) error); ok {
r1 = rf(ctx, channelID, userID)
} else {
r1 = ret.Error(1)
}
return r0, r1
}
// GetMembers provides a mock function with given fields: channelID, offset, limit // GetMembers provides a mock function with given fields: channelID, offset, limit
func (_m *ChannelStore) GetMembers(channelID string, offset int, limit int) (model.ChannelMembers, error) { func (_m *ChannelStore) GetMembers(channelID string, offset int, limit int) (model.ChannelMembers, error) {
ret := _m.Called(channelID, offset, limit) ret := _m.Called(channelID, offset, limit)

Просмотреть файл

@@ -917,10 +917,10 @@ func (s *TimerLayerChannelStore) GetAll(teamID string) ([]*model.Channel, error)
return result, err return result, err
} }
func (s *TimerLayerChannelStore) GetAllChannelMemberIdsByChannelId(id string) ([]string, error) { func (s *TimerLayerChannelStore) GetAllChannelMembersById(id string) ([]string, error) {
start := time.Now() start := time.Now()
result, err := s.ChannelStore.GetAllChannelMemberIdsByChannelId(id) result, err := s.ChannelStore.GetAllChannelMembersById(id)
elapsed := float64(time.Since(start)) / float64(time.Second) elapsed := float64(time.Since(start)) / float64(time.Second)
if s.Root.Metrics != nil { if s.Root.Metrics != nil {
@@ -928,7 +928,7 @@ func (s *TimerLayerChannelStore) GetAllChannelMemberIdsByChannelId(id string) ([
if err == nil { if err == nil {
success = "true" success = "true"
} }
s.Root.Metrics.ObserveStoreMethodDuration("ChannelStore.GetAllChannelMemberIdsByChannelId", success, elapsed) s.Root.Metrics.ObserveStoreMethodDuration("ChannelStore.GetAllChannelMembersById", success, elapsed)
} }
return result, err return result, err
} }
@@ -1461,22 +1461,6 @@ func (s *TimerLayerChannelStore) GetMemberForPost(postID string, userID string)
return result, err return result, err
} }
func (s *TimerLayerChannelStore) GetMemberOnly(ctx context.Context, channelID string, userID string) (*model.ChannelMember, error) {
start := time.Now()
result, err := s.ChannelStore.GetMemberOnly(ctx, channelID, userID)
elapsed := float64(time.Since(start)) / float64(time.Second)
if s.Root.Metrics != nil {
success := "false"
if err == nil {
success = "true"
}
s.Root.Metrics.ObserveStoreMethodDuration("ChannelStore.GetMemberOnly", success, elapsed)
}
return result, err
}
func (s *TimerLayerChannelStore) GetMembers(channelID string, offset int, limit int) (model.ChannelMembers, error) { func (s *TimerLayerChannelStore) GetMembers(channelID string, offset int, limit int) (model.ChannelMembers, error) {
start := time.Now() start := time.Now()

Просмотреть файл

@@ -526,7 +526,7 @@ func (worker *BleveIndexerWorker) BulkIndexChannels(logger mlog.LoggerIFace, cha
var userIDs []string var userIDs []string
var err error var err error
if channel.Type == model.ChannelTypePrivate { if channel.Type == model.ChannelTypePrivate {
userIDs, err = worker.jobServer.Store.Channel().GetAllChannelMemberIdsByChannelId(channel.Id) userIDs, err = worker.jobServer.Store.Channel().GetAllChannelMembersById(channel.Id)
if err != nil { if err != nil {
return nil, model.NewAppError("BleveIndexerWorker.BulkIndexChannels", "bleveengine.indexer.do_job.bulk_index_channels.batch_error", nil, "", http.StatusInternalServerError).Wrap(err) return nil, model.NewAppError("BleveIndexerWorker.BulkIndexChannels", "bleveengine.indexer.do_job.bulk_index_channels.batch_error", nil, "", http.StatusInternalServerError).Wrap(err)
} }