MM-55987: Bypass uploading to S3 for local mode mmctl import (#25591)
We directly instruct the server to read from the local filesystem in case the local_mode key is set. There is now no need to upload the file in --local mode and a warning is thrown accordingly. https://mattermost.atlassian.net/browse/MM-55987 ```release-note Now the mmctl bulk import process command in local mode supports processing an import file without actually uploading it to the server. Simply pass the file path to the import file and the server will directly read from it, and pass the --bypass-upload flag. There is no need to use the import upload command. NOTE: all of this is applicable only in local mode. ``` Co-authored-by: Mattermost Build <build@mattermost.com>
Этот коммит содержится в:
коммит произвёл
GitHub
родитель
bd5832609b
Коммит
b946dad78d
@@ -6,12 +6,16 @@ package api4
|
||||
import (
|
||||
"context"
|
||||
"os"
|
||||
"path"
|
||||
"path/filepath"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/stretchr/testify/require"
|
||||
|
||||
"github.com/mattermost/mattermost/server/public/model"
|
||||
"github.com/mattermost/mattermost/server/public/shared/mlog"
|
||||
"github.com/mattermost/mattermost/server/v8/channels/app"
|
||||
"github.com/mattermost/mattermost/server/v8/channels/utils/fileutils"
|
||||
)
|
||||
|
||||
@@ -105,3 +109,41 @@ func TestListImports(t *testing.T) {
|
||||
require.NoError(t, os.RemoveAll(importDir))
|
||||
}, "change import directory")
|
||||
}
|
||||
|
||||
func TestImportInLocalMode(t *testing.T) {
|
||||
th := SetupWithServerOptions(t, []app.Option{app.RunEssentialJobs})
|
||||
defer th.TearDown()
|
||||
|
||||
testsDir, _ := fileutils.FindDir("tests")
|
||||
require.NotEmpty(t, testsDir)
|
||||
|
||||
job := &model.Job{
|
||||
Type: model.JobTypeImportProcess,
|
||||
Data: map[string]string{
|
||||
"import_file": path.Join(testsDir, "import_test.zip"),
|
||||
"local_mode": "true",
|
||||
},
|
||||
}
|
||||
|
||||
received, _, err := th.SystemAdminClient.CreateJob(context.Background(), job)
|
||||
require.NoError(t, err)
|
||||
defer th.App.Srv().Store().Job().Delete(received.Id)
|
||||
|
||||
cnt1, err := th.App.Srv().Store().Post().AnalyticsPostCount(&model.PostCountOptions{UsersPostsOnly: true})
|
||||
require.NoError(t, err)
|
||||
|
||||
var appErr *model.AppError
|
||||
for !(received.Status == model.JobStatusSuccess || received.Status == model.JobStatusError) {
|
||||
received, appErr = th.App.GetJob(th.Context, received.Id)
|
||||
require.Nil(t, appErr)
|
||||
time.Sleep(5 * time.Second)
|
||||
th.Context.Logger().Debug("Job status", mlog.String("status", received.Status))
|
||||
}
|
||||
|
||||
require.Equal(t, model.JobStatusSuccess, received.Status)
|
||||
|
||||
cnt2, err := th.App.Srv().Store().Post().AnalyticsPostCount(&model.PostCountOptions{UsersPostsOnly: true})
|
||||
require.NoError(t, err)
|
||||
// Just a sanity check to ensure new posts are actually added in the system.
|
||||
require.Greater(t, cnt2, cnt1)
|
||||
}
|
||||
|
||||
Ссылка в новой задаче
Block a user