From a39ceadd580d5d122e8cf576f177e49c7975ec1f Mon Sep 17 00:00:00 2001 From: krjn <51929404+krjn@users.noreply.github.com> Date: Wed, 19 Jun 2019 15:23:16 +0000 Subject: [PATCH] [MM-16353] Migrate Channel.AnalyticsDeletedTypeCount to Sync by default (#11289) * [MM-16353] Migrate AnalyticsDeletedTypeCount to Sync by default * refactor: decrease branching * test: use testify for assertion --- app/diagnostics.go | 8 ++--- store/sqlstore/channel_store.go | 23 ++++++------- store/store.go | 2 +- store/storetest/channel_store.go | 49 ++++++++++----------------- store/storetest/mocks/ChannelStore.go | 19 +++++++---- 5 files changed, 46 insertions(+), 55 deletions(-) diff --git a/app/diagnostics.go b/app/diagnostics.go index 4647b4ebc9..55d0279543 100644 --- a/app/diagnostics.go +++ b/app/diagnostics.go @@ -183,12 +183,12 @@ func (a *App) trackActivity() { directChannelCount = dcc } - if duccr := <-a.Srv.Store.Channel().AnalyticsDeletedTypeCount("", "O"); duccr.Err == nil { - deletedPublicChannelCount = duccr.Data.(int64) + if duccr, err := a.Srv.Store.Channel().AnalyticsDeletedTypeCount("", "O"); err == nil { + deletedPublicChannelCount = duccr } - if dpccr := <-a.Srv.Store.Channel().AnalyticsDeletedTypeCount("", "P"); dpccr.Err == nil { - deletedPrivateChannelCount = dpccr.Data.(int64) + if dpccr, err := a.Srv.Store.Channel().AnalyticsDeletedTypeCount("", "P"); err == nil { + deletedPrivateChannelCount = dpccr } postsCount, _ = a.Srv.Store.Post().AnalyticsPostCount("", false, false) diff --git a/store/sqlstore/channel_store.go b/store/sqlstore/channel_store.go index 0e30e837d4..10424a09c9 100644 --- a/store/sqlstore/channel_store.go +++ b/store/sqlstore/channel_store.go @@ -1886,22 +1886,19 @@ func (s SqlChannelStore) AnalyticsTypeCount(teamId string, channelType string) ( return value, nil } -func (s SqlChannelStore) AnalyticsDeletedTypeCount(teamId string, channelType string) store.StoreChannel { - return store.Do(func(result *store.StoreResult) { - query := "SELECT COUNT(Id) AS Value FROM Channels WHERE Type = :ChannelType AND DeleteAt > 0" +func (s SqlChannelStore) AnalyticsDeletedTypeCount(teamId string, channelType string) (int64, *model.AppError) { + query := "SELECT COUNT(Id) AS Value FROM Channels WHERE Type = :ChannelType AND DeleteAt > 0" - if len(teamId) > 0 { - query += " AND TeamId = :TeamId" - } + if len(teamId) > 0 { + query += " AND TeamId = :TeamId" + } - v, err := s.GetReplica().SelectInt(query, map[string]interface{}{"TeamId": teamId, "ChannelType": channelType}) - if err != nil { - result.Err = model.NewAppError("SqlChannelStore.AnalyticsDeletedTypeCount", "store.sql_channel.analytics_deleted_type_count.app_error", nil, err.Error(), http.StatusInternalServerError) - return - } + v, err := s.GetReplica().SelectInt(query, map[string]interface{}{"TeamId": teamId, "ChannelType": channelType}) + if err != nil { + return 0, model.NewAppError("SqlChannelStore.AnalyticsDeletedTypeCount", "store.sql_channel.analytics_deleted_type_count.app_error", nil, err.Error(), http.StatusInternalServerError) + } - result.Data = v - }) + return v, nil } func (s SqlChannelStore) GetMembersForUser(teamId string, userId string) store.StoreChannel { diff --git a/store/store.go b/store/store.go index e5d8588cf1..9961db553e 100644 --- a/store/store.go +++ b/store/store.go @@ -186,7 +186,7 @@ type ChannelStore interface { SearchInTeam(teamId string, term string, includeDeleted bool) (*model.ChannelList, *model.AppError) SearchMore(userId string, teamId string, term string) (*model.ChannelList, *model.AppError) GetMembersByIds(channelId string, userIds []string) StoreChannel - AnalyticsDeletedTypeCount(teamId string, channelType string) StoreChannel + AnalyticsDeletedTypeCount(teamId string, channelType string) (int64, *model.AppError) GetChannelUnread(channelId, userId string) (*model.ChannelUnread, *model.AppError) ClearCaches() GetChannelsByScheme(schemeId string, offset int, limit int) StoreChannel diff --git a/store/storetest/channel_store.go b/store/storetest/channel_store.go index 82afadf5d7..31035b7fe0 100644 --- a/store/storetest/channel_store.go +++ b/store/storetest/channel_store.go @@ -2755,24 +2755,18 @@ func testChannelStoreAnalyticsDeletedTypeCount(t *testing.T, ss store.Store) { }() var openStartCount int64 - if result := <-ss.Channel().AnalyticsDeletedTypeCount("", "O"); result.Err != nil { - t.Fatal(result.Err.Error()) - } else { - openStartCount = result.Data.(int64) + if openStartCount, err = ss.Channel().AnalyticsDeletedTypeCount("", "O"); err != nil { + t.Fatal(err) } var privateStartCount int64 - if result := <-ss.Channel().AnalyticsDeletedTypeCount("", "P"); result.Err != nil { - t.Fatal(result.Err.Error()) - } else { - privateStartCount = result.Data.(int64) + if privateStartCount, err = ss.Channel().AnalyticsDeletedTypeCount("", "P"); err != nil { + t.Fatal(err) } var directStartCount int64 - if result := <-ss.Channel().AnalyticsDeletedTypeCount("", "D"); result.Err != nil { - t.Fatal(result.Err.Error()) - } else { - directStartCount = result.Data.(int64) + if directStartCount, err = ss.Channel().AnalyticsDeletedTypeCount("", "D"); err != nil { + t.Fatal(err) } err = ss.Channel().Delete(o1.Id, model.GetMillis()) @@ -2784,29 +2778,22 @@ func testChannelStoreAnalyticsDeletedTypeCount(t *testing.T, ss store.Store) { err = ss.Channel().Delete(d4.Id, model.GetMillis()) require.Nil(t, err, "channel should have been deleted") - if result := <-ss.Channel().AnalyticsDeletedTypeCount("", "O"); result.Err != nil { - t.Fatal(result.Err.Error()) - } else { - if result.Data.(int64) != openStartCount+2 { - t.Fatalf("Wrong open channel deleted count.") - } - } + var count int64 - if result := <-ss.Channel().AnalyticsDeletedTypeCount("", "P"); result.Err != nil { - t.Fatal(result.Err.Error()) - } else { - if result.Data.(int64) != privateStartCount+1 { - t.Fatalf("Wrong private channel deleted count.") - } + if count, err = ss.Channel().AnalyticsDeletedTypeCount("", "O"); err != nil { + t.Fatal(err) } + assert.Equal(t, openStartCount+2, count, "Wrong open channel deleted count.") - if result := <-ss.Channel().AnalyticsDeletedTypeCount("", "D"); result.Err != nil { - t.Fatal(result.Err.Error()) - } else { - if result.Data.(int64) != directStartCount+1 { - t.Fatalf("Wrong direct channel deleted count.") - } + if count, err = ss.Channel().AnalyticsDeletedTypeCount("", "P"); err != nil { + t.Fatal(err) } + assert.Equal(t, privateStartCount+1, count, "Wrong private channel deleted count.") + + if count, err = ss.Channel().AnalyticsDeletedTypeCount("", "D"); err != nil { + t.Fatal(err) + } + assert.Equal(t, directStartCount+1, count, "Wrong direct channel deleted count.") } func testChannelStoreGetPinnedPosts(t *testing.T, ss store.Store) { diff --git a/store/storetest/mocks/ChannelStore.go b/store/storetest/mocks/ChannelStore.go index 1e2950763a..5e87697d6c 100644 --- a/store/storetest/mocks/ChannelStore.go +++ b/store/storetest/mocks/ChannelStore.go @@ -14,19 +14,26 @@ type ChannelStore struct { } // AnalyticsDeletedTypeCount provides a mock function with given fields: teamId, channelType -func (_m *ChannelStore) AnalyticsDeletedTypeCount(teamId string, channelType string) store.StoreChannel { +func (_m *ChannelStore) AnalyticsDeletedTypeCount(teamId string, channelType string) (int64, *model.AppError) { ret := _m.Called(teamId, channelType) - var r0 store.StoreChannel - if rf, ok := ret.Get(0).(func(string, string) store.StoreChannel); ok { + var r0 int64 + if rf, ok := ret.Get(0).(func(string, string) int64); ok { r0 = rf(teamId, channelType) } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).(store.StoreChannel) + r0 = ret.Get(0).(int64) + } + + var r1 *model.AppError + if rf, ok := ret.Get(1).(func(string, string) *model.AppError); ok { + r1 = rf(teamId, channelType) + } else { + if ret.Get(1) != nil { + r1 = ret.Get(1).(*model.AppError) } } - return r0 + return r0, r1 } // AnalyticsTypeCount provides a mock function with given fields: teamId, channelType