From 52f2abe75732403263d51e365706999cb9db11d7 Mon Sep 17 00:00:00 2001 From: Christian Grothoff Date: Fri, 26 Jan 2024 18:25:24 +0100 Subject: work on #8061 --- src/backend/taler-merchant-depositcheck.c | 34 +++++++++++++++++++++++-------- 1 file changed, 26 insertions(+), 8 deletions(-) (limited to 'src/backend') 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 @@ -107,6 +107,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. */ @@ -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; -- cgit v1.2.3