MM-55295: Improve DB performance of some (Take 2) (#25865)
* Revert "Revert "MM-55295: Improve DB performance of some APIs (#25318)" (#25852)"
This reverts commit 077221a940.
* Fix the issue
```release-note
NONE
```
* lint fix
```release-note
NONE
```
Этот коммит содержится в:
коммит произвёл
GitHub
родитель
43cca04f04
Коммит
1d879ed0f4
@@ -110,6 +110,7 @@ func TestChannelStore(t *testing.T, rctx request.CTX, ss store.Store, s SqlStore
|
||||
t.Run("IncrementMentionCount", func(t *testing.T) { testChannelStoreIncrementMentionCount(t, rctx, ss) })
|
||||
t.Run("UpdateChannelMember", func(t *testing.T) { testUpdateChannelMember(t, rctx, ss) })
|
||||
t.Run("GetMember", func(t *testing.T) { testGetMember(t, rctx, ss) })
|
||||
t.Run("GetMemberLastViewedAt", func(t *testing.T) { testGetMemberLastViewedAt(t, rctx, ss) })
|
||||
t.Run("GetMemberForPost", func(t *testing.T) { testChannelStoreGetMemberForPost(t, rctx, ss) })
|
||||
t.Run("GetMemberCount", func(t *testing.T) { testGetMemberCount(t, rctx, ss) })
|
||||
t.Run("GetMemberCountsByGroup", func(t *testing.T) { testGetMemberCountsByGroup(t, rctx, ss) })
|
||||
@@ -246,6 +247,10 @@ func testChannelStoreSaveDirectChannel(t *testing.T, rctx request.CTX, ss store.
|
||||
require.NoError(t, nErr)
|
||||
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)
|
||||
require.Error(t, nErr, "shouldn't be a able to update from save")
|
||||
|
||||
@@ -282,6 +287,10 @@ func testChannelStoreSaveDirectChannel(t *testing.T, rctx request.CTX, ss store.
|
||||
require.NoError(t, nErr)
|
||||
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
|
||||
s.GetMasterX().Exec("TRUNCATE Channels")
|
||||
}
|
||||
@@ -4892,6 +4901,62 @@ func testGetMember(t *testing.T, rctx request.CTX, ss store.Store) {
|
||||
ss.Channel().InvalidateCacheForChannelMembersNotifyProps(c2.Id)
|
||||
}
|
||||
|
||||
func testGetMemberLastViewedAt(t *testing.T, rctx request.CTX, ss store.Store) {
|
||||
userId := model.NewId()
|
||||
|
||||
c1 := &model.Channel{
|
||||
TeamId: model.NewId(),
|
||||
DisplayName: model.NewId(),
|
||||
Name: model.NewId(),
|
||||
Type: model.ChannelTypeOpen,
|
||||
}
|
||||
_, nErr := ss.Channel().Save(c1, -1)
|
||||
require.NoError(t, nErr)
|
||||
|
||||
c2 := &model.Channel{
|
||||
TeamId: c1.TeamId,
|
||||
DisplayName: model.NewId(),
|
||||
Name: model.NewId(),
|
||||
Type: model.ChannelTypeOpen,
|
||||
}
|
||||
_, nErr = ss.Channel().Save(c2, -1)
|
||||
require.NoError(t, nErr)
|
||||
|
||||
m1 := &model.ChannelMember{
|
||||
ChannelId: c1.Id,
|
||||
UserId: userId,
|
||||
NotifyProps: model.GetDefaultChannelNotifyProps(),
|
||||
LastViewedAt: int64(100),
|
||||
}
|
||||
_, err := ss.Channel().SaveMember(m1)
|
||||
require.NoError(t, err)
|
||||
|
||||
m2 := &model.ChannelMember{
|
||||
ChannelId: c2.Id,
|
||||
UserId: userId,
|
||||
NotifyProps: model.GetDefaultChannelNotifyProps(),
|
||||
LastViewedAt: int64(200),
|
||||
}
|
||||
_, err = ss.Channel().SaveMember(m2)
|
||||
require.NoError(t, err)
|
||||
|
||||
_, err = ss.Channel().GetMemberLastViewedAt(context.Background(), model.NewId(), userId)
|
||||
require.Error(t, err, "should've failed to get member for non-existent channel")
|
||||
|
||||
_, err = ss.Channel().GetMemberLastViewedAt(context.Background(), c1.Id, model.NewId())
|
||||
require.Error(t, err, "should've failed to get member for non-existent user")
|
||||
|
||||
lvAt, err := ss.Channel().GetMemberLastViewedAt(context.Background(), c1.Id, userId)
|
||||
require.NoError(t, err, "shouldn't have errored when getting member", err)
|
||||
require.Equal(t, m1.LastViewedAt, lvAt, "should've gotten LastViewedAt of channel 1")
|
||||
|
||||
lvAt, err = ss.Channel().GetMemberLastViewedAt(context.Background(), c2.Id, userId)
|
||||
require.NoError(t, err, "shouldn't have errored when getting member", err)
|
||||
require.Equal(t, m2.LastViewedAt, lvAt, "should've gotten gotten LastViewedAt of channel 2")
|
||||
|
||||
ss.Channel().InvalidateCacheForChannelMembersNotifyProps(c2.Id)
|
||||
}
|
||||
|
||||
func testChannelStoreGetMemberForPost(t *testing.T, rctx request.CTX, ss store.Store) {
|
||||
ch := &model.Channel{
|
||||
TeamId: model.NewId(),
|
||||
@@ -7477,6 +7542,10 @@ func testChannelStoreRemoveAllDeactivatedMembers(t *testing.T, rctx request.CTX,
|
||||
assert.NoError(t, err)
|
||||
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.
|
||||
u1.DeleteAt = model.GetMillis()
|
||||
u2.DeleteAt = model.GetMillis()
|
||||
@@ -7494,6 +7563,10 @@ func testChannelStoreRemoveAllDeactivatedMembers(t *testing.T, rctx request.CTX,
|
||||
assert.Len(t, d2, 1)
|
||||
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
|
||||
s.GetMasterX().Exec("TRUNCATE Channels")
|
||||
}
|
||||
|
||||
@@ -432,8 +432,8 @@ func (_m *ChannelStore) GetAll(teamID string) ([]*model.Channel, error) {
|
||||
return r0, r1
|
||||
}
|
||||
|
||||
// GetAllChannelMembersById provides a mock function with given fields: id
|
||||
func (_m *ChannelStore) GetAllChannelMembersById(id string) ([]string, error) {
|
||||
// GetAllChannelMemberIdsByChannelId provides a mock function with given fields: id
|
||||
func (_m *ChannelStore) GetAllChannelMemberIdsByChannelId(id string) ([]string, error) {
|
||||
ret := _m.Called(id)
|
||||
|
||||
var r0 []string
|
||||
@@ -1314,6 +1314,30 @@ func (_m *ChannelStore) GetMemberForPost(postID string, userID string, includeAr
|
||||
return r0, r1
|
||||
}
|
||||
|
||||
// GetMemberLastViewedAt provides a mock function with given fields: ctx, channelID, userID
|
||||
func (_m *ChannelStore) GetMemberLastViewedAt(ctx context.Context, channelID string, userID string) (int64, error) {
|
||||
ret := _m.Called(ctx, channelID, userID)
|
||||
|
||||
var r0 int64
|
||||
var r1 error
|
||||
if rf, ok := ret.Get(0).(func(context.Context, string, string) (int64, error)); ok {
|
||||
return rf(ctx, channelID, userID)
|
||||
}
|
||||
if rf, ok := ret.Get(0).(func(context.Context, string, string) int64); ok {
|
||||
r0 = rf(ctx, channelID, userID)
|
||||
} else {
|
||||
r0 = ret.Get(0).(int64)
|
||||
}
|
||||
|
||||
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
|
||||
func (_m *ChannelStore) GetMembers(channelID string, offset int, limit int) (model.ChannelMembers, error) {
|
||||
ret := _m.Called(channelID, offset, limit)
|
||||
|
||||
Ссылка в новой задаче
Block a user