summaryrefslogtreecommitdiff
path: root/src/backend
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2024-01-26 18:25:24 +0100
committerChristian Grothoff <christian@grothoff.org>2024-01-26 18:25:30 +0100
commit52f2abe75732403263d51e365706999cb9db11d7 (patch)
tree46ec83aae7e673cae4fef4f5ab4385b042c49524 /src/backend
parent1e0d328f91e4aa2ad783725671bb20d3e8cc1ef4 (diff)
downloadmerchant-52f2abe75732403263d51e365706999cb9db11d7.tar.gz
merchant-52f2abe75732403263d51e365706999cb9db11d7.tar.bz2
merchant-52f2abe75732403263d51e365706999cb9db11d7.zip
work on #8061
Diffstat (limited to 'src/backend')
-rw-r--r--src/backend/taler-merchant-depositcheck.c34
1 files changed, 26 insertions, 8 deletions
diff --git a/src/backend/taler-merchant-depositcheck.c b/src/backend/taler-merchant-depositcheck.c
index b472fd65..5fec222f 100644
--- a/src/backend/taler-merchant-depositcheck.c
+++ b/src/backend/taler-merchant-depositcheck.c
@@ -108,6 +108,11 @@ struct ExchangeInteraction
struct GNUNET_TIME_Absolute wire_deadline;
/**
+ * Current value for the retry backoff
+ */
+ struct GNUNET_TIME_Relative retry_backoff;
+
+ /**
* Target account hash of the deposit.
*/
struct TALER_MerchantWireHashP h_wire;
@@ -401,7 +406,10 @@ deposit_get_cb (void *cls,
const struct TALER_EXCHANGE_GetDepositResponse *dr)
{
struct ExchangeInteraction *w = cls;
+ struct GNUNET_TIME_Absolute future_retry;
+ future_retry
+ = GNUNET_TIME_relative_to_absolute (w->retry_backoff);
switch (dr->hr.http_status)
{
case MHD_HTTP_OK:
@@ -421,6 +429,18 @@ deposit_get_cb (void *cls,
GNUNET_SCHEDULER_shutdown ();
return;
}
+ qs = db_plugin->update_deposit_confirmation_status (
+ db_plugin->cls,
+ w->deposit_serial,
+ GNUNET_TIME_absolute_to_timestamp (future_retry),
+ w->retry_backoff,
+ NULL);
+ if (qs < 0)
+ {
+ GNUNET_break (0);
+ GNUNET_SCHEDULER_shutdown ();
+ return;
+ }
break;
}
case MHD_HTTP_ACCEPTED:
@@ -457,10 +477,6 @@ deposit_get_cb (void *cls,
(TALER_AML_NORMAL ==
dr->details.accepted.aml_decision))
{
- struct GNUNET_TIME_Absolute future_retry;
-
- future_retry
- = GNUNET_TIME_relative_to_absolute (GNUNET_TIME_UNIT_HOURS);
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
"Bumping wire transfer deadline in DB to %s as that is when we will retry\n",
GNUNET_TIME_absolute2s (future_retry));
@@ -468,6 +484,7 @@ deposit_get_cb (void *cls,
db_plugin->cls,
w->deposit_serial,
GNUNET_TIME_absolute_to_timestamp (future_retry),
+ w->retry_backoff,
"Exchange reported 202 Accepted but no KYC block");
if (qs < 0)
{
@@ -481,15 +498,12 @@ deposit_get_cb (void *cls,
default:
{
enum GNUNET_DB_QueryStatus qs;
- struct GNUNET_TIME_Absolute future_retry;
char *msg;
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
"Exchange %s returned tracking failure for deposited coin %s\n",
exchange_url,
TALER_B2S (&w->coin_pub));
- future_retry
- = GNUNET_TIME_relative_to_absolute (GNUNET_TIME_UNIT_HOURS);
GNUNET_asprintf (&msg,
"Unexpected exchange status %u (#%d, %s)\n",
dr->hr.http_status,
@@ -498,7 +512,8 @@ deposit_get_cb (void *cls,
qs = db_plugin->update_deposit_confirmation_status (
db_plugin->cls,
w->deposit_serial,
- future_retry,
+ GNUNET_TIME_absolute_to_timestamp (future_retry),
+ w->retry_backoff,
msg);
GNUNET_free (msg);
if (qs < 0)
@@ -530,6 +545,7 @@ deposit_get_cb (void *cls,
* @param cls NULL
* @param deposit_serial identifies the deposit operation
* @param wire_deadline when is the wire due
+ * @param retry_backoff current value for the retry backoff
* @param h_contract_terms hash of the contract terms
* @param merchant_priv private key of the merchant
* @param instance_id row ID of the instance
@@ -542,6 +558,7 @@ pending_deposits_cb (
void *cls,
uint64_t deposit_serial,
struct GNUNET_TIME_Absolute wire_deadline,
+ struct GNUNET_TIME_Relative retry_backoff,
const struct TALER_PrivateContractHashP *h_contract_terms,
const struct TALER_MerchantPrivateKeyP *merchant_priv,
const char *instance_id,
@@ -563,6 +580,7 @@ pending_deposits_cb (
}
w->deposit_serial = deposit_serial;
w->wire_deadline = wire_deadline;
+ w->retry_backoff = GNUNET_TIME_STD_BACKOFF (retry_backoff);
w->h_contract_terms = *h_contract_terms;
w->merchant_priv = *merchant_priv;
w->h_wire = *h_wire;