fix: 补三处推送漏唤醒让回执与后续 pending 继续推 (#65)
This commit is contained in:
@@ -127,6 +127,7 @@ LIMIT ?`, nowMs, limit)
|
||||
}
|
||||
mu.Lock()
|
||||
n++
|
||||
wake[d.senderID] = struct{}{}
|
||||
mu.Unlock()
|
||||
rows2, qErr := a.db.Read.QueryContext(ctx, `
|
||||
SELECT DISTINCT endpoint_id FROM deliveries WHERE seq = ? AND state = 'pending'`, d.seq)
|
||||
@@ -203,8 +204,10 @@ LIMIT ?`, endpointID, room)
|
||||
}
|
||||
|
||||
var toClaim []pushItem
|
||||
skipped := false
|
||||
for _, it := range items {
|
||||
if it.body == nil {
|
||||
skipped = true
|
||||
continue
|
||||
}
|
||||
msg := protocol.Msg{
|
||||
@@ -227,6 +230,7 @@ LIMIT ?`, endpointID, room)
|
||||
return rejErr
|
||||
}
|
||||
a.WakePush(it.senderID)
|
||||
skipped = true
|
||||
continue
|
||||
}
|
||||
it.payload = payload
|
||||
@@ -252,6 +256,10 @@ LIMIT ?`, endpointID, room)
|
||||
a.observeDispatchToPush(it.sendAt, nowMs)
|
||||
}
|
||||
}
|
||||
// 超限等跳过未占满窗口时再唤醒本端,让 worker 下一轮取后续 pending(不在本轮递归扫表)。
|
||||
if skipped && len(claimed) < room {
|
||||
a.WakePush(endpointID)
|
||||
}
|
||||
return a.pushReceipts(ctx, endpointID, connID, nowMs)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user