From 26cf19ab6c896a299a12605a7b1723540763f52c Mon Sep 17 00:00:00 2001 From: Florian Dold Date: Wed, 21 Sep 2022 19:53:38 +0200 Subject: wallet-cli: add --expect-success flag, exit with error on max retries --- packages/taler-wallet-core/src/wallet.ts | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) (limited to 'packages/taler-wallet-core') diff --git a/packages/taler-wallet-core/src/wallet.ts b/packages/taler-wallet-core/src/wallet.ts index c91a96841..3ee37ec1a 100644 --- a/packages/taler-wallet-core/src/wallet.ts +++ b/packages/taler-wallet-core/src/wallet.ts @@ -477,6 +477,13 @@ export interface RetryLoopOpts { stopWhenDone?: boolean; } +export interface TaskLoopResult { + /** + * Was the maximum number of retries exceeded in a task? + */ + retriesExceeded: boolean; +} + /** * Main retry loop of the wallet. * @@ -485,7 +492,8 @@ export interface RetryLoopOpts { async function runTaskLoop( ws: InternalWalletState, opts: RetryLoopOpts = {}, -): Promise { +): Promise { + let retriesExceeded = false; for (let iteration = 0; !ws.stopped; iteration++) { const pending = await getPendingOperations(ws); logger.trace(`pending operations: ${j2s(pending)}`); @@ -497,6 +505,7 @@ async function runTaskLoop( const maxRetries = opts.maxRetries; if (maxRetries && p.retryInfo && p.retryInfo.retryCounter > maxRetries) { + retriesExceeded = true; logger.warn( `skipping, as ${maxRetries} retries are exceeded in an operation of type ${p.type}`, ); @@ -514,7 +523,9 @@ async function runTaskLoop( if (opts.stopWhenDone && numGivingLiveness === 0 && iteration !== 0) { logger.warn(`stopping, as no pending operations have lifeness`); - return; + return { + retriesExceeded, + }; } // Make sure that we run tasks that don't give lifeness at least @@ -557,6 +568,9 @@ async function runTaskLoop( } } logger.trace("exiting wallet retry loop"); + return { + retriesExceeded, + }; } /** @@ -1526,7 +1540,7 @@ export class Wallet { return runPending(this.ws, forceNow); } - runTaskLoop(opts?: RetryLoopOpts): Promise { + runTaskLoop(opts?: RetryLoopOpts): Promise { return runTaskLoop(this.ws, opts); } -- cgit v1.2.3