reduce redundant data fetch (#5444)
This commit is contained in:
parent
9114794bee
commit
fb952babf6
@ -172,13 +172,12 @@ TEH_DB_calculate_transaction_list_totals (struct TALER_EXCHANGEDB_TransactionLis
|
||||
struct TALER_Amount *ret)
|
||||
{
|
||||
struct TALER_Amount spent = *off;
|
||||
struct TALER_EXCHANGEDB_TransactionList *pos;
|
||||
struct TALER_Amount refunded;
|
||||
|
||||
GNUNET_assert (GNUNET_OK ==
|
||||
TALER_amount_get_zero (spent.currency,
|
||||
&refunded));
|
||||
for (pos = tl; NULL != pos; pos = pos->next)
|
||||
for (struct TALER_EXCHANGEDB_TransactionList *pos = tl; NULL != pos; pos = pos->next)
|
||||
{
|
||||
switch (pos->type)
|
||||
{
|
||||
|
@ -2107,7 +2107,7 @@ TEH_KS_handler_keys (struct TEH_RequestHandler *rh,
|
||||
sizeof (struct KeysResponseData),
|
||||
&krd_search_comparator);
|
||||
|
||||
GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
|
||||
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
|
||||
"Filtering /keys by cherry pick date %s found entry %u/%u\n",
|
||||
GNUNET_STRINGS_absolute_time_to_string (last_issue_date),
|
||||
(unsigned int) (krd - key_state->krd_array),
|
||||
|
@ -252,20 +252,22 @@ refresh_melt_transaction (void *cls,
|
||||
struct RefreshMeltContext *rmc = cls;
|
||||
struct TALER_EXCHANGEDB_RefreshMelt rm;
|
||||
enum GNUNET_DB_QueryStatus qs;
|
||||
uint32_t noreveal_index;
|
||||
|
||||
/* Check if we already created such a session */
|
||||
qs = TEH_plugin->get_melt (TEH_plugin->cls,
|
||||
qs = TEH_plugin->get_melt_index (TEH_plugin->cls,
|
||||
session,
|
||||
&rmc->refresh_session.rc,
|
||||
&rm);
|
||||
&noreveal_index);
|
||||
if (GNUNET_DB_STATUS_SUCCESS_ONE_RESULT == qs)
|
||||
{
|
||||
TALER_LOG_DEBUG ("Found already-melted coin\n");
|
||||
*mhd_ret = reply_refresh_melt_success (connection,
|
||||
&rmc->refresh_session.rc,
|
||||
rm.session.noreveal_index);
|
||||
/* FIXME: is it normal to return "hard error" upon
|
||||
* _finding_ some data into the database? */
|
||||
noreveal_index);
|
||||
/* Note: we return "hard error" to ensure the wrapper
|
||||
does not retry the transaction, and to also not generate
|
||||
a "fresh" response (as we would on "success") */
|
||||
return GNUNET_DB_STATUS_HARD_ERROR;
|
||||
}
|
||||
if (0 > qs)
|
||||
|
@ -858,6 +858,14 @@ postgres_prepare (PGconn *db_conn)
|
||||
" ON (kc.denom_pub_hash = denom.denom_pub_hash)"
|
||||
" WHERE rc=$1;",
|
||||
1),
|
||||
/* Used in #postgres_get_melt_index() to fetch
|
||||
the noreveal index from a previous melt operation */
|
||||
GNUNET_PQ_make_prepare ("get_melt_index",
|
||||
"SELECT"
|
||||
" noreveal_index"
|
||||
" FROM refresh_commitments"
|
||||
" WHERE rc=$1;",
|
||||
1),
|
||||
/* Used in #postgres_select_refreshs_above_serial_id() to fetch
|
||||
refresh session with id '\geq' the given parameter */
|
||||
GNUNET_PQ_make_prepare ("audit_get_refresh_commitments_incr",
|
||||
@ -3484,6 +3492,39 @@ postgres_get_melt (void *cls,
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Lookup noreveal index of a previous melt operation under the given
|
||||
* @a rc.
|
||||
*
|
||||
* @param cls the `struct PostgresClosure` with the plugin-specific state
|
||||
* @param session database handle to use
|
||||
* @param rc commitment hash to use to locate the operation
|
||||
* @param[out] refresh_melt where to store the result
|
||||
* @return transaction status
|
||||
*/
|
||||
static enum GNUNET_DB_QueryStatus
|
||||
postgres_get_melt_index (void *cls,
|
||||
struct TALER_EXCHANGEDB_Session *session,
|
||||
const struct TALER_RefreshCommitmentP *rc,
|
||||
uint32_t *noreveal_index)
|
||||
{
|
||||
struct GNUNET_PQ_QueryParam params[] = {
|
||||
GNUNET_PQ_query_param_auto_from_type (rc),
|
||||
GNUNET_PQ_query_param_end
|
||||
};
|
||||
struct GNUNET_PQ_ResultSpec rs[] = {
|
||||
GNUNET_PQ_result_spec_uint32 ("noreveal_index",
|
||||
noreveal_index),
|
||||
GNUNET_PQ_result_spec_end
|
||||
};
|
||||
|
||||
return GNUNET_PQ_eval_prepared_singleton_select (session->conn,
|
||||
"get_melt_index",
|
||||
params,
|
||||
rs);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Store new refresh melt commitment data.
|
||||
*
|
||||
@ -7035,6 +7076,7 @@ libtaler_plugin_exchangedb_postgres_init (void *cls)
|
||||
plugin->select_refunds_by_coin = &postgres_select_refunds_by_coin;
|
||||
plugin->insert_melt = &postgres_insert_melt;
|
||||
plugin->get_melt = &postgres_get_melt;
|
||||
plugin->get_melt_index = &postgres_get_melt_index;
|
||||
plugin->insert_refresh_reveal = &postgres_insert_refresh_reveal;
|
||||
plugin->get_refresh_reveal = &postgres_get_refresh_reveal;
|
||||
plugin->get_link_data = &postgres_get_link_data;
|
||||
|
@ -1606,6 +1606,23 @@ struct TALER_EXCHANGEDB_Plugin
|
||||
struct TALER_EXCHANGEDB_RefreshMelt *refresh_melt);
|
||||
|
||||
|
||||
/**
|
||||
* Lookup noreveal index of a previous melt operation under the given
|
||||
* @a rc.
|
||||
*
|
||||
* @param cls the `struct PostgresClosure` with the plugin-specific state
|
||||
* @param session database handle to use
|
||||
* @param rc commitment hash to use to locate the operation
|
||||
* @param[out] refresh_melt where to store the result
|
||||
* @return transaction status
|
||||
*/
|
||||
enum GNUNET_DB_QueryStatus
|
||||
(*get_melt_index) (void *cls,
|
||||
struct TALER_EXCHANGEDB_Session *session,
|
||||
const struct TALER_RefreshCommitmentP *rc,
|
||||
uint32_t *noreveal_index);
|
||||
|
||||
|
||||
/**
|
||||
* Store in the database which coin(s) the wallet wanted to create
|
||||
* in a given refresh operation and all of the other information
|
||||
|
Loading…
Reference in New Issue
Block a user