修复套餐接续停机竞态与轮询兜底
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 11m13s
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 11m13s
This commit is contained in:
@@ -132,6 +132,29 @@ func (b *PollingBase) releaseCardTrafficSyncLock(_ context.Context, cardID uint,
|
||||
}
|
||||
}
|
||||
|
||||
// ensureMissingTask 根据数据库最新卡状态,仅在对应分片队列缺失时补入任务。
|
||||
func (b *PollingBase) ensureMissingTask(ctx context.Context, cardID uint, taskType string) error {
|
||||
card, err := b.iotCardStore.GetByID(ctx, cardID)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
info, ok := b.configMgr.MergedTaskIntervals(card)[taskType]
|
||||
if !ok || info.Interval <= 0 {
|
||||
return nil
|
||||
}
|
||||
|
||||
added, err := b.queueMgr.EnsureQueued(ctx, cardID, taskType, time.Now())
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if added {
|
||||
b.logger.Info("卡状态轮询补齐缺失套餐任务",
|
||||
zap.Uint("card_id", cardID), zap.String("task_type", taskType))
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// requeueCardAt 使用独立短超时上下文执行真正的 ZADD 重入队。
|
||||
func (b *PollingBase) requeueCardAt(cardID uint, taskType string, nextCheckAt time.Time) error {
|
||||
ctx, cancel := pollingFallbackContext()
|
||||
|
||||
Reference in New Issue
Block a user