aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2023-01-16 17:45:05 +0100
committerChristian Grothoff <christian@grothoff.org>2023-01-16 17:45:05 +0100
commitfaf3f57ce3582a5b9f1070d689827bccd0183cd4 (patch)
tree6510265d7e69b1309cac68ba53d57f6d386eaf9e
parent8563dcc8452d243ec63f98f0b63b48aa82c050a3 (diff)
downloadexchange-faf3f57ce3582a5b9f1070d689827bccd0183cd4.tar.xz
do not 500 on empty reserve history by not ignoring undecided purses that may have caused reserve to be created in the first place
-rw-r--r--src/exchange/taler-exchange-httpd_responses.c6
-rw-r--r--src/exchange/taler-exchange-httpd_withdraw.c2
-rw-r--r--src/exchangedb/exchange_do_reserve_purse.sql4
-rw-r--r--src/exchangedb/pg_get_reserve_history.c9
4 files changed, 15 insertions, 6 deletions
diff --git a/src/exchange/taler-exchange-httpd_responses.c b/src/exchange/taler-exchange-httpd_responses.c
index ab9b81390..33bc13985 100644
--- a/src/exchange/taler-exchange-httpd_responses.c
+++ b/src/exchange/taler-exchange-httpd_responses.c
@@ -704,6 +704,7 @@ TEH_RESPONSE_compile_reserve_history (
json_t *json_history;
json_history = json_array ();
+ GNUNET_assert (NULL != json_history);
for (const struct TALER_EXCHANGEDB_ReserveHistory *pos = rh;
NULL != pos;
pos = pos->next)
@@ -1012,10 +1013,14 @@ reply_reserve_insufficient_funds (
json_history = TEH_RESPONSE_compile_reserve_history (rh);
if (NULL == json_history)
+ {
+ GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+ "Failed to compile reserve history\n");
return TALER_MHD_reply_with_error (connection,
MHD_HTTP_INTERNAL_SERVER_ERROR,
TALER_EC_EXCHANGE_RESERVE_HISTORY_ERROR_INSUFFICIENT_FUNDS,
NULL);
+ }
return TALER_MHD_REPLY_JSON_PACK (
connection,
MHD_HTTP_CONFLICT,
@@ -1061,6 +1066,7 @@ TEH_RESPONSE_reply_reserve_insufficient_balance (
if ( (qs < 0) ||
(NULL == rh) )
{
+ GNUNET_break (0);
return TALER_MHD_reply_with_error (connection,
MHD_HTTP_INTERNAL_SERVER_ERROR,
TALER_EC_GENERIC_DB_FETCH_FAILED,
diff --git a/src/exchange/taler-exchange-httpd_withdraw.c b/src/exchange/taler-exchange-httpd_withdraw.c
index 253773639..05153bfc4 100644
--- a/src/exchange/taler-exchange-httpd_withdraw.c
+++ b/src/exchange/taler-exchange-httpd_withdraw.c
@@ -215,6 +215,8 @@ withdraw_transaction (void *cls,
if (! balance_ok)
{
TEH_plugin->rollback (TEH_plugin->cls);
+ GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
+ "Balance insufficient for /withdraw\n");
*mhd_ret = TEH_RESPONSE_reply_reserve_insufficient_balance (
connection,
TALER_EC_EXCHANGE_WITHDRAW_INSUFFICIENT_FUNDS,
diff --git a/src/exchangedb/exchange_do_reserve_purse.sql b/src/exchangedb/exchange_do_reserve_purse.sql
index 4f65c6606..0476e60d1 100644
--- a/src/exchangedb/exchange_do_reserve_purse.sql
+++ b/src/exchangedb/exchange_do_reserve_purse.sql
@@ -161,7 +161,3 @@ END $$;
COMMENT ON FUNCTION exchange_do_reserve_purse(BYTEA, BYTEA, INT8, INT8, INT8, BYTEA, BOOLEAN, INT8, INT4, BYTEA, BYTEA)
IS 'Create a purse for a reserve.';
-
-
-
-
diff --git a/src/exchangedb/pg_get_reserve_history.c b/src/exchangedb/pg_get_reserve_history.c
index 89701ae71..6c12abc61 100644
--- a/src/exchangedb/pg_get_reserve_history.c
+++ b/src/exchangedb/pg_get_reserve_history.c
@@ -797,14 +797,14 @@ TEH_PG_get_reserve_history (void *cls,
" FROM purse_merges pm"
" JOIN purse_requests pr"
" USING (purse_pub)"
- " JOIN purse_decision pdes"
+ " LEFT JOIN purse_decision pdes"
" USING (purse_pub)"
" JOIN account_merges am"
" ON (am.purse_pub = pm.purse_pub AND"
" am.reserve_pub = pm.reserve_pub)"
" WHERE pm.reserve_pub=$1"
" AND COALESCE(pm.partner_serial_id,0)=0" /* must be local! */
- " AND NOT pdes.refunded;");
+ " AND NOT COALESCE (pdes.refunded, FALSE);");
PREPARE (pg,
"history_by_reserve",
"SELECT"
@@ -855,7 +855,12 @@ TEH_PG_get_reserve_history (void *cls,
&rhc);
if ( (0 > qs) ||
(GNUNET_OK != rhc.status) )
+ {
+ GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
+ "Failed to compile reserve history at `%s'\n",
+ work[i].statement);
break;
+ }
}
if ( (qs < 0) ||
(rhc.status != GNUNET_OK) )