Skip to content

Commit aad940e

Browse files
authored
MM-27187: Use the correct page offset for cache clear methods (mattermost#15094)
* MM-27187: Use the correct page offset for cache clear methods We were just using page and incrementing by 1. This would fetch pages one by one like (1-100, 2-102, 3-103) rather than (1-100,100-200,200-300). We fix that to update the correct page offset. * Trigger CI
1 parent 46207a3 commit aad940e

File tree

4 files changed

+47
-2
lines changed

4 files changed

+47
-2
lines changed

app/channel.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -2589,7 +2589,7 @@ func (a *App) ClearChannelMembersCache(channelID string) {
25892589
page := 0
25902590

25912591
for {
2592-
channelMembers, err := a.Srv().Store.Channel().GetMembers(channelID, page, perPage)
2592+
channelMembers, err := a.Srv().Store.Channel().GetMembers(channelID, page*perPage, perPage)
25932593
if err != nil {
25942594
a.Log().Warn("error clearing cache for channel members", mlog.String("channel_id", channelID))
25952595
break

app/channel_test.go

+22
Original file line numberDiff line numberDiff line change
@@ -1877,6 +1877,28 @@ func TestMarkChannelsAsViewedPanic(t *testing.T) {
18771877
require.Nil(t, err)
18781878
}
18791879

1880+
func TestClearChannelMembersCache(t *testing.T) {
1881+
th := SetupWithStoreMock(t)
1882+
defer th.TearDown()
1883+
1884+
mockStore := th.App.Srv().Store.(*mocks.Store)
1885+
mockChannelStore := mocks.ChannelStore{}
1886+
cms := model.ChannelMembers{}
1887+
for i := 0; i < 200; i++ {
1888+
cms = append(cms, model.ChannelMember{
1889+
ChannelId: "1",
1890+
})
1891+
}
1892+
mockChannelStore.On("GetMembers", "channelID", 0, 100).Return(&cms, nil)
1893+
mockChannelStore.On("GetMembers", "channelID", 100, 100).Return(&model.ChannelMembers{
1894+
model.ChannelMember{
1895+
ChannelId: "1",
1896+
}}, nil)
1897+
mockStore.On("Channel").Return(&mockChannelStore)
1898+
1899+
th.App.ClearChannelMembersCache("channelID")
1900+
}
1901+
18801902
func TestSidebarCategory(t *testing.T) {
18811903
th := Setup(t).InitBasic()
18821904
defer th.TearDown()

app/team.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -1643,7 +1643,7 @@ func (a *App) ClearTeamMembersCache(teamID string) {
16431643
page := 0
16441644

16451645
for {
1646-
teamMembers, err := a.Srv().Store.Team().GetMembers(teamID, page, perPage, nil)
1646+
teamMembers, err := a.Srv().Store.Team().GetMembers(teamID, page*perPage, perPage, nil)
16471647
if err != nil {
16481648
a.Log().Warn("error clearing cache for team members", mlog.String("team_id", teamID), mlog.String("err", err.Error()))
16491649
break

app/team_test.go

+23
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,9 @@ import (
1111
"testing"
1212

1313
"github.com/mattermost/mattermost-server/v5/model"
14+
"github.com/mattermost/mattermost-server/v5/store/storetest/mocks"
1415
"github.com/stretchr/testify/assert"
16+
"github.com/stretchr/testify/mock"
1517
"github.com/stretchr/testify/require"
1618
)
1719

@@ -1136,3 +1138,24 @@ func TestInvalidateAllEmailInvites(t *testing.T) {
11361138
_, err = th.App.Srv().Store.Token().GetByToken(t3.Token)
11371139
require.Nil(t, err)
11381140
}
1141+
1142+
func TestClearTeamMembersCache(t *testing.T) {
1143+
th := SetupWithStoreMock(t)
1144+
defer th.TearDown()
1145+
1146+
mockStore := th.App.Srv().Store.(*mocks.Store)
1147+
mockTeamStore := mocks.TeamStore{}
1148+
tms := []*model.TeamMember{}
1149+
for i := 0; i < 200; i++ {
1150+
tms = append(tms, &model.TeamMember{
1151+
TeamId: "1",
1152+
})
1153+
}
1154+
mockTeamStore.On("GetMembers", "teamID", 0, 100, mock.Anything).Return(tms, nil)
1155+
mockTeamStore.On("GetMembers", "teamID", 100, 100, mock.Anything).Return([]*model.TeamMember{{
1156+
TeamId: "1",
1157+
}}, nil)
1158+
mockStore.On("Team").Return(&mockTeamStore)
1159+
1160+
th.App.ClearTeamMembersCache("teamID")
1161+
}

0 commit comments

Comments
 (0)