From 551ad9b03a64794ee551114577f7ee7278ec4bfa Mon Sep 17 00:00:00 2001 From: zhx Date: Fri, 10 Jul 2026 16:42:30 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20lucky=5Fgift=5Foutbox=20delivered=20?= =?UTF-8?q?=E4=BF=9D=E7=95=99=E6=9C=9F=E6=94=B6=E7=B4=A7=E4=B8=BA=207=20?= =?UTF-8?q?=E5=A4=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 线上实测 delivered 约 9 万行/天且该表无下游读方(事实在 lucky_draw_records), 30 天窗口会让表膨胀到近 300 万行;7 天足够排障。 Co-Authored-By: Claude Fable 5 --- services/lucky-gift-service/internal/config/config.go | 5 +++-- services/lucky-gift-service/internal/config/config_test.go | 4 ++-- .../internal/service/luckygift/outbox_retention.go | 3 ++- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/services/lucky-gift-service/internal/config/config.go b/services/lucky-gift-service/internal/config/config.go index 10698147..199fb166 100644 --- a/services/lucky-gift-service/internal/config/config.go +++ b/services/lucky-gift-service/internal/config/config.go @@ -74,8 +74,9 @@ func Default() Config { StatsRefreshInterval: 10 * time.Minute, StatsBatchSize: 5000, Retention: OutboxRetentionConfig{ - Enabled: true, - MaxAge: 30 * 24 * time.Hour, + Enabled: true, + // 线上 delivered 约 9 万行/天且无下游读方;7 天足够排障,30 天会让表膨胀到近 300 万行。 + MaxAge: 7 * 24 * time.Hour, ScanInterval: 5 * time.Minute, BatchSize: 500, }, diff --git a/services/lucky-gift-service/internal/config/config_test.go b/services/lucky-gift-service/internal/config/config_test.go index 9f35c903..709a648e 100644 --- a/services/lucky-gift-service/internal/config/config_test.go +++ b/services/lucky-gift-service/internal/config/config_test.go @@ -17,8 +17,8 @@ func TestLoadDefaultsEnableOutboxRetention(t *testing.T) { if !retention.Enabled { t.Fatal("retention should be enabled by default") } - if retention.MaxAge != 30*24*time.Hour { - t.Fatalf("retention.MaxAge = %s, want 720h", retention.MaxAge) + if retention.MaxAge != 7*24*time.Hour { + t.Fatalf("retention.MaxAge = %s, want 168h", retention.MaxAge) } if retention.ScanInterval != 5*time.Minute { t.Fatalf("retention.ScanInterval = %s, want 5m", retention.ScanInterval) diff --git a/services/lucky-gift-service/internal/service/luckygift/outbox_retention.go b/services/lucky-gift-service/internal/service/luckygift/outbox_retention.go index 8fe567e5..a6eb1c0b 100644 --- a/services/lucky-gift-service/internal/service/luckygift/outbox_retention.go +++ b/services/lucky-gift-service/internal/service/luckygift/outbox_retention.go @@ -23,9 +23,10 @@ type OutboxRetentionOptions struct { func defaultOutboxRetentionOptions() OutboxRetentionOptions { // 默认值和 config.Default 的 retention 保持一致,防止手动构造绕过配置归一化后误删新事件。 + // 线上 delivered 约 9 万行/天且无下游读方,7 天窗口在可排障和表体积之间取平衡。 return OutboxRetentionOptions{ ScanInterval: 5 * time.Minute, - MaxAge: 30 * 24 * time.Hour, + MaxAge: 7 * 24 * time.Hour, BatchSize: 500, } }