merchant

Merchant backend to process payments, run by merchants
Log | Files | Refs | Submodules | README | LICENSE

commit 149d75dbb5a6d6b4c6151705dcace26f58b643f4
parent 7d50fee1384e44b007e8c00dd610eef2cedf1866
Author: Christian Grothoff <christian@grothoff.org>
Date:   Thu, 31 Aug 2017 14:36:29 +0200

fix /pay transaction retry logic

Diffstat:
Msrc/backend/taler-merchant-httpd_pay.c | 22+++++++++++-----------
1 file changed, 11 insertions(+), 11 deletions(-)

diff --git a/src/backend/taler-merchant-httpd_pay.c b/src/backend/taler-merchant-httpd_pay.c @@ -1437,7 +1437,11 @@ handler_pay_json (struct MHD_Connection *connection, for (unsigned int i=0;i<MAX_RETRIES;i++) { - + if (GNUNET_OK != db->start (db->cls)) + { + qs_st = GNUNET_DB_STATUS_HARD_ERROR; + break; + } qs_st = db->store_transaction (db->cls, &pc->h_contract_terms, &pc->mi->pubkey, @@ -1450,13 +1454,9 @@ handler_pay_json (struct MHD_Connection *connection, /* Only retry if SOFT error occurred. Exit in case of OK or HARD failure */ if (GNUNET_DB_STATUS_SOFT_ERROR == qs_st) { - GNUNET_log (GNUNET_ERROR_TYPE_WARNING, - "Rolling back db transaction\n"); db->rollback (db->cls); - break; + continue; } - - /* Only retry if SOFT error occurred. Exit in case of OK or HARD failure */ if (GNUNET_DB_STATUS_HARD_ERROR == qs_st) { @@ -1466,22 +1466,22 @@ handler_pay_json (struct MHD_Connection *connection, TALER_EC_PAY_DB_STORE_TRANSACTION_ERROR, "Merchant database error: hard error while storing transaction"); } - continue; + break; } /** * Break if we couldn't modify one, and only one line; this * includes hard errors. */ - if (1 != qs_st) + if (GNUNET_DB_STATUS_SUCCESS_ONE_RESULT != qs_st) { GNUNET_log (GNUNET_ERROR_TYPE_ERROR, - "No DB errors occurred, but more than one line was modified!\n"); + "Unexpected query status %d while storing /pay transaction!\n", + (int) qs_st); return TMH_RESPONSE_reply_internal_error (connection, TALER_EC_PAY_DB_STORE_TRANSACTION_ERROR, - "Merchant database error: badly stored transaction"); + "Merchant database error: failed to store transaction"); } - } MHD_suspend_connection (connection);