fixing misc auditor issues

This commit is contained in:
Christian Grothoff 2017-03-20 02:29:33 +01:00
parent 7115eda899
commit a38fa32484
No known key found for this signature in database
GPG Key ID: 939E6BE1E29FC3CC
4 changed files with 1285 additions and 997 deletions

File diff suppressed because it is too large Load Diff

View File

@ -26,13 +26,17 @@
#include <pthread.h>
#include <libpq-fe.h>
#define LOG(kind,...) GNUNET_log_from (kind, "taler-auditordb-postgres", __VA_ARGS__)
/**
* Log a query error.
*
* @param result PQ result object of the query that failed
*/
#define QUERY_ERR(result) \
GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Query failed at %s:%u: %s (%s)\n", __FILE__, __LINE__, PQresultErrorMessage (result), PQresStatus (PQresultStatus (result)))
LOG (GNUNET_ERROR_TYPE_ERROR, "Query failed at %s:%u: %s (%s)\n", __FILE__, __LINE__, PQresultErrorMessage (result), PQresStatus (PQresultStatus (result)))
/**
@ -42,7 +46,7 @@
*/
#define BREAK_DB_ERR(result) do { \
GNUNET_break (0); \
GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Database failure: %s (%s)\n", PQresultErrorMessage (result), PQresStatus (PQresultStatus (result))); \
LOG (GNUNET_ERROR_TYPE_ERROR, "Database failure: %s (%s)\n", PQresultErrorMessage (result), PQresStatus (PQresultStatus (result))); \
} while (0)
@ -152,10 +156,9 @@ static void
pq_notice_processor_cb (void *arg,
const char *message)
{
GNUNET_log_from (GNUNET_ERROR_TYPE_INFO,
"pq",
"%s",
message);
LOG (GNUNET_ERROR_TYPE_INFO,
"%s",
message);
}
@ -205,10 +208,30 @@ postgres_drop_tables (void *cls)
conn = connect_to_postgres (pc);
if (NULL == conn)
return GNUNET_SYSERR;
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
"Dropping ALL tables\n");
LOG (GNUNET_ERROR_TYPE_INFO,
"Dropping ALL tables\n");
/* TODO: we probably need a bit more fine-grained control
over drops for the '-r' option of taler-auditor; also,
for the testcase, we currently fail to drop the
auditor_denominations table... */
SQLEXEC_ (conn,
"DROP TABLE IF EXISTS test;");
"DROP TABLE IF EXISTS predicted_result;");
SQLEXEC_ (conn,
"DROP TABLE IF EXISTS historic_ledger;");
SQLEXEC_ (conn,
"DROP TABLE IF EXISTS historic_losses;");
SQLEXEC_ (conn,
"DROP TABLE IF EXISTS historic_denomination_revenue;");
SQLEXEC_ (conn,
"DROP TABLE IF EXISTS balance_summary;");
SQLEXEC_ (conn,
"DROP TABLE IF EXISTS denomination_pending;");
SQLEXEC_ (conn,
"DROP TABLE IF EXISTS auditor_reserve_balance;");
SQLEXEC_ (conn,
"DROP TABLE IF EXISTS auditor_reserves;");
SQLEXEC_ (conn,
"DROP TABLE IF EXISTS auditor_progress;");
PQfinish (conn);
return GNUNET_OK;
SQLEXEC_fail:
@ -944,7 +967,7 @@ postgres_start (void *cls,
PQresultStatus (result))
{
TALER_LOG_ERROR ("Failed to start transaction: %s\n",
PQresultErrorMessage (result));
PQresultErrorMessage (result));
GNUNET_break (0);
PQclear (result);
return GNUNET_SYSERR;
@ -1016,9 +1039,9 @@ postgres_commit (void *cls,
PQclear (result);
return GNUNET_NO;
}
GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
"Database commit failure: %s\n",
sqlstate);
LOG (GNUNET_ERROR_TYPE_ERROR,
"Database commit failure: %s\n",
sqlstate);
PQclear (result);
return GNUNET_SYSERR;
}
@ -1175,8 +1198,8 @@ postgres_select_denomination_info (void *cls,
int nrows = PQntuples (result);
if (0 == nrows)
{
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"postgres_select_denomination_info() returned 0 matching rows\n");
LOG (GNUNET_ERROR_TYPE_DEBUG,
"postgres_select_denomination_info() returned 0 matching rows\n");
PQclear (result);
return GNUNET_NO;
}
@ -1357,8 +1380,8 @@ postgres_get_auditor_progress (void *cls,
int nrows = PQntuples (result);
if (0 == nrows)
{
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"postgres_get_auditor_progress() returned 0 matching rows\n");
LOG (GNUNET_ERROR_TYPE_DEBUG,
"postgres_get_auditor_progress() returned 0 matching rows\n");
PQclear (result);
return GNUNET_NO;
}
@ -1574,8 +1597,8 @@ postgres_get_reserve_info (void *cls,
int nrows = PQntuples (result);
if (0 == nrows)
{
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"postgres_get_reserve_info() returned 0 matching rows\n");
LOG (GNUNET_ERROR_TYPE_DEBUG,
"postgres_get_reserve_info() returned 0 matching rows\n");
PQclear (result);
return GNUNET_NO;
}
@ -1732,8 +1755,8 @@ postgres_get_reserve_summary (void *cls,
int nrows = PQntuples (result);
if (0 == nrows)
{
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"postgres_get_reserve_summary() returned 0 matching rows\n");
LOG (GNUNET_ERROR_TYPE_DEBUG,
"postgres_get_reserve_summary() returned 0 matching rows\n");
PQclear (result);
return GNUNET_NO;
}
@ -1882,8 +1905,8 @@ postgres_get_denomination_balance (void *cls,
int nrows = PQntuples (result);
if (0 == nrows)
{
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"postgres_get_denomination_balance() returned 0 matching rows\n");
LOG (GNUNET_ERROR_TYPE_DEBUG,
"postgres_get_denomination_balance() returned 0 matching rows\n");
PQclear (result);
return GNUNET_NO;
}
@ -2068,8 +2091,8 @@ postgres_get_balance_summary (void *cls,
int nrows = PQntuples (result);
if (0 == nrows)
{
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"postgres_get_balance_summary() returned 0 matching rows\n");
LOG (GNUNET_ERROR_TYPE_DEBUG,
"postgres_get_balance_summary() returned 0 matching rows\n");
PQclear (result);
return GNUNET_NO;
}
@ -2183,8 +2206,8 @@ postgres_select_historic_denom_revenue (void *cls,
int nrows = PQntuples (result);
if (0 == nrows)
{
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"postgres_select_historic_denom_revenue() returned 0 matching rows\n");
LOG (GNUNET_ERROR_TYPE_DEBUG,
"postgres_select_historic_denom_revenue() returned 0 matching rows\n");
PQclear (result);
return GNUNET_NO;
}
@ -2315,8 +2338,8 @@ postgres_select_historic_losses (void *cls,
int nrows = PQntuples (result);
if (0 == nrows)
{
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"postgres_select_historic_losses() returned 0 matching rows\n");
LOG (GNUNET_ERROR_TYPE_DEBUG,
"postgres_select_historic_losses() returned 0 matching rows\n");
PQclear (result);
return GNUNET_NO;
}
@ -2444,8 +2467,8 @@ postgres_select_historic_reserve_revenue (void *cls,
int nrows = PQntuples (result);
if (0 == nrows)
{
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"postgres_select_historic_reserve_revenue() returned 0 matching rows\n");
LOG (GNUNET_ERROR_TYPE_DEBUG,
"postgres_select_historic_reserve_revenue() returned 0 matching rows\n");
PQclear (result);
return GNUNET_NO;
}
@ -2605,8 +2628,8 @@ postgres_get_predicted_balance (void *cls,
int nrows = PQntuples (result);
if (0 == nrows)
{
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"postgres_get_predicted_balance() returned 0 matching rows\n");
LOG (GNUNET_ERROR_TYPE_DEBUG,
"postgres_get_predicted_balance() returned 0 matching rows\n");
PQclear (result);
return GNUNET_NO;
}

View File

@ -297,6 +297,18 @@ TALER_amount_normalize (struct TALER_Amount *amount);
char *
TALER_amount_to_string (const struct TALER_Amount *amount);
/**
* Convert amount to string.
*
* @param amount amount to convert to string
* @return statically allocated buffer with string representation,
* NULL if the @a amount was invalid
*/
const char *
TALER_amount2s (const struct TALER_Amount *amount);
#if 0 /* keep Emacsens' auto-indent happy */
{
#endif

View File

@ -529,9 +529,9 @@ char *
TALER_amount_to_string (const struct TALER_Amount *amount)
{
char *result;
unsigned int i;
uint32_t n;
char tail[TALER_AMOUNT_FRAC_LEN + 1];
unsigned int i;
struct TALER_Amount norm;
if (GNUNET_YES != TALER_amount_is_valid (amount))
@ -564,6 +564,54 @@ TALER_amount_to_string (const struct TALER_Amount *amount)
}
/**
* Convert amount to string.
*
* @param amount amount to convert to string
* @return statically allocated buffer with string representation,
* NULL if the @a amount was invalid
*/
const char *
TALER_amount2s (const struct TALER_Amount *amount)
{
static char result[TALER_AMOUNT_FRAC_LEN + TALER_CURRENCY_LEN + 3 + 12];
unsigned int i;
uint32_t n;
char tail[TALER_AMOUNT_FRAC_LEN + 1];
struct TALER_Amount norm;
if (GNUNET_YES != TALER_amount_is_valid (amount))
return NULL;
norm = *amount;
GNUNET_break (GNUNET_SYSERR !=
TALER_amount_normalize (&norm));
if (0 != (n = norm.fraction))
{
for (i = 0; (i < TALER_AMOUNT_FRAC_LEN) && (0 != n); i++)
{
tail[i] = '0' + (n / (TALER_AMOUNT_FRAC_BASE / 10));
n = (n * 10) % (TALER_AMOUNT_FRAC_BASE);
}
tail[i] = '\0';
GNUNET_snprintf (result,
sizeof (result),
"%s:%llu.%s",
norm.currency,
(unsigned long long) norm.value,
tail);
}
else
{
GNUNET_snprintf (result,
sizeof (result),
"%s:%llu",
norm.currency,
(unsigned long long) norm.value);
}
return result;
}
/**
* Divide an amount by a float. Note that this function
* may introduce a rounding error!