fix(main,channels,webhooks): handle RowsAffected errors in background paths #1908

Merged
agent-dev-a merged 3 commits from fix/rowsaffected-cleanup-bg into main 2026-05-26 14:33:03 +00:00
3 changed files with 25 additions and 9 deletions
+7 -2
View File
@@ -149,8 +149,13 @@ func main() {
result, err := db.DB.ExecContext(ctx, `DELETE FROM activity_logs WHERE created_at < now() - ($1 || ' days')::interval`, retentionDays)
if err != nil {
log.Printf("Activity log cleanup error: %v", err)
} else if n, _ := result.RowsAffected(); n > 0 {
log.Printf("Activity log cleanup: purged %d old entries", n)
} else {
n, err := result.RowsAffected()
if err != nil {
log.Printf("Activity log cleanup RowsAffected error: %v", err)
} else if n > 0 {
log.Printf("Activity log cleanup: purged %d old entries", n)
}
}
}
}
@@ -82,7 +82,10 @@ func NewManager(proxy A2AProxy, broadcaster Broadcaster) *Manager {
log.Printf("Channels: failed to disable telegram chat_id=%s: %v", chatID, err)
return
}
if rows, _ := res.RowsAffected(); rows > 0 {
rows, err := res.RowsAffected()
if err != nil {
log.Printf("Channels: disable telegram RowsAffected error chat_id=%s: %v", chatID, err)
} else if rows > 0 {
log.Printf("Channels: disabled %d telegram channel(s) for chat_id=%s (bot removed)", rows, chatID)
// Reload so the in-memory poller map drops the now-disabled row.
m.Reload(ctx)
+14 -6
View File
@@ -394,9 +394,13 @@ func (h *WebhookHandler) handleCronTriggerEvent(c *gin.Context, eventType string
log.Printf("Webhook: cron trigger (issues/opened) DB error: %v", err)
return true, fmt.Errorf("failed to trigger schedules: %w", err)
}
affected, _ := result.RowsAffected()
log.Printf("Webhook: issues/opened in %s #%d by %s — triggered %d pick-up-work schedule(s)",
payload.Repository.FullName, payload.Issue.Number, payload.Sender.Login, affected)
affected, err := result.RowsAffected()
if err != nil {
log.Printf("Webhook: issues/opened RowsAffected error: %v", err)
} else {
log.Printf("Webhook: issues/opened in %s #%d by %s — triggered %d pick-up-work schedule(s)",
payload.Repository.FullName, payload.Issue.Number, payload.Sender.Login, affected)
}
c.JSON(http.StatusOK, gin.H{
"status": "triggered",
@@ -429,9 +433,13 @@ func (h *WebhookHandler) handleCronTriggerEvent(c *gin.Context, eventType string
log.Printf("Webhook: cron trigger (pull_request_review/submitted) DB error: %v", err)
return true, fmt.Errorf("failed to trigger schedules: %w", err)
}
affected, _ := result.RowsAffected()
log.Printf("Webhook: pull_request_review/submitted in %s PR #%d by %s (state=%s) — triggered %d review schedule(s)",
payload.Repository.FullName, payload.PullRequest.Number, payload.Sender.Login, payload.Review.State, affected)
affected, err := result.RowsAffected()
if err != nil {
log.Printf("Webhook: pull_request_review/submitted RowsAffected error: %v", err)
} else {
log.Printf("Webhook: pull_request_review/submitted in %s PR #%d by %s (state=%s) — triggered %d review schedule(s)",
payload.Repository.FullName, payload.PullRequest.Number, payload.Sender.Login, payload.Review.State, affected)
}
c.JSON(http.StatusOK, gin.H{
"status": "triggered",