Compare commits

...

3 Commits

Author SHA1 Message Date
Christian Grothoff
8563dcc845
log which subquery failed 2023-01-16 16:47:15 +01:00
Christian Grothoff
ce50b33fba
-fix args 2023-01-16 16:08:23 +01:00
Christian Grothoff
6596e6c723
fix for foreign key constraint problem for free purses on purse creation from reserve 2023-01-16 15:45:35 +01:00
4 changed files with 30 additions and 4 deletions

View File

@ -18,6 +18,8 @@ CREATE OR REPLACE FUNCTION exchange_do_reserve_purse(
IN in_purse_pub BYTEA, IN in_purse_pub BYTEA,
IN in_merge_sig BYTEA, IN in_merge_sig BYTEA,
IN in_merge_timestamp INT8, IN in_merge_timestamp INT8,
IN in_reserve_expiration INT8,
IN in_reserve_gc INT8,
IN in_reserve_sig BYTEA, IN in_reserve_sig BYTEA,
IN in_reserve_quota BOOLEAN, IN in_reserve_quota BOOLEAN,
IN in_purse_fee_val INT8, IN in_purse_fee_val INT8,
@ -105,6 +107,14 @@ ELSE
out_no_funds=TRUE; out_no_funds=TRUE;
RETURN; RETURN;
END IF; END IF;
INSERT INTO exchange.reserves
(reserve_pub
,expiration_date
,gc_date)
VALUES
(in_reserve_pub
,in_reserve_expiration
,in_reserve_gc);
ELSE ELSE
UPDATE exchange.reserves UPDATE exchange.reserves
SET SET
@ -149,7 +159,7 @@ INSERT INTO exchange.account_merges
END $$; END $$;
COMMENT ON FUNCTION exchange_do_reserve_purse(BYTEA, BYTEA, INT8, BYTEA, BOOLEAN, INT8, INT4, BYTEA, BYTEA) 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.'; IS 'Create a purse for a reserve.';

View File

@ -57,10 +57,21 @@ TEH_PG_do_reserve_purse (
struct PostgresClosure *pg = cls; struct PostgresClosure *pg = cls;
struct TALER_Amount zero_fee; struct TALER_Amount zero_fee;
struct TALER_PaytoHashP h_payto; struct TALER_PaytoHashP h_payto;
struct GNUNET_TIME_Timestamp reserve_expiration
= GNUNET_TIME_absolute_to_timestamp (
GNUNET_TIME_absolute_add (GNUNET_TIME_absolute_get (),
pg->idle_reserve_expiration_time));
struct GNUNET_TIME_Timestamp reserve_gc
= GNUNET_TIME_absolute_to_timestamp (
GNUNET_TIME_absolute_add (GNUNET_TIME_absolute_get (),
pg->legal_reserve_expiration_time));
struct GNUNET_PQ_QueryParam params[] = { struct GNUNET_PQ_QueryParam params[] = {
GNUNET_PQ_query_param_auto_from_type (purse_pub), GNUNET_PQ_query_param_auto_from_type (purse_pub),
GNUNET_PQ_query_param_auto_from_type (merge_sig), GNUNET_PQ_query_param_auto_from_type (merge_sig),
GNUNET_PQ_query_param_timestamp (&merge_timestamp), GNUNET_PQ_query_param_timestamp (&merge_timestamp),
GNUNET_PQ_query_param_timestamp (&reserve_expiration),
GNUNET_PQ_query_param_timestamp (&reserve_gc),
GNUNET_PQ_query_param_auto_from_type (reserve_sig), GNUNET_PQ_query_param_auto_from_type (reserve_sig),
GNUNET_PQ_query_param_bool (NULL == purse_fee), GNUNET_PQ_query_param_bool (NULL == purse_fee),
TALER_PQ_query_param_amount (NULL == purse_fee TALER_PQ_query_param_amount (NULL == purse_fee
@ -100,7 +111,7 @@ TEH_PG_do_reserve_purse (
",out_no_reserve AS no_reserve" ",out_no_reserve AS no_reserve"
",out_conflict AS conflict" ",out_conflict AS conflict"
" FROM exchange_do_reserve_purse" " FROM exchange_do_reserve_purse"
" ($1, $2, $3, $4, $5, $6, $7, $8, $9);"); " ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11);");
return GNUNET_PQ_eval_prepared_singleton_select (pg->conn, return GNUNET_PQ_eval_prepared_singleton_select (pg->conn,
"call_reserve_purse", "call_reserve_purse",

View File

@ -1157,7 +1157,12 @@ TEH_PG_get_reserve_status (void *cls,
&rhc); &rhc);
if ( (0 > qs) || if ( (0 > qs) ||
(GNUNET_OK != rhc.status) ) (GNUNET_OK != rhc.status) )
{
GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
"Query %s failed\n",
work[i].statement);
break; break;
}
} }
if ( (qs < 0) || if ( (qs < 0) ||
(rhc.status != GNUNET_OK) ) (rhc.status != GNUNET_OK) )

View File

@ -199,7 +199,7 @@ TEH_PG_reserves_in_insert (void *cls,
(We are only run in a larger transaction for performance.) */ (We are only run in a larger transaction for performance.) */
enum GNUNET_DB_QueryStatus cs; enum GNUNET_DB_QueryStatus cs;
cs = TEH_PG_commit(pg); cs = TEH_PG_commit (pg);
if (cs < 0) if (cs < 0)
return cs; return cs;
if (GNUNET_OK != if (GNUNET_OK !=
@ -257,7 +257,7 @@ TEH_PG_reserves_in_insert (void *cls,
updated_reserve.gc = GNUNET_TIME_timestamp_max (gc, updated_reserve.gc = GNUNET_TIME_timestamp_max (gc,
reserve.gc); reserve.gc);
qs3 = TEH_PG_reserves_update (pg, qs3 = TEH_PG_reserves_update (pg,
&updated_reserve); &updated_reserve);
switch (qs3) switch (qs3)
{ {
case GNUNET_DB_STATUS_HARD_ERROR: case GNUNET_DB_STATUS_HARD_ERROR: