MM-63545: Fix post reminder off-by-one error (#30553)
We used < which meant we missed sending reminders created for that timestamp, because the job runs on that exact time. Using <= to fix that. https://mattermost.atlassian.net/browse/MM-63545 ```release-note NONE ```
Этот коммит содержится в:
коммит произвёл
GitHub
родитель
26892de25b
Коммит
8faa8b2e56
@@ -3338,7 +3338,7 @@ func (s *SqlPostStore) GetPostReminders(now int64) (_ []*model.PostReminder, err
|
|||||||
|
|
||||||
err = transaction.Select(&reminders, `SELECT PostId, UserId
|
err = transaction.Select(&reminders, `SELECT PostId, UserId
|
||||||
FROM PostReminders
|
FROM PostReminders
|
||||||
WHERE TargetTime < ?`, now)
|
WHERE TargetTime <= ?`, now)
|
||||||
if err != nil && err != sql.ErrNoRows {
|
if err != nil && err != sql.ErrNoRows {
|
||||||
return nil, errors.Wrap(err, "failed to get post reminders")
|
return nil, errors.Wrap(err, "failed to get post reminders")
|
||||||
}
|
}
|
||||||
@@ -3351,7 +3351,7 @@ func (s *SqlPostStore) GetPostReminders(now int64) (_ []*model.PostReminder, err
|
|||||||
// Postgres supports RETURNING * in a DELETE statement, but MySQL doesn't.
|
// Postgres supports RETURNING * in a DELETE statement, but MySQL doesn't.
|
||||||
// So we are stuck with 2 queries. Not taking separate paths for Postgres
|
// So we are stuck with 2 queries. Not taking separate paths for Postgres
|
||||||
// and MySQL for simplicity.
|
// and MySQL for simplicity.
|
||||||
_, err = transaction.Exec(`DELETE from PostReminders WHERE TargetTime < ?`, now)
|
_, err = transaction.Exec(`DELETE from PostReminders WHERE TargetTime <= ?`, now)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errors.Wrap(err, "failed to delete post reminders")
|
return nil, errors.Wrap(err, "failed to delete post reminders")
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5062,12 +5062,12 @@ func testGetPostReminders(t *testing.T, rctx request.CTX, ss store.Store, s SqlS
|
|||||||
require.NoError(t, ss.Post().SetPostReminder(reminder))
|
require.NoError(t, ss.Post().SetPostReminder(reminder))
|
||||||
}
|
}
|
||||||
|
|
||||||
reminders, err := ss.Post().GetPostReminders(102)
|
reminders, err := ss.Post().GetPostReminders(101)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Len(t, reminders, 2)
|
require.Len(t, reminders, 2)
|
||||||
|
|
||||||
// assert one reminder is left
|
// assert one reminder is left
|
||||||
reminders, err = ss.Post().GetPostReminders(103)
|
reminders, err = ss.Post().GetPostReminders(102)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Len(t, reminders, 1)
|
require.Len(t, reminders, 1)
|
||||||
|
|
||||||
|
|||||||
Ссылка в новой задаче
Block a user