do not 500 on empty reserve history by not ignoring undecided purses that may have caused reserve to be created in the first place

This commit is contained in:
Christian Grothoff 2023-01-16 17:45:05 +01:00
parent 8563dcc845
commit faf3f57ce3
No known key found for this signature in database
GPG Key ID: 939E6BE1E29FC3CC
4 changed files with 15 additions and 6 deletions

View File

@ -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,

View File

@ -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,

View File

@ -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.';

View File

@ -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) )