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