mirror of
https://github.com/mattermost/mattermost.git
synced 2025-02-25 18:55:24 -06:00
MM-56579: Include deactivated users from DM posts (#25985)
There were 2 separate bugs here: 1. We were not including deactivated users while fetching posts from DM channels. 2. We were not respecting the includeArchivedChannels flag while fetching DM channels. We fix both of these issues here. ```release-note Include posts from deactivated users in DM channel export. Also respect the --include-archived-channels flag for DM channels. ``` https://mattermost.atlassian.net/browse/MM-56579 Co-authored-by: Mattermost Build <build@mattermost.com>
This commit is contained in:
parent
62f616dfbf
commit
28cb8d0441
@ -125,7 +125,7 @@ func (a *App) BulkExport(ctx request.CTX, writer io.Writer, outPath string, job
|
|||||||
}
|
}
|
||||||
|
|
||||||
ctx.Logger().Info("Bulk export: exporting direct posts")
|
ctx.Logger().Info("Bulk export: exporting direct posts")
|
||||||
directAttachments, err := a.exportAllDirectPosts(ctx, job, writer, opts.IncludeAttachments)
|
directAttachments, err := a.exportAllDirectPosts(ctx, job, writer, opts.IncludeAttachments, opts.IncludeArchivedChannels)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -729,7 +729,7 @@ func (a *App) buildFavoritedByList(channelID string) ([]string, *model.AppError)
|
|||||||
return userIDs, nil
|
return userIDs, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) exportAllDirectPosts(ctx request.CTX, job *model.Job, writer io.Writer, withAttachments bool) ([]imports.AttachmentImportData, *model.AppError) {
|
func (a *App) exportAllDirectPosts(ctx request.CTX, job *model.Job, writer io.Writer, withAttachments, includeArchivedChannels bool) ([]imports.AttachmentImportData, *model.AppError) {
|
||||||
var attachments []imports.AttachmentImportData
|
var attachments []imports.AttachmentImportData
|
||||||
afterId := strings.Repeat("0", 26)
|
afterId := strings.Repeat("0", 26)
|
||||||
var postProcessCount uint64
|
var postProcessCount uint64
|
||||||
@ -742,7 +742,7 @@ func (a *App) exportAllDirectPosts(ctx request.CTX, job *model.Job, writer io.Wr
|
|||||||
logCheckpoint = time.Now()
|
logCheckpoint = time.Now()
|
||||||
}
|
}
|
||||||
|
|
||||||
posts, err := a.Srv().Store().Post().GetDirectPostParentsForExportAfter(1000, afterId)
|
posts, err := a.Srv().Store().Post().GetDirectPostParentsForExportAfter(1000, afterId, includeArchivedChannels)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, model.NewAppError("exportAllDirectPosts", "app.post.get_direct_posts.app_error", nil, "", http.StatusInternalServerError).Wrap(err)
|
return nil, model.NewAppError("exportAllDirectPosts", "app.post.get_direct_posts.app_error", nil, "", http.StatusInternalServerError).Wrap(err)
|
||||||
}
|
}
|
||||||
|
@ -465,7 +465,7 @@ func TestExportDMandGMPost(t *testing.T) {
|
|||||||
}
|
}
|
||||||
th1.App.CreatePost(th1.Context, p4, gmChannel, false, true)
|
th1.App.CreatePost(th1.Context, p4, gmChannel, false, true)
|
||||||
|
|
||||||
posts, err := th1.App.Srv().Store().Post().GetDirectPostParentsForExportAfter(1000, "0000000")
|
posts, err := th1.App.Srv().Store().Post().GetDirectPostParentsForExportAfter(1000, "0000000", false)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
assert.Equal(t, 4, len(posts))
|
assert.Equal(t, 4, len(posts))
|
||||||
|
|
||||||
@ -478,7 +478,7 @@ func TestExportDMandGMPost(t *testing.T) {
|
|||||||
th2 := Setup(t)
|
th2 := Setup(t)
|
||||||
defer th2.TearDown()
|
defer th2.TearDown()
|
||||||
|
|
||||||
posts, err = th2.App.Srv().Store().Post().GetDirectPostParentsForExportAfter(1000, "0000000")
|
posts, err = th2.App.Srv().Store().Post().GetDirectPostParentsForExportAfter(1000, "0000000", false)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
assert.Equal(t, 0, len(posts))
|
assert.Equal(t, 0, len(posts))
|
||||||
|
|
||||||
@ -487,7 +487,7 @@ func TestExportDMandGMPost(t *testing.T) {
|
|||||||
assert.Nil(t, appErr)
|
assert.Nil(t, appErr)
|
||||||
assert.Equal(t, 0, i)
|
assert.Equal(t, 0, i)
|
||||||
|
|
||||||
posts, err = th2.App.Srv().Store().Post().GetDirectPostParentsForExportAfter(1000, "0000000")
|
posts, err = th2.App.Srv().Store().Post().GetDirectPostParentsForExportAfter(1000, "0000000", false)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
// Adding some determinism so its possible to assert on slice index
|
// Adding some determinism so its possible to assert on slice index
|
||||||
@ -538,7 +538,7 @@ func TestExportPostWithProps(t *testing.T) {
|
|||||||
}
|
}
|
||||||
th1.App.CreatePost(th1.Context, p2, gmChannel, false, true)
|
th1.App.CreatePost(th1.Context, p2, gmChannel, false, true)
|
||||||
|
|
||||||
posts, err := th1.App.Srv().Store().Post().GetDirectPostParentsForExportAfter(1000, "0000000")
|
posts, err := th1.App.Srv().Store().Post().GetDirectPostParentsForExportAfter(1000, "0000000", false)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
assert.Len(t, posts, 2)
|
assert.Len(t, posts, 2)
|
||||||
require.NotEmpty(t, posts[0].Props)
|
require.NotEmpty(t, posts[0].Props)
|
||||||
@ -553,7 +553,7 @@ func TestExportPostWithProps(t *testing.T) {
|
|||||||
th2 := Setup(t)
|
th2 := Setup(t)
|
||||||
defer th2.TearDown()
|
defer th2.TearDown()
|
||||||
|
|
||||||
posts, err = th2.App.Srv().Store().Post().GetDirectPostParentsForExportAfter(1000, "0000000")
|
posts, err = th2.App.Srv().Store().Post().GetDirectPostParentsForExportAfter(1000, "0000000", false)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
assert.Len(t, posts, 0)
|
assert.Len(t, posts, 0)
|
||||||
|
|
||||||
@ -562,7 +562,7 @@ func TestExportPostWithProps(t *testing.T) {
|
|||||||
assert.Nil(t, appErr)
|
assert.Nil(t, appErr)
|
||||||
assert.Equal(t, 0, i)
|
assert.Equal(t, 0, i)
|
||||||
|
|
||||||
posts, err = th2.App.Srv().Store().Post().GetDirectPostParentsForExportAfter(1000, "0000000")
|
posts, err = th2.App.Srv().Store().Post().GetDirectPostParentsForExportAfter(1000, "0000000", false)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
// Adding some determinism so its possible to assert on slice index
|
// Adding some determinism so its possible to assert on slice index
|
||||||
@ -586,7 +586,7 @@ func TestExportDMPostWithSelf(t *testing.T) {
|
|||||||
err := th1.App.BulkExport(th1.Context, &b, "somePath", nil, model.BulkExportOpts{})
|
err := th1.App.BulkExport(th1.Context, &b, "somePath", nil, model.BulkExportOpts{})
|
||||||
require.Nil(t, err)
|
require.Nil(t, err)
|
||||||
|
|
||||||
posts, nErr := th1.App.Srv().Store().Post().GetDirectPostParentsForExportAfter(1000, "0000000")
|
posts, nErr := th1.App.Srv().Store().Post().GetDirectPostParentsForExportAfter(1000, "0000000", false)
|
||||||
require.NoError(t, nErr)
|
require.NoError(t, nErr)
|
||||||
assert.Equal(t, 1, len(posts))
|
assert.Equal(t, 1, len(posts))
|
||||||
|
|
||||||
@ -595,7 +595,7 @@ func TestExportDMPostWithSelf(t *testing.T) {
|
|||||||
th2 := Setup(t)
|
th2 := Setup(t)
|
||||||
defer th2.TearDown()
|
defer th2.TearDown()
|
||||||
|
|
||||||
posts, nErr = th2.App.Srv().Store().Post().GetDirectPostParentsForExportAfter(1000, "0000000")
|
posts, nErr = th2.App.Srv().Store().Post().GetDirectPostParentsForExportAfter(1000, "0000000", false)
|
||||||
require.NoError(t, nErr)
|
require.NoError(t, nErr)
|
||||||
assert.Equal(t, 0, len(posts))
|
assert.Equal(t, 0, len(posts))
|
||||||
|
|
||||||
@ -604,7 +604,7 @@ func TestExportDMPostWithSelf(t *testing.T) {
|
|||||||
assert.Nil(t, err)
|
assert.Nil(t, err)
|
||||||
assert.Equal(t, 0, i)
|
assert.Equal(t, 0, i)
|
||||||
|
|
||||||
posts, nErr = th2.App.Srv().Store().Post().GetDirectPostParentsForExportAfter(1000, "0000000")
|
posts, nErr = th2.App.Srv().Store().Post().GetDirectPostParentsForExportAfter(1000, "0000000", false)
|
||||||
require.NoError(t, nErr)
|
require.NoError(t, nErr)
|
||||||
assert.Equal(t, 1, len(posts))
|
assert.Equal(t, 1, len(posts))
|
||||||
assert.Equal(t, 1, len((*posts[0].ChannelMembers)))
|
assert.Equal(t, 1, len((*posts[0].ChannelMembers)))
|
||||||
|
@ -6192,7 +6192,7 @@ func (s *OpenTracingLayerPostStore) Get(ctx context.Context, id string, opts mod
|
|||||||
return result, err
|
return result, err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *OpenTracingLayerPostStore) GetDirectPostParentsForExportAfter(limit int, afterID string) ([]*model.DirectPostForExport, error) {
|
func (s *OpenTracingLayerPostStore) GetDirectPostParentsForExportAfter(limit int, afterID string, includeArchivedChannels bool) ([]*model.DirectPostForExport, error) {
|
||||||
origCtx := s.Root.Store.Context()
|
origCtx := s.Root.Store.Context()
|
||||||
span, newCtx := tracing.StartSpanWithParentByContext(s.Root.Store.Context(), "PostStore.GetDirectPostParentsForExportAfter")
|
span, newCtx := tracing.StartSpanWithParentByContext(s.Root.Store.Context(), "PostStore.GetDirectPostParentsForExportAfter")
|
||||||
s.Root.Store.SetContext(newCtx)
|
s.Root.Store.SetContext(newCtx)
|
||||||
@ -6201,7 +6201,7 @@ func (s *OpenTracingLayerPostStore) GetDirectPostParentsForExportAfter(limit int
|
|||||||
}()
|
}()
|
||||||
|
|
||||||
defer span.Finish()
|
defer span.Finish()
|
||||||
result, err := s.PostStore.GetDirectPostParentsForExportAfter(limit, afterID)
|
result, err := s.PostStore.GetDirectPostParentsForExportAfter(limit, afterID, includeArchivedChannels)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
span.LogFields(spanlog.Error(err))
|
span.LogFields(spanlog.Error(err))
|
||||||
ext.Error.Set(span, true)
|
ext.Error.Set(span, true)
|
||||||
|
@ -7028,11 +7028,11 @@ func (s *RetryLayerPostStore) Get(ctx context.Context, id string, opts model.Get
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *RetryLayerPostStore) GetDirectPostParentsForExportAfter(limit int, afterID string) ([]*model.DirectPostForExport, error) {
|
func (s *RetryLayerPostStore) GetDirectPostParentsForExportAfter(limit int, afterID string, includeArchivedChannels bool) ([]*model.DirectPostForExport, error) {
|
||||||
|
|
||||||
tries := 0
|
tries := 0
|
||||||
for {
|
for {
|
||||||
result, err := s.PostStore.GetDirectPostParentsForExportAfter(limit, afterID)
|
result, err := s.PostStore.GetDirectPostParentsForExportAfter(limit, afterID, includeArchivedChannels)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
return result, nil
|
return result, nil
|
||||||
}
|
}
|
||||||
|
@ -2686,7 +2686,7 @@ func (s *SqlPostStore) GetRepliesForExport(rootId string) ([]*model.ReplyForExpo
|
|||||||
return posts, nil
|
return posts, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *SqlPostStore) GetDirectPostParentsForExportAfter(limit int, afterId string) ([]*model.DirectPostForExport, error) {
|
func (s *SqlPostStore) GetDirectPostParentsForExportAfter(limit int, afterId string, includeArchivedChannels bool) ([]*model.DirectPostForExport, error) {
|
||||||
query := s.getQueryBuilder().
|
query := s.getQueryBuilder().
|
||||||
Select("p.*", "Users.Username as User").
|
Select("p.*", "Users.Username as User").
|
||||||
From("Posts p").
|
From("Posts p").
|
||||||
@ -2696,13 +2696,17 @@ func (s *SqlPostStore) GetDirectPostParentsForExportAfter(limit int, afterId str
|
|||||||
sq.Gt{"p.Id": afterId},
|
sq.Gt{"p.Id": afterId},
|
||||||
sq.Eq{"p.RootId": ""},
|
sq.Eq{"p.RootId": ""},
|
||||||
sq.Eq{"p.DeleteAt": 0},
|
sq.Eq{"p.DeleteAt": 0},
|
||||||
sq.Eq{"Channels.DeleteAt": 0},
|
|
||||||
sq.Eq{"Users.DeleteAt": 0},
|
|
||||||
sq.Eq{"Channels.Type": []model.ChannelType{model.ChannelTypeDirect, model.ChannelTypeGroup}},
|
sq.Eq{"Channels.Type": []model.ChannelType{model.ChannelTypeDirect, model.ChannelTypeGroup}},
|
||||||
}).
|
}).
|
||||||
OrderBy("p.Id").
|
OrderBy("p.Id").
|
||||||
Limit(uint64(limit))
|
Limit(uint64(limit))
|
||||||
|
|
||||||
|
if !includeArchivedChannels {
|
||||||
|
query = query.Where(
|
||||||
|
sq.Eq{"Channels.DeleteAt": 0},
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
queryString, args, err := query.ToSql()
|
queryString, args, err := query.ToSql()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errors.Wrap(err, "post_tosql")
|
return nil, errors.Wrap(err, "post_tosql")
|
||||||
|
@ -390,7 +390,7 @@ type PostStore interface {
|
|||||||
GetMaxPostSize() int
|
GetMaxPostSize() int
|
||||||
GetParentsForExportAfter(limit int, afterID string, includeArchivedChannels bool) ([]*model.PostForExport, error)
|
GetParentsForExportAfter(limit int, afterID string, includeArchivedChannels bool) ([]*model.PostForExport, error)
|
||||||
GetRepliesForExport(parentID string) ([]*model.ReplyForExport, error)
|
GetRepliesForExport(parentID string) ([]*model.ReplyForExport, error)
|
||||||
GetDirectPostParentsForExportAfter(limit int, afterID string) ([]*model.DirectPostForExport, error)
|
GetDirectPostParentsForExportAfter(limit int, afterID string, includeArchivedChannels bool) ([]*model.DirectPostForExport, error)
|
||||||
SearchPostsForUser(rctx request.CTX, paramsList []*model.SearchParams, userID, teamID string, page, perPage int) (*model.PostSearchResults, error)
|
SearchPostsForUser(rctx request.CTX, paramsList []*model.SearchParams, userID, teamID string, page, perPage int) (*model.PostSearchResults, error)
|
||||||
GetOldestEntityCreationTime() (int64, error)
|
GetOldestEntityCreationTime() (int64, error)
|
||||||
HasAutoResponsePostByUserSince(options model.GetPostsSinceOptions, userId string) (bool, error)
|
HasAutoResponsePostByUserSince(options model.GetPostsSinceOptions, userId string) (bool, error)
|
||||||
|
@ -141,25 +141,25 @@ func (_m *PostStore) Get(ctx context.Context, id string, opts model.GetPostsOpti
|
|||||||
return r0, r1
|
return r0, r1
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetDirectPostParentsForExportAfter provides a mock function with given fields: limit, afterID
|
// GetDirectPostParentsForExportAfter provides a mock function with given fields: limit, afterID, includeArchivedChannels
|
||||||
func (_m *PostStore) GetDirectPostParentsForExportAfter(limit int, afterID string) ([]*model.DirectPostForExport, error) {
|
func (_m *PostStore) GetDirectPostParentsForExportAfter(limit int, afterID string, includeArchivedChannels bool) ([]*model.DirectPostForExport, error) {
|
||||||
ret := _m.Called(limit, afterID)
|
ret := _m.Called(limit, afterID, includeArchivedChannels)
|
||||||
|
|
||||||
var r0 []*model.DirectPostForExport
|
var r0 []*model.DirectPostForExport
|
||||||
var r1 error
|
var r1 error
|
||||||
if rf, ok := ret.Get(0).(func(int, string) ([]*model.DirectPostForExport, error)); ok {
|
if rf, ok := ret.Get(0).(func(int, string, bool) ([]*model.DirectPostForExport, error)); ok {
|
||||||
return rf(limit, afterID)
|
return rf(limit, afterID, includeArchivedChannels)
|
||||||
}
|
}
|
||||||
if rf, ok := ret.Get(0).(func(int, string) []*model.DirectPostForExport); ok {
|
if rf, ok := ret.Get(0).(func(int, string, bool) []*model.DirectPostForExport); ok {
|
||||||
r0 = rf(limit, afterID)
|
r0 = rf(limit, afterID, includeArchivedChannels)
|
||||||
} else {
|
} else {
|
||||||
if ret.Get(0) != nil {
|
if ret.Get(0) != nil {
|
||||||
r0 = ret.Get(0).([]*model.DirectPostForExport)
|
r0 = ret.Get(0).([]*model.DirectPostForExport)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if rf, ok := ret.Get(1).(func(int, string) error); ok {
|
if rf, ok := ret.Get(1).(func(int, string, bool) error); ok {
|
||||||
r1 = rf(limit, afterID)
|
r1 = rf(limit, afterID, includeArchivedChannels)
|
||||||
} else {
|
} else {
|
||||||
r1 = ret.Error(1)
|
r1 = ret.Error(1)
|
||||||
}
|
}
|
||||||
|
@ -4457,7 +4457,7 @@ func testPostStoreGetDirectPostParentsForExportAfter(t *testing.T, rctx request.
|
|||||||
p1, nErr = ss.Post().Save(p1)
|
p1, nErr = ss.Post().Save(p1)
|
||||||
require.NoError(t, nErr)
|
require.NoError(t, nErr)
|
||||||
|
|
||||||
r1, nErr := ss.Post().GetDirectPostParentsForExportAfter(10000, strings.Repeat("0", 26))
|
r1, nErr := ss.Post().GetDirectPostParentsForExportAfter(10000, strings.Repeat("0", 26), false)
|
||||||
assert.NoError(t, nErr)
|
assert.NoError(t, nErr)
|
||||||
|
|
||||||
assert.Equal(t, p1.Message, r1[0].Message)
|
assert.Equal(t, p1.Message, r1[0].Message)
|
||||||
@ -4514,20 +4514,17 @@ func testPostStoreGetDirectPostParentsForExportAfterDeleted(t *testing.T, rctx r
|
|||||||
p1.UserId = u1.Id
|
p1.UserId = u1.Id
|
||||||
p1.Message = NewTestId()
|
p1.Message = NewTestId()
|
||||||
p1.CreateAt = 1000
|
p1.CreateAt = 1000
|
||||||
p1, nErr = ss.Post().Save(p1)
|
_, nErr = ss.Post().Save(p1)
|
||||||
require.NoError(t, nErr)
|
require.NoError(t, nErr)
|
||||||
|
|
||||||
o1a := p1.Clone()
|
r1, nErr := ss.Post().GetDirectPostParentsForExportAfter(10000, strings.Repeat("0", 26), false)
|
||||||
o1a.DeleteAt = 1
|
|
||||||
o1a.Message = p1.Message + "BBBBBBBBBB"
|
|
||||||
_, nErr = ss.Post().Update(rctx, o1a, p1)
|
|
||||||
require.NoError(t, nErr)
|
|
||||||
|
|
||||||
r1, nErr := ss.Post().GetDirectPostParentsForExportAfter(10000, strings.Repeat("0", 26))
|
|
||||||
assert.NoError(t, nErr)
|
assert.NoError(t, nErr)
|
||||||
|
|
||||||
assert.Equal(t, 0, len(r1))
|
assert.Equal(t, 0, len(r1))
|
||||||
|
|
||||||
|
r1, nErr = ss.Post().GetDirectPostParentsForExportAfter(10000, strings.Repeat("0", 26), true)
|
||||||
|
assert.NoError(t, nErr)
|
||||||
|
assert.Equal(t, 1, len(r1))
|
||||||
|
|
||||||
// Manually truncate Channels table until testlib can handle cleanups
|
// Manually truncate Channels table until testlib can handle cleanups
|
||||||
s.GetMasterX().Exec("TRUNCATE Channels")
|
s.GetMasterX().Exec("TRUNCATE Channels")
|
||||||
}
|
}
|
||||||
@ -4583,7 +4580,7 @@ func testPostStoreGetDirectPostParentsForExportAfterBatched(t *testing.T, rctx r
|
|||||||
sort.Slice(postIds, func(i, j int) bool { return postIds[i] < postIds[j] })
|
sort.Slice(postIds, func(i, j int) bool { return postIds[i] < postIds[j] })
|
||||||
|
|
||||||
// Get all posts
|
// Get all posts
|
||||||
r1, err := ss.Post().GetDirectPostParentsForExportAfter(10000, strings.Repeat("0", 26))
|
r1, err := ss.Post().GetDirectPostParentsForExportAfter(10000, strings.Repeat("0", 26), false)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
assert.Equal(t, len(postIds), len(r1))
|
assert.Equal(t, len(postIds), len(r1))
|
||||||
var exportedPostIds []string
|
var exportedPostIds []string
|
||||||
@ -4594,7 +4591,7 @@ func testPostStoreGetDirectPostParentsForExportAfterBatched(t *testing.T, rctx r
|
|||||||
assert.ElementsMatch(t, postIds, exportedPostIds)
|
assert.ElementsMatch(t, postIds, exportedPostIds)
|
||||||
|
|
||||||
// Get 100
|
// Get 100
|
||||||
r1, err = ss.Post().GetDirectPostParentsForExportAfter(100, strings.Repeat("0", 26))
|
r1, err = ss.Post().GetDirectPostParentsForExportAfter(100, strings.Repeat("0", 26), false)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
assert.Equal(t, 100, len(r1))
|
assert.Equal(t, 100, len(r1))
|
||||||
exportedPostIds = []string{}
|
exportedPostIds = []string{}
|
||||||
|
@ -5610,10 +5610,10 @@ func (s *TimerLayerPostStore) Get(ctx context.Context, id string, opts model.Get
|
|||||||
return result, err
|
return result, err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *TimerLayerPostStore) GetDirectPostParentsForExportAfter(limit int, afterID string) ([]*model.DirectPostForExport, error) {
|
func (s *TimerLayerPostStore) GetDirectPostParentsForExportAfter(limit int, afterID string, includeArchivedChannels bool) ([]*model.DirectPostForExport, error) {
|
||||||
start := time.Now()
|
start := time.Now()
|
||||||
|
|
||||||
result, err := s.PostStore.GetDirectPostParentsForExportAfter(limit, afterID)
|
result, err := s.PostStore.GetDirectPostParentsForExportAfter(limit, afterID, includeArchivedChannels)
|
||||||
|
|
||||||
elapsed := float64(time.Since(start)) / float64(time.Second)
|
elapsed := float64(time.Since(start)) / float64(time.Second)
|
||||||
if s.Root.Metrics != nil {
|
if s.Root.Metrics != nil {
|
||||||
|
Loading…
Reference in New Issue
Block a user