This change modifies some of the logic for processing posts during
bulk export in order to improve performance.
Этот коммит содержится в:
Gabe Jackson
2019-07-25 12:20:49 -04:00
коммит произвёл GitHub
родитель 5c87009ca4
Коммит b73b6b4c36
3 изменённых файлов: 84 добавлений и 59 удалений

Просмотреть файл

@@ -52,34 +52,42 @@ var exportablePreferences = map[ComparablePreference]string{{
}
func (a *App) BulkExport(writer io.Writer, file string, pathToEmojiDir string, dirNameToExportEmoji string) *model.AppError {
mlog.Info("Bulk export: exporting version")
if err := a.ExportVersion(writer); err != nil {
return err
}
mlog.Info("Bulk export: exporting teams")
if err := a.ExportAllTeams(writer); err != nil {
return err
}
mlog.Info("Bulk export: exporting channels")
if err := a.ExportAllChannels(writer); err != nil {
return err
}
mlog.Info("Bulk export: exporting users")
if err := a.ExportAllUsers(writer); err != nil {
return err
}
mlog.Info("Bulk export: exporting posts")
if err := a.ExportAllPosts(writer); err != nil {
return err
}
mlog.Info("Bulk export: exporting emoji")
if err := a.ExportCustomEmoji(writer, file, pathToEmojiDir, dirNameToExportEmoji); err != nil {
return err
}
mlog.Info("Bulk export: exporting direct channels")
if err := a.ExportAllDirectChannels(writer); err != nil {
return err
}
mlog.Info("Bulk export: exporting direct posts")
if err := a.ExportAllDirectPosts(writer); err != nil {
return err
}
@@ -327,15 +335,15 @@ func (a *App) buildUserNotifyProps(notifyProps model.StringMap) *UserNotifyProps
func (a *App) ExportAllPosts(writer io.Writer) *model.AppError {
afterId := strings.Repeat("0", 26)
for {
posts, err := a.Srv.Store.Post().GetParentsForExportAfter(1000, afterId)
if err != nil {
return err
}
if len(posts) == 0 {
break
return nil
}
for _, post := range posts {
@@ -348,47 +356,41 @@ func (a *App) ExportAllPosts(writer io.Writer) *model.AppError {
postLine := ImportLineForPost(post)
// Do the Replies.
replies, err := a.buildPostReplies(post.Id)
postLine.Post.Replies, err = a.buildPostReplies(post.Id)
if err != nil {
return err
}
reactions, err := a.BuildPostReactions(post.Id)
if err != nil {
return err
postLine.Post.Reactions = &[]ReactionImportData{}
if post.HasReactions {
postLine.Post.Reactions, err = a.BuildPostReactions(post.Id)
if err != nil {
return err
}
}
postLine.Post.Replies = replies
postLine.Post.Reactions = reactions
if err := a.ExportWriteLine(writer, postLine); err != nil {
return err
}
}
}
return nil
}
func (a *App) buildPostReplies(postId string) (*[]ReplyImportData, *model.AppError) {
var replies []ReplyImportData
replyPosts, err := a.Srv.Store.Post().GetRepliesForExport(postId)
if err != nil {
return nil, err
}
for _, reply := range replyPosts {
replyImportObject := ImportReplyFromPost(reply)
if reply.HasReactions == true {
reactionsOfReply, err := a.BuildPostReactions(reply.Id)
if reply.HasReactions {
replyImportObject.Reactions, err = a.BuildPostReactions(reply.Id)
if err != nil {
return nil, err
}
replyImportObject.Reactions = reactionsOfReply
}
replies = append(replies, *replyImportObject)
}