fix auditor progress point issue

This commit is contained in:
Christian Grothoff 2017-03-20 02:45:33 +01:00
parent a38fa32484
commit 3fde028650
No known key found for this signature in database
GPG Key ID: 939E6BE1E29FC3CC
3 changed files with 40 additions and 16 deletions

View File

@ -25,7 +25,6 @@
* given in the 'wire_out' table. This needs to be checked separately!
*
* KNOWN BUGS:
* - resolve HACK! -- need extra serial_id in 'pp' as we go over reserve_out twice!
* - risk is not calculated correctly
* - calculate, store and report aggregation fee balance!
* - error handling if denomination keys are used that are not known to the
@ -1000,7 +999,7 @@ analyze_reserves (void *cls)
rc.reserves = GNUNET_CONTAINER_multihashmap_create (512,
GNUNET_NO);
if (GNUNET_OK !=
if (GNUNET_SYSERR ==
edb->select_reserves_in_above_serial_id (edb->cls,
esession,
pp.last_reserve_in_serial_id,
@ -1010,7 +1009,7 @@ analyze_reserves (void *cls)
GNUNET_break (0);
return GNUNET_SYSERR;
}
if (GNUNET_OK !=
if (GNUNET_SYSERR ==
edb->select_reserves_out_above_serial_id (edb->cls,
esession,
pp.last_reserve_out_serial_id,
@ -2051,6 +2050,9 @@ withdraw_cb (void *cls,
const struct TALER_EXCHANGEDB_DenominationKeyInformationP *dki;
struct TALER_Amount value;
GNUNET_assert (rowid >= pp.last_withdraw_serial_id); /* should be monotonically increasing */
pp.last_withdraw_serial_id = rowid + 1;
if (GNUNET_OK !=
get_denomination_info (denom_pub,
&dki,
@ -2128,6 +2130,9 @@ refresh_session_cb (void *cls,
struct TALER_Amount amount_without_fee;
struct TALER_Amount tmp;
GNUNET_assert (rowid >= pp.last_melt_serial_id); /* should be monotonically increasing */
pp.last_melt_serial_id = rowid + 1;
if (GNUNET_OK !=
get_denomination_info (denom_pub,
&dki,
@ -2376,6 +2381,9 @@ deposit_cb (void *cls,
struct TALER_DepositRequestPS dr;
struct TALER_Amount tmp;
GNUNET_assert (rowid >= pp.last_deposit_serial_id); /* should be monotonically increasing */
pp.last_deposit_serial_id = rowid + 1;
if (GNUNET_OK !=
get_denomination_info (denom_pub,
&dki,
@ -2496,6 +2504,9 @@ refund_cb (void *cls,
struct TALER_Amount amount_without_fee;
struct TALER_Amount refund_fee;
GNUNET_assert (rowid >= pp.last_refund_serial_id); /* should be monotonically increasing */
pp.last_refund_serial_id = rowid + 1;
if (GNUNET_OK !=
get_denomination_info (denom_pub,
&dki,
@ -2589,7 +2600,6 @@ analyze_coins (void *cls)
struct CoinContext cc;
int dret;
pp.last_reserve_out_serial_id = 0; // HACK! FIXME!
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"Analyzing coins\n");
/* setup 'cc' */
@ -2632,7 +2642,7 @@ analyze_coins (void *cls)
if (GNUNET_SYSERR ==
edb->select_reserves_out_above_serial_id (edb->cls,
esession,
pp.last_reserve_out_serial_id,
pp.last_withdraw_serial_id,
&withdraw_cb,
&cc))
{
@ -2761,9 +2771,10 @@ incremental_processing (Analysis analysis,
else
{
GNUNET_log (GNUNET_ERROR_TYPE_MESSAGE,
_("Resuming audit at %llu/%llu/%llu/%llu/%llu/%llu\n"),
_("Resuming audit at %llu/%llu/%llu/%llu/%llu/%llu/%llu\n"),
(unsigned long long) pp.last_reserve_in_serial_id,
(unsigned long long) pp.last_reserve_out_serial_id,
(unsigned long long) pp.last_withdraw_serial_id,
(unsigned long long) pp.last_deposit_serial_id,
(unsigned long long) pp.last_melt_serial_id,
(unsigned long long) pp.last_refund_serial_id,
@ -2792,9 +2803,10 @@ incremental_processing (Analysis analysis,
return GNUNET_SYSERR;
}
GNUNET_log (GNUNET_ERROR_TYPE_MESSAGE,
_("Concluded audit step at %llu/%llu/%llu/%llu/%llu/%llu\n\n"),
_("Concluded audit step at %llu/%llu/%llu/%llu/%llu/%llu/%llu\n\n"),
(unsigned long long) pp.last_reserve_in_serial_id,
(unsigned long long) pp.last_reserve_out_serial_id,
(unsigned long long) pp.last_withdraw_serial_id,
(unsigned long long) pp.last_deposit_serial_id,
(unsigned long long) pp.last_melt_serial_id,
(unsigned long long) pp.last_refund_serial_id,

View File

@ -299,6 +299,7 @@ postgres_create_tables (void *cls)
"(master_pub BYTEA PRIMARY KEY CHECK (LENGTH(master_pub)=32)"
",last_reserve_in_serial_id INT8 NOT NULL"
",last_reserve_out_serial_id INT8 NOT NULL"
",last_withdraw_serial_id INT8 NOT NULL"
",last_deposit_serial_id INT8 NOT NULL"
",last_melt_serial_id INT8 NOT NULL"
",last_refund_serial_id INT8 NOT NULL"
@ -562,30 +563,33 @@ postgres_prepare (PGconn *db_conn)
"(master_pub"
",last_reserve_in_serial_id"
",last_reserve_out_serial_id"
",last_withdraw_serial_id"
",last_deposit_serial_id"
",last_melt_serial_id"
",last_refund_serial_id"
",last_wire_out_serial_id"
") VALUES ($1,$2,$3,$4,$5,$6,$7);",
7, NULL);
") VALUES ($1,$2,$3,$4,$5,$6,$7,$8);",
8, NULL);
/* Used in #postgres_update_auditor_progress() */
PREPARE ("auditor_progress_update",
"UPDATE auditor_progress SET "
" last_reserve_in_serial_id=$1"
",last_reserve_out_serial_id=$2"
",last_deposit_serial_id=$3"
",last_melt_serial_id=$4"
",last_refund_serial_id=$5"
",last_wire_out_serial_id=$6"
" WHERE master_pub=$7",
7, NULL);
",last_withdraw_serial_id=$3"
",last_deposit_serial_id=$4"
",last_melt_serial_id=$5"
",last_refund_serial_id=$6"
",last_wire_out_serial_id=$7"
" WHERE master_pub=$8",
8, NULL);
/* Used in #postgres_get_auditor_progress() */
PREPARE ("auditor_progress_select",
"SELECT"
" last_reserve_in_serial_id"
",last_reserve_out_serial_id"
",last_withdraw_serial_id"
",last_deposit_serial_id"
",last_melt_serial_id"
",last_refund_serial_id"
@ -1264,6 +1268,7 @@ postgres_insert_auditor_progress (void *cls,
GNUNET_PQ_query_param_auto_from_type (master_pub),
GNUNET_PQ_query_param_uint64 (&pp->last_reserve_in_serial_id),
GNUNET_PQ_query_param_uint64 (&pp->last_reserve_out_serial_id),
GNUNET_PQ_query_param_uint64 (&pp->last_withdraw_serial_id),
GNUNET_PQ_query_param_uint64 (&pp->last_deposit_serial_id),
GNUNET_PQ_query_param_uint64 (&pp->last_melt_serial_id),
GNUNET_PQ_query_param_uint64 (&pp->last_refund_serial_id),
@ -1309,6 +1314,7 @@ postgres_update_auditor_progress (void *cls,
struct GNUNET_PQ_QueryParam params[] = {
GNUNET_PQ_query_param_uint64 (&pp->last_reserve_in_serial_id),
GNUNET_PQ_query_param_uint64 (&pp->last_reserve_out_serial_id),
GNUNET_PQ_query_param_uint64 (&pp->last_withdraw_serial_id),
GNUNET_PQ_query_param_uint64 (&pp->last_deposit_serial_id),
GNUNET_PQ_query_param_uint64 (&pp->last_melt_serial_id),
GNUNET_PQ_query_param_uint64 (&pp->last_refund_serial_id),
@ -1359,6 +1365,7 @@ postgres_get_auditor_progress (void *cls,
struct GNUNET_PQ_ResultSpec rs[] = {
GNUNET_PQ_result_spec_uint64 ("last_reserve_in_serial_id", &pp->last_reserve_in_serial_id),
GNUNET_PQ_result_spec_uint64 ("last_reserve_out_serial_id", &pp->last_reserve_out_serial_id),
GNUNET_PQ_result_spec_uint64 ("last_withdraw_serial_id", &pp->last_withdraw_serial_id),
GNUNET_PQ_result_spec_uint64 ("last_deposit_serial_id", &pp->last_deposit_serial_id),
GNUNET_PQ_result_spec_uint64 ("last_melt_serial_id", &pp->last_melt_serial_id),
GNUNET_PQ_result_spec_uint64 ("last_refund_serial_id", &pp->last_refund_serial_id),

View File

@ -117,10 +117,15 @@ struct TALER_AUDITORDB_ProgressPoint
uint64_t last_reserve_in_serial_id;
/**
* last_reserve_out_serial_id serial ID of the last withdraw the auditor processed
* last_reserve_out_serial_id serial ID of the last reserve_out the auditor processed
*/
uint64_t last_reserve_out_serial_id;
/**
* last_reserve_out_serial_id serial ID of the last withdraw the auditor processed
*/
uint64_t last_withdraw_serial_id;
/**
* last_deposit_serial_id serial ID of the last deposit the auditor processed
*/