fix: incorrect offset calculation in adjustSnapshotTime

This commit is contained in:
alikia2x (寒寒) 2025-03-27 02:13:33 +08:00
parent d6dd4d9334
commit d44ba8a0ae
Signed by: alikia2x
GPG Key ID: 56209E0CCD8420C6

View File

@ -202,9 +202,9 @@ export async function adjustSnapshotTime(
redisClient: Redis, redisClient: Redis,
): Promise<Date> { ): Promise<Date> {
const currentWindow = getCurrentWindowIndex(); const currentWindow = getCurrentWindowIndex();
const targetOffset = Math.floor((expectedStartTime.getTime() - Date.now()) / (5 * MINUTE)); const targetOffset = Math.floor((expectedStartTime.getTime() - Date.now()) / (5 * MINUTE)) - 6;
let initialOffset = 0; let initialOffset = currentWindow + Math.max(targetOffset, 0);
if (lastAvailableWindow && lastAvailableWindow.count < allowedCounts) { if (lastAvailableWindow && lastAvailableWindow.count < allowedCounts) {
initialOffset = Math.max(lastAvailableWindow.offset - 2, 0); initialOffset = Math.max(lastAvailableWindow.offset - 2, 0);
@ -213,7 +213,7 @@ export async function adjustSnapshotTime(
let timePerIteration = 0; let timePerIteration = 0;
const t = performance.now(); const t = performance.now();
for (let i = initialOffset; i < WINDOW_SIZE; i++) { for (let i = initialOffset; i < WINDOW_SIZE; i++) {
const offset = (currentWindow + targetOffset + i) % WINDOW_SIZE; const offset = i;
const count = await getWindowCount(redisClient, offset); const count = await getWindowCount(redisClient, offset);
if (count < allowedCounts) { if (count < allowedCounts) {