Skip to content

Commit 28df555

Browse files
committed
feat: add empty page delay
Signed-off-by: Umberto Sgueglia <usgueglia@contractor.linuxfoundation.org>
1 parent 8f34b13 commit 28df555

1 file changed

Lines changed: 18 additions & 5 deletions

File tree

services/apps/script_executor_worker/src/bin/recalculate-all-affiliations.ts

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,12 @@
2222
* Kept small intentionally: each page triggers an
2323
* activityRelations lookup per member via memberId index.
2424
* --concurrency <n> Max concurrent Temporal workflow starts per page (default: 20)
25-
* --page-delay <ms> Milliseconds to wait between pages (default: 5000)
25+
* --page-delay <ms> Milliseconds to wait between pages (default: 2000)
2626
* --start-after <id> Resume from a specific memberId (exclusive, for restarts)
2727
* --dry-run Log what would be processed without starting workflows
2828
* --limit <n> Stop after triggering at most N workflows (for testing)
2929
* --max-pages <n> Stop after processing at most N pages (useful for dry-run testing)
30+
* --empty-page-delay <ms> Delay when a page has 0 broken members (default: same as --page-delay)
3031
* --workflow-delay <ms> Milliseconds to wait after each workflow start (default: 0)
3132
*
3233
* Environment Variables Required:
@@ -63,6 +64,7 @@ interface ScriptOptions {
6364
dryRun: boolean
6465
limit: number | null
6566
maxPages: number | null
67+
emptyPageDelayMs: number | null
6668
}
6769

6870
function parseArgs(): ScriptOptions {
@@ -76,10 +78,17 @@ function parseArgs(): ScriptOptions {
7678

7779
const pageSize = parseInt(getArg('--page-size') ?? '100', 10)
7880
const concurrency = parseInt(getArg('--concurrency') ?? '20', 10)
79-
const pageDelayMs = parseInt(getArg('--page-delay') ?? '5000', 10)
81+
const pageDelayMs = parseInt(getArg('--page-delay') ?? '2000', 10)
8082
const workflowDelayMs = parseInt(getArg('--workflow-delay') ?? '0', 10)
8183
const startAfter = getArg('--start-after') ?? null
8284
const dryRun = args.includes('--dry-run')
85+
const emptyPageDelayRaw = getArg('--empty-page-delay')
86+
const emptyPageDelayMs = emptyPageDelayRaw !== undefined ? parseInt(emptyPageDelayRaw, 10) : null
87+
88+
if (emptyPageDelayMs !== null && (isNaN(emptyPageDelayMs) || emptyPageDelayMs < 0)) {
89+
log.error('--empty-page-delay must be a non-negative integer')
90+
process.exit(1)
91+
}
8392
const limitRaw = getArg('--limit')
8493
const limit = limitRaw !== undefined ? parseInt(limitRaw, 10) : null
8594
const maxPagesRaw = getArg('--max-pages')
@@ -110,7 +119,7 @@ function parseArgs(): ScriptOptions {
110119
process.exit(1)
111120
}
112121

113-
return { pageSize, concurrency, pageDelayMs, workflowDelayMs, startAfter, dryRun, limit, maxPages }
122+
return { pageSize, concurrency, pageDelayMs, workflowDelayMs, startAfter, dryRun, limit, maxPages, emptyPageDelayMs }
114123
}
115124

116125
// Returns a page of distinct memberIds from memberOrganizations, cursor-based.
@@ -239,6 +248,7 @@ async function main() {
239248
log.info(`Mode: ${opts.dryRun ? 'DRY RUN' : 'LIVE'}`)
240249
log.info(`Limit: ${opts.limit ?? '(none)'}`)
241250
log.info(`Max pages: ${opts.maxPages ?? '(none)'}`)
251+
log.info(`Empty page delay: ${opts.emptyPageDelayMs !== null ? `${opts.emptyPageDelayMs}ms` : `same as page-delay (${opts.pageDelayMs}ms)`}`)
242252
log.info('='.repeat(80))
243253

244254
const dbConnection = await getDbConnection(WRITE_DB_CONFIG())
@@ -350,8 +360,11 @@ async function main() {
350360
hasMore = false
351361
}
352362

353-
if (opts.pageDelayMs > 0) {
354-
await new Promise((resolve) => setTimeout(resolve, opts.pageDelayMs))
363+
const delayMs = brokenMembers.length === 0 && opts.emptyPageDelayMs !== null
364+
? opts.emptyPageDelayMs
365+
: opts.pageDelayMs
366+
if (delayMs > 0) {
367+
await new Promise((resolve) => setTimeout(resolve, delayMs))
355368
}
356369
}
357370

0 commit comments

Comments
 (0)