-more work on FTBFS issues

This commit is contained in:
Christian Grothoff 2021-10-30 19:57:54 +02:00
parent 963a06c0aa
commit d83a65320a
No known key found for this signature in database
GPG Key ID: 939E6BE1E29FC3CC
3 changed files with 58 additions and 73 deletions

View File

@ -57,11 +57,6 @@ struct AggregationUnit
*/
struct TALER_Amount wire_fee;
/**
* Hash of @e wire.
*/
struct TALER_MerchantWireHash h_wire;
/**
* Wire transfer identifier we use.
*/
@ -81,7 +76,12 @@ struct AggregationUnit
/**
* Wire details of the merchant.
*/
json_t *wire;
char *payto_uri;
/**
* Selected wire target for the aggregation.
*/
uint64_t wire_target;
/**
* Exchange wire account to be used for the preparation and
@ -216,8 +216,7 @@ static void
cleanup_au (struct AggregationUnit *au)
{
GNUNET_assert (NULL != au);
if (NULL != au->wire)
json_decref (au->wire);
GNUNET_free (au->payto_uri);
memset (au,
0,
sizeof (*au));
@ -353,7 +352,8 @@ refund_by_coin_cb (void *cls,
* @param amount_with_fee amount that was deposited including fee
* @param deposit_fee amount the exchange gets to keep as transaction fees
* @param h_contract_terms hash of the proposal data known to merchant and customer
* @param wire target account for the wire transfer
* @param wire_target target account for the wire transfer
* @param payto_uri URI of the target account
* @return transaction status code, #GNUNET_DB_STATUS_SUCCESS_ONE_RESULT to continue to iterate
*/
static enum GNUNET_DB_QueryStatus
@ -364,7 +364,8 @@ deposit_cb (void *cls,
const struct TALER_Amount *amount_with_fee,
const struct TALER_Amount *deposit_fee,
const struct TALER_PrivateContractHash *h_contract_terms,
const json_t *wire)
uint64_t wire_target,
const char *payto_uri)
{
struct AggregationUnit *au = cls;
enum GNUNET_DB_QueryStatus qs;
@ -416,21 +417,9 @@ deposit_cb (void *cls,
}
}
GNUNET_assert (NULL == au->wire);
if (NULL == (au->wire = json_incref ((json_t *) wire)))
{
GNUNET_break (0);
return GNUNET_DB_STATUS_HARD_ERROR;
}
if (GNUNET_OK !=
TALER_JSON_merchant_wire_signature_hash (wire,
&au->h_wire))
{
GNUNET_break (0);
json_decref (au->wire);
au->wire = NULL;
return GNUNET_DB_STATUS_HARD_ERROR;
}
GNUNET_assert (NULL == au->payto_uri);
au->payto_uri = GNUNET_strdup (payto_uri);
au->wire_target = wire_target;
GNUNET_CRYPTO_random_block (GNUNET_CRYPTO_QUALITY_NONCE,
&au->wtid,
sizeof (au->wtid));
@ -439,20 +428,13 @@ deposit_cb (void *cls,
TALER_B2S (&au->wtid),
TALER_amount2s (amount_with_fee),
(unsigned long long) row_id);
au->wa = TALER_EXCHANGEDB_find_account_by_payto_uri (payto_uri);
if (NULL == au->wa)
{
char *url;
url = TALER_JSON_wire_to_payto (au->wire);
au->wa = TALER_EXCHANGEDB_find_account_by_payto_uri (url);
if (NULL == au->wa)
{
GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
"No exchange account configured for `%s', please fix your setup to continue!\n",
url);
GNUNET_free (url);
return GNUNET_DB_STATUS_HARD_ERROR;
}
GNUNET_free (url);
GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
"No exchange account configured for `%s', please fix your setup to continue!\n",
payto_uri);
return GNUNET_DB_STATUS_HARD_ERROR;
}
/* make sure we have current fees */
@ -789,7 +771,7 @@ run_aggregation (void *cls)
"Found ready deposit for %s, aggregating\n",
TALER_B2S (&au_active.merchant_pub));
qs = db_plugin->iterate_matching_deposits (db_plugin->cls,
&au_active.h_wire,
au_active.wire_target,
&au_active.merchant_pub,
&aggregate_cb,
&au_active,
@ -908,19 +890,12 @@ run_aggregation (void *cls)
void *buf;
size_t buf_size;
{
char *url;
url = TALER_JSON_wire_to_payto (au_active.wire);
TALER_BANK_prepare_transfer (url,
&au_active.final_amount,
exchange_base_url,
&au_active.wtid,
&buf,
&buf_size);
GNUNET_free (url);
}
TALER_BANK_prepare_transfer (au_active.payto_uri,
&au_active.final_amount,
exchange_base_url,
&au_active.wtid,
&buf,
&buf_size);
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"Storing %u bytes of wire prepare data\n",
(unsigned int) buf_size);
@ -937,7 +912,7 @@ run_aggregation (void *cls)
qs = db_plugin->store_wire_transfer_out (db_plugin->cls,
au_active.execution_time,
&au_active.wtid,
au_active.wire,
au_active.wire_target,
au_active.wa->section_name,
&au_active.final_amount);
cleanup_au (&au_active);

View File

@ -1023,12 +1023,17 @@ prepare_statements (struct PostgresClosure *pg)
",denom.fee_deposit_val"
",denom.fee_deposit_frac"
",h_contract_terms"
",wire"
",payto_uri"
",wire_target_serial_id"
",merchant_pub"
",kc.coin_pub"
" FROM deposits"
" JOIN known_coins kc USING (known_coin_id)"
" JOIN denominations denom USING (denominations_serial)"
" JOIN wire_targets "
" USING (wire_target_serial_id)"
" JOIN known_coins kc"
" USING (known_coin_id)"
" JOIN denominations denom"
" USING (denominations_serial)"
" WHERE "
" shard >= $2"
" AND shard <= $3"
@ -1056,7 +1061,7 @@ prepare_statements (struct PostgresClosure *pg)
" JOIN denominations denom USING (denominations_serial)"
" WHERE"
" merchant_pub=$1 AND"
" h_wire=$2 AND"
" wire_target_serial_id=$2 AND"
" done=FALSE"
" ORDER BY wire_deadline ASC"
" LIMIT "
@ -1225,7 +1230,7 @@ prepare_statements (struct PostgresClosure *pg)
"INSERT INTO wire_out "
"(execution_date"
",wtid_raw"
",wire_target"
",wire_target_serial_id"
",exchange_account_section"
",amount_val"
",amount_frac"
@ -5109,10 +5114,13 @@ postgres_get_ready_deposit (void *cls,
struct TALER_MerchantPublicKeyP merchant_pub;
struct TALER_CoinSpendPublicKeyP coin_pub;
uint64_t serial_id;
json_t *wire;
uint64_t wire_target;
char *payto_uri;
struct GNUNET_PQ_ResultSpec rs[] = {
GNUNET_PQ_result_spec_uint64 ("deposit_serial_id",
&serial_id),
GNUNET_PQ_result_spec_uint64 ("wire_target_serial_id",
&wire_target),
TALER_PQ_RESULT_SPEC_AMOUNT ("amount_with_fee",
&amount_with_fee),
TALER_PQ_RESULT_SPEC_AMOUNT ("fee_deposit",
@ -5123,8 +5131,8 @@ postgres_get_ready_deposit (void *cls,
&merchant_pub),
GNUNET_PQ_result_spec_auto_from_type ("coin_pub",
&coin_pub),
TALER_PQ_result_spec_json ("wire",
&wire),
GNUNET_PQ_result_spec_string ("payto_uri",
&payto_uri),
GNUNET_PQ_result_spec_end
};
enum GNUNET_DB_QueryStatus qs;
@ -5151,7 +5159,8 @@ postgres_get_ready_deposit (void *cls,
&amount_with_fee,
&deposit_fee,
&h_contract_terms,
wire);
wire_target,
payto_uri);
GNUNET_PQ_cleanup_result (rs);
return qs;
}
@ -5271,7 +5280,7 @@ match_deposit_cb (void *cls,
* destination. Those deposits must not already be "done".
*
* @param cls the @e cls of this struct with the plugin-specific state
* @param h_wire destination of the wire transfer
* @param wire_target destination of the wire transfer
* @param merchant_pub public key of the merchant
* @param deposit_cb function to call for each deposit
* @param deposit_cb_cls closure for @a deposit_cb
@ -5282,7 +5291,7 @@ match_deposit_cb (void *cls,
static enum GNUNET_DB_QueryStatus
postgres_iterate_matching_deposits (
void *cls,
const struct TALER_MerchantWireHash *h_wire,
uint64_t wire_target,
const struct TALER_MerchantPublicKeyP *merchant_pub,
TALER_EXCHANGEDB_MatchingDepositIterator deposit_cb,
void *deposit_cb_cls,
@ -5291,7 +5300,7 @@ postgres_iterate_matching_deposits (
struct PostgresClosure *pg = cls;
struct GNUNET_PQ_QueryParam params[] = {
GNUNET_PQ_query_param_auto_from_type (merchant_pub),
GNUNET_PQ_query_param_auto_from_type (h_wire),
GNUNET_PQ_query_param_uint64 (&wire_target),
GNUNET_PQ_query_param_end
};
struct MatchingDepositContext mdc = {
@ -7733,7 +7742,7 @@ postgres_start_deferred_wire_out (void *cls)
* @param cls closure
* @param date time of the wire transfer
* @param wtid subject of the wire transfer
* @param wire_account details about the receiver account of the wire transfer
* @param wire_target identifies the receiver account of the wire transfer
* @param exchange_account_section configuration section of the exchange specifying the
* exchange's bank account being used
* @param amount amount that was transmitted
@ -7744,7 +7753,7 @@ postgres_store_wire_transfer_out (
void *cls,
struct GNUNET_TIME_Absolute date,
const struct TALER_WireTransferIdentifierRawP *wtid,
const json_t *wire_account,
uint64_t wire_target,
const char *exchange_account_section,
const struct TALER_Amount *amount)
{
@ -7752,7 +7761,7 @@ postgres_store_wire_transfer_out (
struct GNUNET_PQ_QueryParam params[] = {
TALER_PQ_query_param_absolute_time (&date),
GNUNET_PQ_query_param_auto_from_type (wtid),
TALER_PQ_query_param_json (wire_account),
GNUNET_PQ_query_param_uint64 (&wire_target),
GNUNET_PQ_query_param_string (exchange_account_section),
TALER_PQ_query_param_amount (amount),
GNUNET_PQ_query_param_end

View File

@ -1478,8 +1478,8 @@ typedef enum GNUNET_DB_QueryStatus
* @param amount_with_fee amount that was deposited including fee
* @param deposit_fee amount the exchange gets to keep as transaction fees
* @param h_contract_terms hash of the proposal data known to merchant and customer
* @param receiver_wire_account wire details for the merchant, includes
* 'url' in payto://-format;
* @param wire_target unique ID of the receiver account
* @param payto_uri how to pay the merchant, URI in payto://-format;
* @return transaction status code, #GNUNET_DB_STATUS_SUCCESS_ONE_RESULT to continue to iterate
*/
typedef enum GNUNET_DB_QueryStatus
@ -1491,7 +1491,8 @@ typedef enum GNUNET_DB_QueryStatus
const struct TALER_Amount *amount_with_fee,
const struct TALER_Amount *deposit_fee,
const struct TALER_PrivateContractHash *h_contract_terms,
const json_t *receiver_wire_account);
uint64_t wire_target,
const char *payto_uri);
/**
@ -2796,7 +2797,7 @@ struct TALER_EXCHANGEDB_Plugin
enum GNUNET_DB_QueryStatus
(*iterate_matching_deposits)(
void *cls,
const struct TALER_MerchantWireHash *h_wire,
uint64_t wire_target,
const struct TALER_MerchantPublicKeyP *merchant_pub,
TALER_EXCHANGEDB_MatchingDepositIterator deposit_cb,
void *deposit_cb_cls,
@ -3178,7 +3179,7 @@ struct TALER_EXCHANGEDB_Plugin
void *cls,
struct GNUNET_TIME_Absolute date,
const struct TALER_WireTransferIdentifierRawP *wtid,
const json_t *wire_account,
uint64_t wire_target,
const char *exchange_account_section,
const struct TALER_Amount *amount);