View Issue Details

IDProjectCategoryView StatusLast Update
0008441Talerwallet-corepublic2024-02-22 13:51
ReporterFlorian Dold Assigned ToFlorian Dold  
PrioritynormalSeverityfeatureReproducibilityhave not tried
Status assignedResolutionopen 
Target Versionpost-1.0 
Summary0008441: wallet-core should long-poll withdrawal operation *and* reserve at the same time
Description... instead of waiting for the withdrawal operation before even contacting the exchange.
TagsNo tags attached.


Florian Dold

2024-02-20 01:56

manager   ~0021382

Last edited: 2024-02-20 01:57

IMO this threatens to completely break the nice, uniform state machine, error handling and retry approach we have for wallet-core transactions.

What happens if one of the long poll endpoints returns an error status (immediately)? Do we now have two separate "error" properties on the transaction now? How do we handle retry counters in this case? Do we have two separate ones?

A possible approach:
* Ignore all errors from the exchange long-polling while we are in pending(bank-confirm-transfer), don't report them outside of logs, we won't be able to show them in the UI
* Run an additional background task that is coupled to the normal withdrawal task and has its own retry counter and long-polling logic (i.e. preventing a "short" long-poll and doing back-off when the long-poll endpoint returns 5xx).

All this seems like an awful lot of complexity for something that's only needed when the bank services goes offline but the exchange still works.

Florian Dold

2024-02-20 01:58

manager   ~0021383

Last edited: 2024-02-20 01:58

While the normal long-polling is trivial, this "double long-polling" seems excessive especially for 0.9.4.

Christian Grothoff

2024-02-21 21:39

manager   ~0021429

Last edited: 2024-02-21 21:39

I'd probably say ignore (transient) exchange errors until/unless you have an answer from the bank (but not if say /config or /keys indicate this isn't even an exchange!), and otherwise if bank long polling ends with failed, cancel exchange. If bank long polling ends with 'success', keep exchange long polling until success there, too. Then do /withdraw. If exchange gives you a really hard error (5xx, or /{keys,config} tell you not-an-exchange), possibly *abort* the bank transfer (if you still can) as this is not an exchange and thus /withdraw would fail later (and that'd be worse!).

Anyway, 0.9.5 is fine ;-), as would post-1.0, I guess.

Issue History

Date Modified Username Field Change
2024-02-19 15:38 Florian Dold New Issue
2024-02-19 15:38 Florian Dold Status new => assigned
2024-02-19 15:38 Florian Dold Assigned To => Florian Dold
2024-02-19 15:38 Florian Dold Target Version => 0.9.4
2024-02-20 01:56 Florian Dold Note Added: 0021382
2024-02-20 01:57 Florian Dold Assigned To Florian Dold => Christian Grothoff
2024-02-20 01:57 Florian Dold Note Edited: 0021382
2024-02-20 01:58 Florian Dold Note Added: 0021383
2024-02-20 01:58 Florian Dold Note Edited: 0021383
2024-02-21 21:39 Christian Grothoff Note Added: 0021429
2024-02-21 21:39 Christian Grothoff Severity minor => feature
2024-02-21 21:39 Christian Grothoff Note Edited: 0021429
2024-02-21 22:33 Christian Grothoff Assigned To Christian Grothoff => Florian Dold
2024-02-22 13:51 Florian Dold Target Version 0.9.4 => post-1.0