fix: keep expired reservations reconcilable for delayed OSS logs
This commit is contained in:
@@ -2119,7 +2119,6 @@ const DownloadTrafficReservationDB = {
|
||||
return db.prepare(`
|
||||
UPDATE user_download_traffic_reservations
|
||||
SET status = 'expired',
|
||||
remaining_bytes = 0,
|
||||
finalized_at = datetime('now', 'localtime'),
|
||||
updated_at = datetime('now', 'localtime')
|
||||
WHERE status = 'pending'
|
||||
@@ -2135,12 +2134,15 @@ const DownloadTrafficReservationDB = {
|
||||
}
|
||||
|
||||
const pendingRows = db.prepare(`
|
||||
SELECT id, remaining_bytes
|
||||
SELECT id, remaining_bytes, status
|
||||
FROM user_download_traffic_reservations
|
||||
WHERE user_id = ?
|
||||
AND status = 'pending'
|
||||
AND status IN ('pending', 'expired')
|
||||
AND remaining_bytes > 0
|
||||
ORDER BY created_at ASC, id ASC
|
||||
ORDER BY
|
||||
CASE WHEN status = 'pending' THEN 0 ELSE 1 END,
|
||||
created_at ASC,
|
||||
id ASC
|
||||
`).all(uid);
|
||||
|
||||
let consumed = 0;
|
||||
@@ -2154,7 +2156,7 @@ const DownloadTrafficReservationDB = {
|
||||
|
||||
const useBytes = Math.min(remaining, rowRemaining);
|
||||
const nextRemaining = rowRemaining - useBytes;
|
||||
const nextStatus = nextRemaining <= 0 ? 'confirmed' : 'pending';
|
||||
const nextStatus = nextRemaining <= 0 ? 'confirmed' : row.status;
|
||||
|
||||
db.prepare(`
|
||||
UPDATE user_download_traffic_reservations
|
||||
@@ -2326,7 +2328,10 @@ const DownloadTrafficReservationDB = {
|
||||
: 0;
|
||||
return db.prepare(`
|
||||
DELETE FROM user_download_traffic_reservations
|
||||
WHERE status IN ('confirmed', 'expired', 'cancelled')
|
||||
WHERE (
|
||||
status IN ('confirmed', 'cancelled')
|
||||
OR (status = 'expired' AND COALESCE(remaining_bytes, 0) <= 0)
|
||||
)
|
||||
AND updated_at < datetime('now', 'localtime', '-' || ? || ' days')
|
||||
`).run(days);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user