Skip to content

Commit bf6f98f

Browse files
committed
Fix
1 parent f12d7ab commit bf6f98f

File tree

5 files changed

+40
-19
lines changed

5 files changed

+40
-19
lines changed

gateway/manifest.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -109,10 +109,10 @@ func (c *Gateway) cacheManifest(info *PathInfo) (int, error) {
109109
cachedDigest, err := c.cache.DigestManifest(ctx, info.Host, info.Image, info.Manifests)
110110
if err == nil {
111111
if cachedDigest != digest {
112-
msg := fmt.Sprintf("%s/%s:%s", info.Host, info.Image, digest)
112+
msg := fmt.Sprintf("%s/%s:%s", info.Host, info.Image, info.Manifests)
113113
_, err := c.queueClient.Create(context.Background(), msg, 0)
114114
if err != nil {
115-
c.logger.Warn("failed add message to queue", "msg", msg, "error", err)
115+
c.logger.Warn("failed add message to queue", "msg", msg, "digest", digest, "error", err)
116116
} else {
117117
c.logger.Info("Add message to queue", "msg", msg, "digest", digest)
118118
}

queue/client/client.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ func (c *MessageClient) Create(ctx context.Context, content string, priority int
8585
}
8686
defer resp.Body.Close()
8787

88-
if resp.StatusCode != http.StatusCreated {
88+
if resp.StatusCode != http.StatusCreated && resp.StatusCode != http.StatusOK {
8989
return MessageResponse{}, handleErrorResponse(resp)
9090
}
9191

queue/controller/message.go

+7-2
Original file line numberDiff line numberDiff line change
@@ -230,7 +230,7 @@ func (mc *MessageController) Schedule(ctx context.Context, logger *slog.Logger)
230230
case <-ctx.Done():
231231
return
232232
case <-ticker.C:
233-
staleList, err := mc.messageService.GetStale(ctx, time.Now().Add(-time.Minute))
233+
staleList, err := mc.messageService.GetStale(ctx)
234234
if err != nil {
235235
logger.Error("ReleaseStale", "error", err)
236236
} else {
@@ -246,7 +246,7 @@ func (mc *MessageController) Schedule(ctx context.Context, logger *slog.Logger)
246246
}
247247
}
248248

249-
cleanList, err := mc.messageService.GetCompletedAndFailed(ctx, time.Now().Add(-time.Hour))
249+
cleanList, err := mc.messageService.GetCompletedAndFailed(ctx)
250250
if err != nil {
251251
logger.Error("DeleteCompletedAndFailed", "error", err)
252252
} else {
@@ -257,6 +257,11 @@ func (mc *MessageController) Schedule(ctx context.Context, logger *slog.Logger)
257257
}
258258
}
259259
}
260+
261+
err = mc.messageService.CleanUp(ctx)
262+
if err != nil {
263+
logger.Error("CleanUp", "error", err)
264+
}
260265
}
261266
}
262267
}

queue/dao/messgae.go

+21-9
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import (
44
"context"
55
"database/sql"
66
"fmt"
7-
"time"
87

98
"github.com/daocloud/crproxy/queue/model"
109
)
@@ -113,12 +112,12 @@ func (m *Message) UpdatePriorityByID(ctx context.Context, id int64, priority int
113112
}
114113

115114
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
117116
`
118117

119118
func (m *Message) DeleteByID(ctx context.Context, id int64) error {
120119
db := GetDB(ctx)
121-
_, err := db.ExecContext(ctx, deleteMessageByIDSQL, id)
120+
_, err := db.ExecContext(ctx, deleteMessageByIDSQL, model.MessageAttr{}, id)
122121
if err != nil {
123122
return fmt.Errorf("failed to delete message: %w", err)
124123
}
@@ -153,16 +152,29 @@ func (m *Message) List(ctx context.Context) ([]model.Message, error) {
153152
return messages, nil
154153
}
155154

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+
156168
const getCompletedAndFailedMessagesSQL = `
157169
SELECT id, content, priority, status, data, last_heartbeat
158170
FROM messages
159171
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
161173
`
162174

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) {
164176
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)
166178
if err != nil {
167179
return nil, fmt.Errorf("failed to get completed and failed messages: %w", err)
168180
}
@@ -188,12 +200,12 @@ const getStaleMessagesSQL = `
188200
SELECT id, content, priority, status, data, last_heartbeat
189201
FROM messages
190202
WHERE status = ?
191-
AND last_heartbeat < ? AND delete_at IS NULL
203+
AND last_heartbeat < NOW() - INTERVAL 1 MINUTE AND delete_at IS NULL
192204
`
193205

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) {
195207
db := GetDB(ctx)
196-
rows, err := db.QueryContext(ctx, getStaleMessagesSQL, model.StatusProcessing, threshold)
208+
rows, err := db.QueryContext(ctx, getStaleMessagesSQL, model.StatusProcessing)
197209
if err != nil {
198210
return nil, fmt.Errorf("failed to get stale messages: %w", err)
199211
}

queue/service/message.go

+9-5
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import (
44
"context"
55
"database/sql"
66
"fmt"
7-
"time"
87

98
"github.com/daocloud/crproxy/queue/dao"
109
"github.com/daocloud/crproxy/queue/model"
@@ -124,14 +123,19 @@ func (s *MessageService) Cancel(ctx context.Context, id int64, lease string) err
124123
return nil
125124
}
126125

127-
func (s *MessageService) GetCompletedAndFailed(ctx context.Context, threshold time.Time) ([]model.Message, error) {
126+
func (s *MessageService) CleanUp(ctx context.Context) error {
128127
ctx = dao.WithDB(ctx, s.db)
129-
return s.messageDao.GetCompletedAndFailed(ctx, threshold)
128+
return s.messageDao.CleanUp(ctx)
130129
}
131130

132-
func (s *MessageService) GetStale(ctx context.Context, threshold time.Time) ([]model.Message, error) {
131+
func (s *MessageService) GetCompletedAndFailed(ctx context.Context) ([]model.Message, error) {
133132
ctx = dao.WithDB(ctx, s.db)
134-
return s.messageDao.GetStale(ctx, threshold)
133+
return s.messageDao.GetCompletedAndFailed(ctx)
134+
}
135+
136+
func (s *MessageService) GetStale(ctx context.Context) ([]model.Message, error) {
137+
ctx = dao.WithDB(ctx, s.db)
138+
return s.messageDao.GetStale(ctx)
135139
}
136140

137141
func (s *MessageService) ResetToPending(ctx context.Context, id int64) error {

0 commit comments

Comments
 (0)