[MM-29951] searchengine/bleve/indexing: use oldest entity creation time instead (#17203)

* searchengine/bleve/indexing: use oldest entity creation time instead

* add test

* fix feature flag

Co-authored-by: Mattermod <mattermod@users.noreply.github.com>
Этот коммит содержится в:
Ibrahim Serdar Acikgoz
2021-05-07 19:03:46 +03:00
коммит произвёл GitHub
родитель ec49112ae0
Коммит b581f65860
20 изменённых файлов: 96 добавлений и 55 удалений

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

@@ -162,17 +162,18 @@ func (worker *BleveIndexerWorker) DoJob(job *model.Job) {
progress.StartAtTime = startInt
progress.LastEntityTime = progress.StartAtTime
} else {
// Set start time to oldest post in the database.
oldestPost, err := worker.jobServer.Store.Post().GetOldest()
// Set start time to oldest entity in the database.
// A user or a channel may be created before any post.
oldestEntityCreationTime, err := worker.jobServer.Store.Post().GetOldestEntityCreationTime()
if err != nil {
mlog.Error("Worker: Failed to fetch oldest post for job.", mlog.String("workername", worker.name), mlog.String("job_id", job.Id), mlog.String("start_time", startString), mlog.Err(err))
appError := model.NewAppError("BleveIndexerWorker", "bleveengine.indexer.do_job.get_oldest_post.error", nil, err.Error(), http.StatusInternalServerError)
mlog.Error("Worker: Failed to fetch oldest entity for job.", mlog.String("workername", worker.name), mlog.String("job_id", job.Id), mlog.String("start_time", startString), mlog.Err(err))
appError := model.NewAppError("BleveIndexerWorker", "bleveengine.indexer.do_job.get_oldest_entity.error", nil, err.Error(), http.StatusInternalServerError)
if err := worker.jobServer.SetJobError(job, appError); err != nil {
mlog.Error("Worker: Failed to set job error", mlog.String("workername", worker.name), mlog.String("job_id", job.Id), mlog.Err(err), mlog.NamedErr("set_error", appError))
}
return
}
progress.StartAtTime = oldestPost.CreateAt
progress.StartAtTime = oldestEntityCreationTime
progress.LastEntityTime = progress.StartAtTime
}

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

@@ -0,0 +1,68 @@
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.
package ebleveengine
import (
"errors"
"io/ioutil"
"os"
"testing"
"github.com/mattermost/mattermost-server/v5/jobs"
"github.com/mattermost/mattermost-server/v5/model"
"github.com/mattermost/mattermost-server/v5/services/searchengine/bleveengine"
"github.com/mattermost/mattermost-server/v5/store/storetest"
"github.com/mattermost/mattermost-server/v5/utils/testutils"
"github.com/stretchr/testify/require"
)
func TestBleveIndexer(t *testing.T) {
mockStore := &storetest.Store{}
defer mockStore.AssertExpectations(t)
t.Run("Call GetOldestEntityCreationTime for the first indexing call", func(t *testing.T) {
job := &model.Job{
Id: model.NewId(),
CreateAt: model.GetMillis(),
Status: model.JOB_STATUS_PENDING,
Type: model.JOB_TYPE_BLEVE_POST_INDEXING,
}
mockStore.JobStore.On("UpdateStatusOptimistically", job.Id, model.JOB_STATUS_PENDING, model.JOB_STATUS_IN_PROGRESS).Return(true, nil)
mockStore.JobStore.On("UpdateOptimistically", job, model.JOB_STATUS_IN_PROGRESS).Return(true, nil)
mockStore.PostStore.On("GetOldestEntityCreationTime").Return(int64(1), errors.New("")) // intentionally return error to return from function
tempDir, err := ioutil.TempDir("", "setupConfigFile")
require.NoError(t, err)
t.Cleanup(func() {
os.RemoveAll(tempDir)
})
cfg := &model.Config{
BleveSettings: model.BleveSettings{
EnableIndexing: model.NewBool(true),
IndexDir: model.NewString(tempDir),
},
}
jobServer := &jobs.JobServer{
Store: mockStore,
ConfigService: &testutils.StaticConfigService{
Cfg: cfg,
},
}
bleveEngine := bleveengine.NewBleveEngine(cfg, jobServer)
aErr := bleveEngine.Start()
require.Nil(t, aErr)
worker := &BleveIndexerWorker{
jobServer: jobServer,
engine: bleveEngine,
}
worker.DoJob(job)
})
}