From fd9ba53c492835b52bd75a5ae113b7bcc81fe161 Mon Sep 17 00:00:00 2001 From: Christian Grothoff Date: Thu, 24 Feb 2022 13:53:09 +0100 Subject: make_coin_known can experience serialization failures, add retry logic --- src/exchange/taler-exchange-httpd_deposit.c | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) (limited to 'src/exchange/taler-exchange-httpd_deposit.c') diff --git a/src/exchange/taler-exchange-httpd_deposit.c b/src/exchange/taler-exchange-httpd_deposit.c index ea319f23a..66cbe04ca 100644 --- a/src/exchange/taler-exchange-httpd_deposit.c +++ b/src/exchange/taler-exchange-httpd_deposit.c @@ -442,12 +442,24 @@ TEH_handler_deposit (struct MHD_Connection *connection, enum GNUNET_DB_QueryStatus qs; /* make sure coin is 'known' in database */ - qs = TEH_make_coin_known (&deposit.coin, - connection, - &dc.known_coin_id, - &mhd_ret); - /* no transaction => no serialization failures should be possible */ - GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR != qs); + for (unsigned int tries = 0; tries no serialization failures should be possible */ + if (GNUNET_DB_STATUS_SOFT_ERROR != qs) + break; + } + if (GNUNET_DB_STATUS_SOFT_ERROR == qs) + { + GNUNET_break (0); + return TALER_MHD_reply_with_error (connection, + MHD_HTTP_INTERNAL_SERVER_ERROR, + TALER_EC_GENERIC_DB_COMMIT_FAILED, + "make_coin_known"); + } if (qs < 0) return mhd_ret; } -- cgit v1.2.3