summaryrefslogtreecommitdiff
path: root/src/exchange/taler-exchange-httpd_melt.c
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2022-02-24 13:53:09 +0100
committerChristian Grothoff <christian@grothoff.org>2022-02-24 13:53:19 +0100
commitfd9ba53c492835b52bd75a5ae113b7bcc81fe161 (patch)
treeccb61b10436e0fdc5cb068595fad26e910bdabb2 /src/exchange/taler-exchange-httpd_melt.c
parent10b9023575b14e581cfd952b75039e71488f5a8f (diff)
downloadexchange-fd9ba53c492835b52bd75a5ae113b7bcc81fe161.tar.gz
exchange-fd9ba53c492835b52bd75a5ae113b7bcc81fe161.tar.bz2
exchange-fd9ba53c492835b52bd75a5ae113b7bcc81fe161.zip
make_coin_known can experience serialization failures, add retry logic
Diffstat (limited to 'src/exchange/taler-exchange-httpd_melt.c')
-rw-r--r--src/exchange/taler-exchange-httpd_melt.c23
1 files changed, 17 insertions, 6 deletions
diff --git a/src/exchange/taler-exchange-httpd_melt.c b/src/exchange/taler-exchange-httpd_melt.c
index 049fd09a0..4db1b2469 100644
--- a/src/exchange/taler-exchange-httpd_melt.c
+++ b/src/exchange/taler-exchange-httpd_melt.c
@@ -237,12 +237,23 @@ database_melt (struct MHD_Connection *connection,
MHD_RESULT mhd_ret = MHD_NO;
enum GNUNET_DB_QueryStatus qs;
- qs = TEH_make_coin_known (&rmc->refresh_session.coin,
- connection,
- &rmc->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<MAX_TRANSACTION_COMMIT_RETRIES; tries++)
+ {
+ qs = TEH_make_coin_known (&rmc->refresh_session.coin,
+ connection,
+ &rmc->known_coin_id,
+ &mhd_ret);
+ 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;
}