Skip to content

Commit

Permalink
adding an injectable error handler for listen()
Browse files Browse the repository at this point in the history
  • Loading branch information
trevoro committed Sep 12, 2024
1 parent 07f1ced commit 11ec42d
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 6 deletions.
3 changes: 2 additions & 1 deletion javascript/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,5 @@ node_modules
yarn-error.log
.vscode
dist
tsconfig.tsbuildinfo
tsconfig.tsbuildinfo
package-lock.json
4 changes: 2 additions & 2 deletions javascript/src/rpc.ts
Original file line number Diff line number Diff line change
Expand Up @@ -76,13 +76,13 @@ export class RetoolRPC {
/**
* Asynchronously starts listening for incoming Retool function invocations.
*/
async listen(): Promise<void> {
async listen(onError?: (error: unknown) => Promise<void>): Promise<void> {
this._logger.info('Starting RPC agent')
const registerResult = await loopWithBackoff(this._pollingIntervalMs, this._logger, () => this.registerAgent())
if (registerResult === 'done') {
this._logger.info('Agent registered')
this._logger.info('Starting processing query')
loopWithBackoff(this._pollingIntervalMs, this._logger, () => this.fetchQueryAndExecute())
loopWithBackoff(this._pollingIntervalMs, this._logger, () => this.fetchQueryAndExecute(), onError)
}
}

Expand Down
11 changes: 8 additions & 3 deletions javascript/src/utils/polling.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ export async function loopWithBackoff(
pollingIntervalMs: number,
logger: LoggerService,
callback: () => Promise<AgentServerStatus>,
onError?: (error: unknown) => Promise<void>,
): Promise<AgentServerStatus> {
let delayTimeMs = CONNECTION_ERROR_INITIAL_TIMEOUT_MS
let lastLoopTimestamp = Date.now()
Expand All @@ -36,9 +37,13 @@ export async function loopWithBackoff(
await sleep(pollingIntervalMs)
delayTimeMs = Math.max(delayTimeMs / 2, CONNECTION_ERROR_INITIAL_TIMEOUT_MS)
} catch (err: unknown) {
logger.error('Error running RPC agent', err)
await sleep(delayTimeMs)
delayTimeMs = Math.min(delayTimeMs * 2, CONNECTION_ERROR_RETRY_MAX_MS)
logger.debug('Error running RPC agent', err)
if (onError) {
await onError(err)
} else {
await sleep(delayTimeMs)
delayTimeMs = Math.min(delayTimeMs * 2, CONNECTION_ERROR_RETRY_MAX_MS)
}
}
}
}

0 comments on commit 11ec42d

Please sign in to comment.