diff --git a/store/sqlstore/post_store.go b/store/sqlstore/post_store.go index 068353faf9..1f1b5ff0ab 100644 --- a/store/sqlstore/post_store.go +++ b/store/sqlstore/post_store.go @@ -1155,28 +1155,24 @@ func (s *SqlPostStore) GetPostsBatchForIndexing(startTime int64, endTime int64, return posts, nil } -func (s *SqlPostStore) PermanentDeleteBatch(endTime int64, limit int64) store.StoreChannel { - return store.Do(func(result *store.StoreResult) { - var query string - if s.DriverName() == "postgres" { - query = "DELETE from Posts WHERE Id = any (array (SELECT Id FROM Posts WHERE CreateAt < :EndTime LIMIT :Limit))" - } else { - query = "DELETE from Posts WHERE CreateAt < :EndTime LIMIT :Limit" - } +func (s *SqlPostStore) PermanentDeleteBatch(endTime int64, limit int64) (int64, *model.AppError) { + var query string + if s.DriverName() == "postgres" { + query = "DELETE from Posts WHERE Id = any (array (SELECT Id FROM Posts WHERE CreateAt < :EndTime LIMIT :Limit))" + } else { + query = "DELETE from Posts WHERE CreateAt < :EndTime LIMIT :Limit" + } - sqlResult, err := s.GetMaster().Exec(query, map[string]interface{}{"EndTime": endTime, "Limit": limit}) - if err != nil { - result.Err = model.NewAppError("SqlPostStore.PermanentDeleteBatch", "store.sql_post.permanent_delete_batch.app_error", nil, ""+err.Error(), http.StatusInternalServerError) - } else { - rowsAffected, err1 := sqlResult.RowsAffected() - if err1 != nil { - result.Err = model.NewAppError("SqlPostStore.PermanentDeleteBatch", "store.sql_post.permanent_delete_batch.app_error", nil, ""+err.Error(), http.StatusInternalServerError) - result.Data = int64(0) - } else { - result.Data = rowsAffected - } - } - }) + sqlResult, err := s.GetMaster().Exec(query, map[string]interface{}{"EndTime": endTime, "Limit": limit}) + if err != nil { + return 0, model.NewAppError("SqlPostStore.PermanentDeleteBatch", "store.sql_post.permanent_delete_batch.app_error", nil, ""+err.Error(), http.StatusInternalServerError) + } + + rowsAffected, err := sqlResult.RowsAffected() + if err != nil { + return 0, model.NewAppError("SqlPostStore.PermanentDeleteBatch", "store.sql_post.permanent_delete_batch.app_error", nil, ""+err.Error(), http.StatusInternalServerError) + } + return rowsAffected, nil } func (s *SqlPostStore) GetOldest() store.StoreChannel { diff --git a/store/store.go b/store/store.go index 59753ed528..6f4a95e57a 100644 --- a/store/store.go +++ b/store/store.go @@ -235,7 +235,7 @@ type PostStore interface { Overwrite(post *model.Post) (*model.Post, *model.AppError) GetPostsByIds(postIds []string) ([]*model.Post, *model.AppError) GetPostsBatchForIndexing(startTime int64, endTime int64, limit int) ([]*model.PostForIndexing, *model.AppError) - PermanentDeleteBatch(endTime int64, limit int64) StoreChannel + PermanentDeleteBatch(endTime int64, limit int64) (int64, *model.AppError) GetOldest() StoreChannel GetMaxPostSize() int GetParentsForExportAfter(limit int, afterId string) ([]*model.PostForExport, *model.AppError) diff --git a/store/storetest/mocks/PostStore.go b/store/storetest/mocks/PostStore.go index f44afef70c..1556fafeb6 100644 --- a/store/storetest/mocks/PostStore.go +++ b/store/storetest/mocks/PostStore.go @@ -523,19 +523,26 @@ func (_m *PostStore) Overwrite(post *model.Post) (*model.Post, *model.AppError) } // PermanentDeleteBatch provides a mock function with given fields: endTime, limit -func (_m *PostStore) PermanentDeleteBatch(endTime int64, limit int64) store.StoreChannel { +func (_m *PostStore) PermanentDeleteBatch(endTime int64, limit int64) (int64, *model.AppError) { ret := _m.Called(endTime, limit) - var r0 store.StoreChannel - if rf, ok := ret.Get(0).(func(int64, int64) store.StoreChannel); ok { + var r0 int64 + if rf, ok := ret.Get(0).(func(int64, int64) int64); ok { r0 = rf(endTime, limit) } 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(int64, int64) *model.AppError); ok { + r1 = rf(endTime, limit) + } else { + if ret.Get(1) != nil { + r1 = ret.Get(1).(*model.AppError) } } - return r0 + return r0, r1 } // PermanentDeleteByChannel provides a mock function with given fields: channelId diff --git a/store/storetest/post_store.go b/store/storetest/post_store.go index 1d232ee137..403b9039f3 100644 --- a/store/storetest/post_store.go +++ b/store/storetest/post_store.go @@ -2035,7 +2035,8 @@ func testPostStorePermanentDeleteBatch(t *testing.T, ss store.Store) { o3.CreateAt = 100000 o3 = (<-ss.Post().Save(o3)).Data.(*model.Post) - store.Must(ss.Post().PermanentDeleteBatch(2000, 1000)) + _, err := ss.Post().PermanentDeleteBatch(2000, 1000) + require.Nil(t, err) if _, err := ss.Post().Get(o1.Id); err == nil { t.Fatalf("Should have not found post 1 after purge")