4
4
"context"
5
5
"database/sql"
6
6
"fmt"
7
- "time"
8
7
9
8
"github.com/daocloud/crproxy/queue/model"
10
9
)
@@ -113,12 +112,12 @@ func (m *Message) UpdatePriorityByID(ctx context.Context, id int64, priority int
113
112
}
114
113
115
114
const deleteMessageByIDSQL = `
116
- UPDATE messages SET delete_at = NOW() WHERE id = ? AND delete_at IS NULL
115
+ UPDATE messages SET delete_at = NOW(), data = ? WHERE id = ? AND delete_at IS NULL
117
116
`
118
117
119
118
func (m * Message ) DeleteByID (ctx context.Context , id int64 ) error {
120
119
db := GetDB (ctx )
121
- _ , err := db .ExecContext (ctx , deleteMessageByIDSQL , id )
120
+ _ , err := db .ExecContext (ctx , deleteMessageByIDSQL , model. MessageAttr {}, id )
122
121
if err != nil {
123
122
return fmt .Errorf ("failed to delete message: %w" , err )
124
123
}
@@ -153,16 +152,29 @@ func (m *Message) List(ctx context.Context) ([]model.Message, error) {
153
152
return messages , nil
154
153
}
155
154
155
+ const cleanUpSQL = `
156
+ DELETE FROM messages WHERE delete_at IS NOT NULL
157
+ `
158
+
159
+ func (m * Message ) CleanUp (ctx context.Context ) error {
160
+ db := GetDB (ctx )
161
+ _ , err := db .ExecContext (ctx , cleanUpSQL )
162
+ if err != nil {
163
+ return fmt .Errorf ("failed to clean up messages: %w" , err )
164
+ }
165
+ return nil
166
+ }
167
+
156
168
const getCompletedAndFailedMessagesSQL = `
157
169
SELECT id, content, priority, status, data, last_heartbeat
158
170
FROM messages
159
171
WHERE (status = ? OR status = ?)
160
- AND last_heartbeat < ? AND delete_at IS NULL
172
+ AND last_heartbeat < NOW() - INTERVAL 1 HOUR AND delete_at IS NULL
161
173
`
162
174
163
- func (m * Message ) GetCompletedAndFailed (ctx context.Context , threshold time. Time ) ([]model.Message , error ) {
175
+ func (m * Message ) GetCompletedAndFailed (ctx context.Context ) ([]model.Message , error ) {
164
176
db := GetDB (ctx )
165
- rows , err := db .QueryContext (ctx , getCompletedAndFailedMessagesSQL , model .StatusCompleted , model .StatusFailed , threshold )
177
+ rows , err := db .QueryContext (ctx , getCompletedAndFailedMessagesSQL , model .StatusCompleted , model .StatusFailed )
166
178
if err != nil {
167
179
return nil , fmt .Errorf ("failed to get completed and failed messages: %w" , err )
168
180
}
@@ -188,12 +200,12 @@ const getStaleMessagesSQL = `
188
200
SELECT id, content, priority, status, data, last_heartbeat
189
201
FROM messages
190
202
WHERE status = ?
191
- AND last_heartbeat < ? AND delete_at IS NULL
203
+ AND last_heartbeat < NOW() - INTERVAL 1 MINUTE AND delete_at IS NULL
192
204
`
193
205
194
- func (m * Message ) GetStale (ctx context.Context , threshold time. Time ) ([]model.Message , error ) {
206
+ func (m * Message ) GetStale (ctx context.Context ) ([]model.Message , error ) {
195
207
db := GetDB (ctx )
196
- rows , err := db .QueryContext (ctx , getStaleMessagesSQL , model .StatusProcessing , threshold )
208
+ rows , err := db .QueryContext (ctx , getStaleMessagesSQL , model .StatusProcessing )
197
209
if err != nil {
198
210
return nil , fmt .Errorf ("failed to get stale messages: %w" , err )
199
211
}
0 commit comments