mirror of
https://github.com/blitzkit/blitzkit.git
synced 2026-10-24 20:19:49 +02:00
Fix: await the ID discovery loop so it runs to completion
The ID discovery script exited about a second after starting. Since the switch to `atMaxRate`, neither the discovery loop nor the request loop was awaited, and `atMaxRate` didn't await its callback, so the script went straight to `save()`, committed and exited while overlapping duplicate requests failed in the background. - Awaited both `atMaxRate` loops and the callback inside `atMaxRate` - Moved the ID range exhaustion check out of the retry loop so retries can't remove extra regions - Treated network and JSON errors as failed API calls so a long run retries instead of crashing without saving Fixes #306
This commit is contained in:
1 parent
116c30be88
commit
3aefe7d985
2 files changed
+16
-13
No files matched your search
@@ -135,7 +135,7 @@ let regionI = 0;
|
|||||||
|
|
||||||
console.log("Starting discovery loop...");
|
console.log("Starting discovery loop...");
|
||||||
|
|
||||||
atMaxRate(async ({ _break: break1 }) => {
|
await atMaxRate(async ({ _break: break1 }) => {
|
||||||
if (regions.length === 0) {
|
if (regions.length === 0) {
|
||||||
console.log("All regions exhausted, exiting discovery loop...");
|
console.log("All regions exhausted, exiting discovery loop...");
|
||||||
return break1();
|
return break1();
|
||||||
@@ -166,18 +166,19 @@ atMaxRate(async ({ _break: break1 }) => {
|
|||||||
fields
|
fields
|
||||||
}&account_id=${accountIds}`;
|
}&account_id=${accountIds}`;
|
||||||
|
|
||||||
atMaxRate(async ({ _break: break2 }) => {
|
if (idRange.length < MAX_IDS_PER_CALL) {
|
||||||
if (idRange.length < MAX_IDS_PER_CALL) {
|
console.log(
|
||||||
console.log(
|
`Removing region ${region.domain} removed due to ID range exhaustion...`,
|
||||||
`Removing region ${region.domain} removed due to ID range exhaustion...`,
|
);
|
||||||
);
|
regions.splice(regionI, 1);
|
||||||
regions.splice(regionI, 1);
|
}
|
||||||
}
|
|
||||||
|
|
||||||
const response = await fetch(url);
|
await atMaxRate(async ({ _break: break2 }) => {
|
||||||
const data = (await response.json()) as QuickInfo;
|
const data = await fetch(url)
|
||||||
|
.then((response) => response.json() as Promise<QuickInfo>)
|
||||||
|
.catch(() => null);
|
||||||
|
|
||||||
if (data.status !== "ok") {
|
if (data === null || data.status !== "ok") {
|
||||||
console.warn("Failed API call; trying again...");
|
console.warn("Failed API call; trying again...");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,7 +20,9 @@ interface MethodContext {
|
|||||||
let lastT = 0;
|
let lastT = 0;
|
||||||
const maxDelta = 1000 / API_RATE;
|
const maxDelta = 1000 / API_RATE;
|
||||||
const DELTA_BUFFER = 0;
|
const DELTA_BUFFER = 0;
|
||||||
export async function atMaxRate(method: (context: MethodContext) => void) {
|
export async function atMaxRate(
|
||||||
|
method: (context: MethodContext) => void | Promise<void>,
|
||||||
|
) {
|
||||||
let isBroken = false;
|
let isBroken = false;
|
||||||
|
|
||||||
const context: MethodContext = {
|
const context: MethodContext = {
|
||||||
@@ -39,7 +41,7 @@ export async function atMaxRate(method: (context: MethodContext) => void) {
|
|||||||
await sleep(maxDelta - delta + DELTA_BUFFER);
|
await sleep(maxDelta - delta + DELTA_BUFFER);
|
||||||
}
|
}
|
||||||
|
|
||||||
method(context);
|
await method(context);
|
||||||
lastT = t;
|
lastT = t;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in new issue
Block a user