MM-49354: Make compliance export query cancellable (#21943)
We accept a context that can cancel the query. This allows us to exit a job faster. ```release-note Compliance export job can now cancel the SQL query execution during server shutdown which will allow the job to exit faster. ``` Co-authored-by: Mattermod <mattermod@users.noreply.github.com>
Этот коммит содержится в:
коммит произвёл
GitHub
родитель
40cd6b1656
Коммит
1e02b99bf1
@@ -4,6 +4,7 @@
|
||||
package storetest
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"testing"
|
||||
"time"
|
||||
@@ -399,7 +400,7 @@ func testMessageExportPublicChannel(t *testing.T, ss store.Store) {
|
||||
|
||||
// get the starting number of message export entries
|
||||
startTime := model.GetMillis()
|
||||
messages, _, err := ss.Compliance().MessageExport(model.MessageExportCursor{LastPostUpdateAt: startTime - 10}, 10)
|
||||
messages, _, err := ss.Compliance().MessageExport(context.Background(), model.MessageExportCursor{LastPostUpdateAt: startTime - 10}, 10)
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, 0, len(messages))
|
||||
|
||||
@@ -469,7 +470,7 @@ func testMessageExportPublicChannel(t *testing.T, ss store.Store) {
|
||||
|
||||
// fetch the message exports for both posts that user1 sent
|
||||
messageExportMap := map[string]model.MessageExport{}
|
||||
messages, _, err = ss.Compliance().MessageExport(model.MessageExportCursor{LastPostUpdateAt: startTime - 10}, 10)
|
||||
messages, _, err = ss.Compliance().MessageExport(context.Background(), model.MessageExportCursor{LastPostUpdateAt: startTime - 10}, 10)
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, 2, len(messages))
|
||||
|
||||
@@ -503,7 +504,7 @@ func testMessageExportPrivateChannel(t *testing.T, ss store.Store) {
|
||||
|
||||
// get the starting number of message export entries
|
||||
startTime := model.GetMillis()
|
||||
messages, _, err := ss.Compliance().MessageExport(model.MessageExportCursor{LastPostUpdateAt: startTime - 10}, 10)
|
||||
messages, _, err := ss.Compliance().MessageExport(context.Background(), model.MessageExportCursor{LastPostUpdateAt: startTime - 10}, 10)
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, 0, len(messages))
|
||||
|
||||
@@ -573,7 +574,7 @@ func testMessageExportPrivateChannel(t *testing.T, ss store.Store) {
|
||||
|
||||
// fetch the message exports for both posts that user1 sent
|
||||
messageExportMap := map[string]model.MessageExport{}
|
||||
messages, _, err = ss.Compliance().MessageExport(model.MessageExportCursor{LastPostUpdateAt: startTime - 10}, 10)
|
||||
messages, _, err = ss.Compliance().MessageExport(context.Background(), model.MessageExportCursor{LastPostUpdateAt: startTime - 10}, 10)
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, 2, len(messages))
|
||||
|
||||
@@ -609,7 +610,7 @@ func testMessageExportDirectMessageChannel(t *testing.T, ss store.Store) {
|
||||
|
||||
// get the starting number of message export entries
|
||||
startTime := model.GetMillis()
|
||||
messages, _, err := ss.Compliance().MessageExport(model.MessageExportCursor{LastPostUpdateAt: startTime - 10}, 10)
|
||||
messages, _, err := ss.Compliance().MessageExport(context.Background(), model.MessageExportCursor{LastPostUpdateAt: startTime - 10}, 10)
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, 0, len(messages))
|
||||
|
||||
@@ -664,7 +665,7 @@ func testMessageExportDirectMessageChannel(t *testing.T, ss store.Store) {
|
||||
|
||||
// fetch the message export for the post that user1 sent
|
||||
messageExportMap := map[string]model.MessageExport{}
|
||||
messages, _, err = ss.Compliance().MessageExport(model.MessageExportCursor{LastPostUpdateAt: startTime - 10}, 10)
|
||||
messages, _, err = ss.Compliance().MessageExport(context.Background(), model.MessageExportCursor{LastPostUpdateAt: startTime - 10}, 10)
|
||||
require.NoError(t, err)
|
||||
|
||||
assert.Equal(t, 1, len(messages))
|
||||
@@ -690,7 +691,7 @@ func testMessageExportGroupMessageChannel(t *testing.T, ss store.Store) {
|
||||
|
||||
// get the starting number of message export entries
|
||||
startTime := model.GetMillis()
|
||||
messages, _, err := ss.Compliance().MessageExport(model.MessageExportCursor{LastPostUpdateAt: startTime - 10}, 10)
|
||||
messages, _, err := ss.Compliance().MessageExport(context.Background(), model.MessageExportCursor{LastPostUpdateAt: startTime - 10}, 10)
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, 0, len(messages))
|
||||
|
||||
@@ -762,7 +763,7 @@ func testMessageExportGroupMessageChannel(t *testing.T, ss store.Store) {
|
||||
|
||||
// fetch the message export for the post that user1 sent
|
||||
messageExportMap := map[string]model.MessageExport{}
|
||||
messages, _, err = ss.Compliance().MessageExport(model.MessageExportCursor{LastPostUpdateAt: startTime - 10}, 10)
|
||||
messages, _, err = ss.Compliance().MessageExport(context.Background(), model.MessageExportCursor{LastPostUpdateAt: startTime - 10}, 10)
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, 1, len(messages))
|
||||
|
||||
@@ -787,7 +788,7 @@ func testEditExportMessage(t *testing.T, ss store.Store) {
|
||||
defer cleanupStoreState(t, ss)
|
||||
// get the starting number of message export entries
|
||||
startTime := model.GetMillis()
|
||||
messages, _, err := ss.Compliance().MessageExport(model.MessageExportCursor{LastPostUpdateAt: startTime - 1}, 10)
|
||||
messages, _, err := ss.Compliance().MessageExport(context.Background(), model.MessageExportCursor{LastPostUpdateAt: startTime - 1}, 10)
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, 0, len(messages))
|
||||
|
||||
@@ -842,7 +843,7 @@ func testEditExportMessage(t *testing.T, ss store.Store) {
|
||||
require.NoError(t, err)
|
||||
|
||||
// fetch the message exports from the start
|
||||
messages, _, err = ss.Compliance().MessageExport(model.MessageExportCursor{LastPostUpdateAt: startTime - 1}, 10)
|
||||
messages, _, err = ss.Compliance().MessageExport(context.Background(), model.MessageExportCursor{LastPostUpdateAt: startTime - 1}, 10)
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, 2, len(messages))
|
||||
|
||||
@@ -879,7 +880,7 @@ func testEditAfterExportMessage(t *testing.T, ss store.Store) {
|
||||
defer cleanupStoreState(t, ss)
|
||||
// get the starting number of message export entries
|
||||
startTime := model.GetMillis()
|
||||
messages, _, err := ss.Compliance().MessageExport(model.MessageExportCursor{LastPostUpdateAt: startTime - 1}, 10)
|
||||
messages, _, err := ss.Compliance().MessageExport(context.Background(), model.MessageExportCursor{LastPostUpdateAt: startTime - 1}, 10)
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, 0, len(messages))
|
||||
|
||||
@@ -927,7 +928,7 @@ func testEditAfterExportMessage(t *testing.T, ss store.Store) {
|
||||
require.NoError(t, err)
|
||||
|
||||
// fetch the message exports from the start
|
||||
messages, _, err = ss.Compliance().MessageExport(model.MessageExportCursor{LastPostUpdateAt: startTime - 1}, 10)
|
||||
messages, _, err = ss.Compliance().MessageExport(context.Background(), model.MessageExportCursor{LastPostUpdateAt: startTime - 1}, 10)
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, 1, len(messages))
|
||||
|
||||
@@ -953,7 +954,7 @@ func testEditAfterExportMessage(t *testing.T, ss store.Store) {
|
||||
require.NoError(t, err)
|
||||
|
||||
// fetch the message exports after edit
|
||||
messages, _, err = ss.Compliance().MessageExport(model.MessageExportCursor{LastPostUpdateAt: postEditTime - 1}, 10)
|
||||
messages, _, err = ss.Compliance().MessageExport(context.Background(), model.MessageExportCursor{LastPostUpdateAt: postEditTime - 1}, 10)
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, 2, len(messages))
|
||||
|
||||
@@ -990,7 +991,7 @@ func testDeleteExportMessage(t *testing.T, ss store.Store) {
|
||||
defer cleanupStoreState(t, ss)
|
||||
// get the starting number of message export entries
|
||||
startTime := model.GetMillis()
|
||||
messages, _, err := ss.Compliance().MessageExport(model.MessageExportCursor{LastPostUpdateAt: startTime - 1}, 10)
|
||||
messages, _, err := ss.Compliance().MessageExport(context.Background(), model.MessageExportCursor{LastPostUpdateAt: startTime - 1}, 10)
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, 0, len(messages))
|
||||
|
||||
@@ -1043,7 +1044,7 @@ func testDeleteExportMessage(t *testing.T, ss store.Store) {
|
||||
require.NoError(t, err)
|
||||
|
||||
// fetch the message exports from the start
|
||||
messages, _, err = ss.Compliance().MessageExport(model.MessageExportCursor{LastPostUpdateAt: startTime - 1}, 10)
|
||||
messages, _, err = ss.Compliance().MessageExport(context.Background(), model.MessageExportCursor{LastPostUpdateAt: startTime - 1}, 10)
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, 1, len(messages))
|
||||
|
||||
@@ -1075,7 +1076,7 @@ func testDeleteAfterExportMessage(t *testing.T, ss store.Store) {
|
||||
defer cleanupStoreState(t, ss)
|
||||
// get the starting number of message export entries
|
||||
startTime := model.GetMillis()
|
||||
messages, _, err := ss.Compliance().MessageExport(model.MessageExportCursor{LastPostUpdateAt: startTime - 1}, 10)
|
||||
messages, _, err := ss.Compliance().MessageExport(context.Background(), model.MessageExportCursor{LastPostUpdateAt: startTime - 1}, 10)
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, 0, len(messages))
|
||||
|
||||
@@ -1123,7 +1124,7 @@ func testDeleteAfterExportMessage(t *testing.T, ss store.Store) {
|
||||
require.NoError(t, err)
|
||||
|
||||
// fetch the message exports from the start
|
||||
messages, _, err = ss.Compliance().MessageExport(model.MessageExportCursor{LastPostUpdateAt: startTime - 1}, 10)
|
||||
messages, _, err = ss.Compliance().MessageExport(context.Background(), model.MessageExportCursor{LastPostUpdateAt: startTime - 1}, 10)
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, 1, len(messages))
|
||||
|
||||
@@ -1146,7 +1147,7 @@ func testDeleteAfterExportMessage(t *testing.T, ss store.Store) {
|
||||
require.NoError(t, err)
|
||||
|
||||
// fetch the message exports after delete
|
||||
messages, _, err = ss.Compliance().MessageExport(model.MessageExportCursor{LastPostUpdateAt: postDeleteTime - 1}, 10)
|
||||
messages, _, err = ss.Compliance().MessageExport(context.Background(), model.MessageExportCursor{LastPostUpdateAt: postDeleteTime - 1}, 10)
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, 1, len(messages))
|
||||
|
||||
|
||||
@@ -5,6 +5,8 @@
|
||||
package mocks
|
||||
|
||||
import (
|
||||
context "context"
|
||||
|
||||
model "github.com/mattermost/mattermost-server/v6/model"
|
||||
mock "github.com/stretchr/testify/mock"
|
||||
)
|
||||
@@ -90,13 +92,13 @@ func (_m *ComplianceStore) GetAll(offset int, limit int) (model.Compliances, err
|
||||
return r0, r1
|
||||
}
|
||||
|
||||
// MessageExport provides a mock function with given fields: cursor, limit
|
||||
func (_m *ComplianceStore) MessageExport(cursor model.MessageExportCursor, limit int) ([]*model.MessageExport, model.MessageExportCursor, error) {
|
||||
ret := _m.Called(cursor, limit)
|
||||
// MessageExport provides a mock function with given fields: ctx, cursor, limit
|
||||
func (_m *ComplianceStore) MessageExport(ctx context.Context, cursor model.MessageExportCursor, limit int) ([]*model.MessageExport, model.MessageExportCursor, error) {
|
||||
ret := _m.Called(ctx, cursor, limit)
|
||||
|
||||
var r0 []*model.MessageExport
|
||||
if rf, ok := ret.Get(0).(func(model.MessageExportCursor, int) []*model.MessageExport); ok {
|
||||
r0 = rf(cursor, limit)
|
||||
if rf, ok := ret.Get(0).(func(context.Context, model.MessageExportCursor, int) []*model.MessageExport); ok {
|
||||
r0 = rf(ctx, cursor, limit)
|
||||
} else {
|
||||
if ret.Get(0) != nil {
|
||||
r0 = ret.Get(0).([]*model.MessageExport)
|
||||
@@ -104,15 +106,15 @@ func (_m *ComplianceStore) MessageExport(cursor model.MessageExportCursor, limit
|
||||
}
|
||||
|
||||
var r1 model.MessageExportCursor
|
||||
if rf, ok := ret.Get(1).(func(model.MessageExportCursor, int) model.MessageExportCursor); ok {
|
||||
r1 = rf(cursor, limit)
|
||||
if rf, ok := ret.Get(1).(func(context.Context, model.MessageExportCursor, int) model.MessageExportCursor); ok {
|
||||
r1 = rf(ctx, cursor, limit)
|
||||
} else {
|
||||
r1 = ret.Get(1).(model.MessageExportCursor)
|
||||
}
|
||||
|
||||
var r2 error
|
||||
if rf, ok := ret.Get(2).(func(model.MessageExportCursor, int) error); ok {
|
||||
r2 = rf(cursor, limit)
|
||||
if rf, ok := ret.Get(2).(func(context.Context, model.MessageExportCursor, int) error); ok {
|
||||
r2 = rf(ctx, cursor, limit)
|
||||
} else {
|
||||
r2 = ret.Error(2)
|
||||
}
|
||||
|
||||
Ссылка в новой задаче
Block a user