From 5f3e6ad20ac5f4b0bb5f94e854f9e419fe58d8e0 Mon Sep 17 00:00:00 2001 From: Taufiq Rahman Date: Mon, 3 Jun 2019 20:41:14 +0600 Subject: [PATCH] Migrate "Post.GetParentsForExportAfter" to Sync by default #10965 (#11029) --- app/export.go | 8 +++----- store/sqlstore/post_store.go | 20 +++++++++----------- store/store.go | 2 +- store/storetest/mocks/PostStore.go | 19 ++++++++++++++----- store/storetest/post_store.go | 7 +++---- 5 files changed, 30 insertions(+), 26 deletions(-) diff --git a/app/export.go b/app/export.go index bd743839c0..bab867f8f5 100644 --- a/app/export.go +++ b/app/export.go @@ -332,14 +332,12 @@ func (a *App) buildUserNotifyProps(notifyProps model.StringMap) *UserNotifyProps func (a *App) ExportAllPosts(writer io.Writer) *model.AppError { afterId := strings.Repeat("0", 26) for { - result := <-a.Srv.Store.Post().GetParentsForExportAfter(1000, afterId) + posts, err := a.Srv.Store.Post().GetParentsForExportAfter(1000, afterId) - if result.Err != nil { - return result.Err + if err != nil { + return err } - posts := result.Data.([]*model.PostForExport) - if len(posts) == 0 { break } diff --git a/store/sqlstore/post_store.go b/store/sqlstore/post_store.go index d97cb6f4cb..b50201edef 100644 --- a/store/sqlstore/post_store.go +++ b/store/sqlstore/post_store.go @@ -1263,10 +1263,9 @@ func (s *SqlPostStore) GetMaxPostSize() int { return s.maxPostSizeCached } -func (s *SqlPostStore) GetParentsForExportAfter(limit int, afterId string) store.StoreChannel { - return store.Do(func(result *store.StoreResult) { - var posts []*model.PostForExport - _, err1 := s.GetSearchReplica().Select(&posts, ` +func (s *SqlPostStore) GetParentsForExportAfter(limit int, afterId string) ([]*model.PostForExport, *model.AppError) { + var posts []*model.PostForExport + _, err := s.GetSearchReplica().Select(&posts, ` SELECT p1.*, Users.Username as Username, @@ -1290,14 +1289,13 @@ func (s *SqlPostStore) GetParentsForExportAfter(limit int, afterId string) store p1.Id LIMIT :Limit`, - map[string]interface{}{"Limit": limit, "AfterId": afterId}) + map[string]interface{}{"Limit": limit, "AfterId": afterId}) - if err1 != nil { - result.Err = model.NewAppError("SqlPostStore.GetAllAfterForExport", "store.sql_post.get_posts.app_error", nil, err1.Error(), http.StatusInternalServerError) - } else { - result.Data = posts - } - }) + if err != nil { + return nil, model.NewAppError("SqlPostStore.GetAllAfterForExport", "store.sql_post.get_posts.app_error", + nil, err.Error(), http.StatusInternalServerError) + } + return posts, nil } func (s *SqlPostStore) GetRepliesForExport(parentId string) store.StoreChannel { diff --git a/store/store.go b/store/store.go index 69d000c6f0..9f2b1c46e6 100644 --- a/store/store.go +++ b/store/store.go @@ -238,7 +238,7 @@ type PostStore interface { PermanentDeleteBatch(endTime int64, limit int64) StoreChannel GetOldest() StoreChannel GetMaxPostSize() int - GetParentsForExportAfter(limit int, afterId string) StoreChannel + GetParentsForExportAfter(limit int, afterId string) ([]*model.PostForExport, *model.AppError) GetRepliesForExport(parentId string) StoreChannel GetDirectPostParentsForExportAfter(limit int, afterId string) ([]*model.DirectPostForExport, *model.AppError) } diff --git a/store/storetest/mocks/PostStore.go b/store/storetest/mocks/PostStore.go index ed574f05c1..c1283e2ed0 100644 --- a/store/storetest/mocks/PostStore.go +++ b/store/storetest/mocks/PostStore.go @@ -252,19 +252,28 @@ func (_m *PostStore) GetOldest() store.StoreChannel { } // GetParentsForExportAfter provides a mock function with given fields: limit, afterId -func (_m *PostStore) GetParentsForExportAfter(limit int, afterId string) store.StoreChannel { +func (_m *PostStore) GetParentsForExportAfter(limit int, afterId string) ([]*model.PostForExport, *model.AppError) { ret := _m.Called(limit, afterId) - var r0 store.StoreChannel - if rf, ok := ret.Get(0).(func(int, string) store.StoreChannel); ok { + var r0 []*model.PostForExport + if rf, ok := ret.Get(0).(func(int, string) []*model.PostForExport); ok { r0 = rf(limit, afterId) } else { if ret.Get(0) != nil { - r0 = ret.Get(0).(store.StoreChannel) + r0 = ret.Get(0).([]*model.PostForExport) } } - return r0 + var r1 *model.AppError + if rf, ok := ret.Get(1).(func(int, string) *model.AppError); ok { + r1 = rf(limit, afterId) + } else { + if ret.Get(1) != nil { + r1 = ret.Get(1).(*model.AppError) + } + } + + return r0, r1 } // GetPosts provides a mock function with given fields: channelId, offset, limit, allowFromCache diff --git a/store/storetest/post_store.go b/store/storetest/post_store.go index 8c8aa12cb8..e818a33e9b 100644 --- a/store/storetest/post_store.go +++ b/store/storetest/post_store.go @@ -2114,12 +2114,11 @@ func testPostStoreGetParentsForExportAfter(t *testing.T, ss store.Store) { p1.CreateAt = 1000 p1 = (<-ss.Post().Save(p1)).Data.(*model.Post) - r1 := <-ss.Post().GetParentsForExportAfter(10000, strings.Repeat("0", 26)) - assert.Nil(t, r1.Err) - d1 := r1.Data.([]*model.PostForExport) + posts, err := ss.Post().GetParentsForExportAfter(10000, strings.Repeat("0", 26)) + assert.Nil(t, err) found := false - for _, p := range d1 { + for _, p := range posts { if p.Id == p1.Id { found = true assert.Equal(t, p.Id, p1.Id)