[MM-57991] Add log message about deleted rows from Data Retention job (#26847)

Этот коммит содержится в:
Ben Schumacher
2024-10-05 11:39:43 +02:00
коммит произвёл GitHub
родитель 5a7385295c
Коммит 88a805351e
10 изменённых файлов: 59 добавлений и 33 удалений

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

@@ -7648,7 +7648,7 @@ func (s *OpenTracingLayerReactionStore) DeleteAllWithEmojiName(emojiName string)
return err
}
func (s *OpenTracingLayerReactionStore) DeleteOrphanedRowsByIds(r *model.RetentionIdsForDeletion) error {
func (s *OpenTracingLayerReactionStore) DeleteOrphanedRowsByIds(r *model.RetentionIdsForDeletion) (int64, error) {
origCtx := s.Root.Store.Context()
span, newCtx := tracing.StartSpanWithParentByContext(s.Root.Store.Context(), "ReactionStore.DeleteOrphanedRowsByIds")
s.Root.Store.SetContext(newCtx)
@@ -7657,13 +7657,13 @@ func (s *OpenTracingLayerReactionStore) DeleteOrphanedRowsByIds(r *model.Retenti
}()
defer span.Finish()
err := s.ReactionStore.DeleteOrphanedRowsByIds(r)
result, err := s.ReactionStore.DeleteOrphanedRowsByIds(r)
if err != nil {
span.LogFields(spanlog.Error(err))
ext.Error.Set(span, true)
}
return err
return result, err
}
func (s *OpenTracingLayerReactionStore) ExistsOnPost(postId string, emojiName string) (bool, error) {

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

@@ -8699,21 +8699,21 @@ func (s *RetryLayerReactionStore) DeleteAllWithEmojiName(emojiName string) error
}
func (s *RetryLayerReactionStore) DeleteOrphanedRowsByIds(r *model.RetentionIdsForDeletion) error {
func (s *RetryLayerReactionStore) DeleteOrphanedRowsByIds(r *model.RetentionIdsForDeletion) (int64, error) {
tries := 0
for {
err := s.ReactionStore.DeleteOrphanedRowsByIds(r)
result, err := s.ReactionStore.DeleteOrphanedRowsByIds(r)
if err == nil {
return nil
return result, nil
}
if !isRepeatableError(err) {
return err
return result, err
}
tries++
if tries >= 3 {
err = errors.Wrap(err, "giving up after 3 consecutive repeatable transaction failures")
return err
return result, err
}
timepkg.Sleep(100 * timepkg.Millisecond)
}

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

@@ -330,10 +330,10 @@ func (s SqlReactionStore) PermanentDeleteByUser(userId string) error {
return nil
}
func (s *SqlReactionStore) DeleteOrphanedRowsByIds(r *model.RetentionIdsForDeletion) error {
func (s *SqlReactionStore) DeleteOrphanedRowsByIds(r *model.RetentionIdsForDeletion) (int64, error) {
txn, err := s.GetMasterX().Beginx()
if err != nil {
return err
return 0, err
}
defer finalizeTransactionX(txn, &err)
@@ -343,18 +343,24 @@ func (s *SqlReactionStore) DeleteOrphanedRowsByIds(r *model.RetentionIdsForDelet
sq.Eq{"PostId": r.Ids},
)
_, err = txn.ExecBuilder(query)
sqlResult, err := txn.ExecBuilder(query)
if err != nil {
return errors.Wrapf(err, "failed to delete orphaned reactions with RetentionIdsForDeletion Id=%s", r.Id)
return 0, errors.Wrapf(err, "failed to delete orphaned reactions with RetentionIdsForDeletion Id=%s", r.Id)
}
err = deleteFromRetentionIdsTx(txn, r.Id)
if err != nil {
return err
return 0, err
}
if err = txn.Commit(); err != nil {
return err
return 0, err
}
return nil
rowsAffected, err := sqlResult.RowsAffected()
if err != nil {
return 0, errors.Wrap(err, "unable to retrieve rows affected")
}
return rowsAffected, nil
}
func (s *SqlReactionStore) PermanentDeleteBatch(endTime int64, limit int64) (int64, error) {

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

@@ -1152,9 +1152,11 @@ func getDeleteQueriesForMySQL(r RetentionPolicyBatchDeletionInfo, query string)
return fmt.Sprintf("DELETE %s FROM %s INNER JOIN (%s) AS A ON %s", r.Table, r.Table, query, joinClause)
}
func deleteFromRetentionIdsTx(txn *sqlxTxWrapper, id string) (err error) {
if _, err := txn.Exec("DELETE FROM RetentionIdsForDeletion WHERE Id = ?", id); err != nil {
func deleteFromRetentionIdsTx(txn *sqlxTxWrapper, id string) error {
_, err := txn.Exec("DELETE FROM RetentionIdsForDeletion WHERE Id = ?", id)
if err != nil {
return errors.Wrap(err, "Failed to delete from RetentionIdsForDeletion")
}
return nil
}

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

@@ -751,7 +751,7 @@ type ReactionStore interface {
DeleteAllWithEmojiName(emojiName string) error
BulkGetForPosts(postIds []string) ([]*model.Reaction, error)
GetSingle(userID, postID, remoteID, emojiName string) (*model.Reaction, error)
DeleteOrphanedRowsByIds(r *model.RetentionIdsForDeletion) error
DeleteOrphanedRowsByIds(r *model.RetentionIdsForDeletion) (int64, error)
PermanentDeleteBatch(endTime int64, limit int64) (int64, error)
PermanentDeleteByUser(userID string) error
}

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

@@ -93,21 +93,31 @@ func (_m *ReactionStore) DeleteAllWithEmojiName(emojiName string) error {
}
// DeleteOrphanedRowsByIds provides a mock function with given fields: r
func (_m *ReactionStore) DeleteOrphanedRowsByIds(r *model.RetentionIdsForDeletion) error {
func (_m *ReactionStore) DeleteOrphanedRowsByIds(r *model.RetentionIdsForDeletion) (int64, error) {
ret := _m.Called(r)
if len(ret) == 0 {
panic("no return value specified for DeleteOrphanedRowsByIds")
}
var r0 error
if rf, ok := ret.Get(0).(func(*model.RetentionIdsForDeletion) error); ok {
var r0 int64
var r1 error
if rf, ok := ret.Get(0).(func(*model.RetentionIdsForDeletion) (int64, error)); ok {
return rf(r)
}
if rf, ok := ret.Get(0).(func(*model.RetentionIdsForDeletion) int64); ok {
r0 = rf(r)
} else {
r0 = ret.Error(0)
r0 = ret.Get(0).(int64)
}
return r0
if rf, ok := ret.Get(1).(func(*model.RetentionIdsForDeletion) error); ok {
r1 = rf(r)
} else {
r1 = ret.Error(1)
}
return r0, r1
}
// ExistsOnPost provides a mock function with given fields: postId, emojiName

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

@@ -4015,8 +4015,9 @@ func testPostStorePermanentDeleteBatch(t *testing.T, rctx request.CTX, ss store.
require.Equal(t, 1, len(rows))
require.Equal(t, 2, len(rows[0].Ids))
// Clean up retention ids table
err = ss.Reaction().DeleteOrphanedRowsByIds(rows[0])
deleted, err = ss.Reaction().DeleteOrphanedRowsByIds(rows[0])
require.NoError(t, err)
require.Equal(t, int64(0), deleted)
t.Run("with pagination", func(t *testing.T) {
for i := 0; i < 3; i++ {
@@ -4040,8 +4041,9 @@ func testPostStorePermanentDeleteBatch(t *testing.T, rctx request.CTX, ss store.
require.Equal(t, 2, len(rows[0].Ids))
// Clean up retention ids table
err = ss.Reaction().DeleteOrphanedRowsByIds(rows[0])
deleted, err = ss.Reaction().DeleteOrphanedRowsByIds(rows[0])
require.NoError(t, err)
require.Equal(t, int64(0), deleted)
deleted, _, err = ss.Post().PermanentDeleteBatchForRetentionPolicies(0, 2, 2, cursor)
require.NoError(t, err)
@@ -4053,8 +4055,9 @@ func testPostStorePermanentDeleteBatch(t *testing.T, rctx request.CTX, ss store.
require.Equal(t, 1, len(rows[0].Ids))
// Clean up retention ids table
err = ss.Reaction().DeleteOrphanedRowsByIds(rows[0])
deleted, err = ss.Reaction().DeleteOrphanedRowsByIds(rows[0])
require.NoError(t, err)
require.Equal(t, int64(0), deleted)
})
t.Run("with data retention policies", func(t *testing.T) {
@@ -4127,8 +4130,9 @@ func testPostStorePermanentDeleteBatch(t *testing.T, rctx request.CTX, ss store.
rows, err = ss.RetentionPolicy().GetIdsForDeletionByTableName("Posts", 1000)
require.NoError(t, err)
for _, row := range rows {
err = ss.Reaction().DeleteOrphanedRowsByIds(row)
deleted, err = ss.Reaction().DeleteOrphanedRowsByIds(row)
require.NoError(t, err)
require.Equal(t, int64(0), deleted)
}
})
@@ -4203,8 +4207,9 @@ func testPostStorePermanentDeleteBatch(t *testing.T, rctx request.CTX, ss store.
// Clean up retention ids table
for _, row := range rows {
err = ss.Reaction().DeleteOrphanedRowsByIds(row)
deleted, err = ss.Reaction().DeleteOrphanedRowsByIds(row)
require.NoError(t, err)
require.Equal(t, int64(0), deleted)
}
})
}

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

@@ -390,8 +390,9 @@ func testPreferenceDeleteOrphanedRows(t *testing.T, rctx request.CTX, ss store.S
require.Equal(t, 1, len(rows))
// Clean up retention ids table
err = ss.Reaction().DeleteOrphanedRowsByIds(rows[0])
deleted, err := ss.Reaction().DeleteOrphanedRowsByIds(rows[0])
require.NoError(t, err)
require.Equal(t, int64(0), deleted)
_, nErr = ss.Preference().DeleteOrphanedRows(limit)
assert.NoError(t, nErr)

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

@@ -714,8 +714,10 @@ func testReactionStorePermanentDeleteBatch(t *testing.T, rctx request.CTX, ss st
require.Contains(t, rows[0].Ids, olderPost.Id)
for _, row := range rows {
err = ss.Reaction().DeleteOrphanedRowsByIds(row)
var deleted int64
deleted, err = ss.Reaction().DeleteOrphanedRowsByIds(row)
require.NoError(t, err)
require.Equal(t, int64(2), deleted)
}
rows, err = ss.RetentionPolicy().GetIdsForDeletionByTableName("Posts", 1000)

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

@@ -6905,10 +6905,10 @@ func (s *TimerLayerReactionStore) DeleteAllWithEmojiName(emojiName string) error
return err
}
func (s *TimerLayerReactionStore) DeleteOrphanedRowsByIds(r *model.RetentionIdsForDeletion) error {
func (s *TimerLayerReactionStore) DeleteOrphanedRowsByIds(r *model.RetentionIdsForDeletion) (int64, error) {
start := time.Now()
err := s.ReactionStore.DeleteOrphanedRowsByIds(r)
result, err := s.ReactionStore.DeleteOrphanedRowsByIds(r)
elapsed := float64(time.Since(start)) / float64(time.Second)
if s.Root.Metrics != nil {
@@ -6918,7 +6918,7 @@ func (s *TimerLayerReactionStore) DeleteOrphanedRowsByIds(r *model.RetentionIdsF
}
s.Root.Metrics.ObserveStoreMethodDuration("ReactionStore.DeleteOrphanedRowsByIds", success, elapsed)
}
return err
return result, err
}
func (s *TimerLayerReactionStore) ExistsOnPost(postId string, emojiName string) (bool, error) {