22.2.1. Wallet Error Handling Notes#

  • https://docs.taler.net/deployments/tops-stage-devtesting.html

22.2.1.1. Current#

  • prepareWithdrawExchange

    • “unknown provider” => “trying to connect”

    • effect on DB

      • new exchange (ephemeral) entry is created

        • retries happen even after restart (FIXME: this should not happen)

    • retries:

      • Limited retries trying to contact exchange

    • types of errors:

      • No network / no response

        • desired handling: Do transparent retries, allow user to “retry now” and “cancel”

      • transient protocol error (500 from exchange)

        • desired handling: Do transparent retries, allow user to “retry now” and “cancel”

        • we may want to show the last error for diagnostics

      • Permanent error (e.g. exchange version incompatible with wallet)

        • desired error handling: show error message, no “retry now”, nothing should be left behind in the database

22.2.1.2. Changes#

  • prepareWithdrawExchange

    • progressId as new input (chosen by client / UI)

    • notifications keyed on progressId

      • “still waiting”, nextRetry

      • “transient error”, nextRetry

  • retryRequestNow(progressId)

  • cancelRequest(progressId)

Two levels of error handling:

  • after 5 seconds: “slow network”, no error shown

  • after 10 seconds: alert, “there’s something wrong”, next retry, “retry now” button

export interface TransactionStateTransitionNotification {
  type: NotificationType.RequestProgress;
  operation: string;
  progressToken: string;
  error: TalerErrorDetail;
  nextRetryDelay: TalerProtocolDuration;
}

22.2.1.3. dev experiments#

  • new dev experiment for blocking requests $N times before they go through

22.2.1.4. More error handling notes#

  • request

  • notifications

  • recoverable/transient error

  • network timeout

  • return values

  • error

  • non-recoverable error

  • user abort

  • success

Phases:

  • requests starts

  • after 5s: show “it’s taking longer than expected”

  • after 10s: “action might not be possible”

  • retry now (possible every 3s)

  • error details

  • cancel