[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[taler-merchant] 160/277: address DB fixes for missing EC values
From: |
gnunet |
Subject: |
[taler-merchant] 160/277: address DB fixes for missing EC values |
Date: |
Sun, 05 Jul 2020 20:51:13 +0200 |
This is an automated email from the git hooks/post-receive script.
grothoff pushed a commit to branch master
in repository merchant.
commit 4089ebeec60159c438c0da04115f416d314713ef
Author: Christian Grothoff <christian@grothoff.org>
AuthorDate: Sun May 31 17:42:39 2020 +0200
address DB fixes for missing EC values
---
src/backenddb/plugin_merchantdb_postgres.c | 53 +++++++++++++++++++-----------
src/include/taler_merchantdb_plugin.h | 10 ++++--
2 files changed, 40 insertions(+), 23 deletions(-)
diff --git a/src/backenddb/plugin_merchantdb_postgres.c
b/src/backenddb/plugin_merchantdb_postgres.c
index 44fbe3d..690f484 100644
--- a/src/backenddb/plugin_merchantdb_postgres.c
+++ b/src/backenddb/plugin_merchantdb_postgres.c
@@ -4285,7 +4285,7 @@ lookup_reserve_for_tip_cb (void *cls,
i))
{
GNUNET_break (0);
- lac->ec = GNUNET_DB_STATUS_HARD_ERROR; // FIXME
+ lac->ec = TALER_EC_TIP_LOOKUP_RESERVE_DB_FAILURE;
return;
}
if (0 >
@@ -4300,9 +4300,11 @@ lookup_reserve_for_tip_cb (void *cls,
TALER_amount_cmp (&remaining,
&lac->required_amount))
continue; /* insufficient balance */
- if ( (expiration.abs_value_us > lac->expiration.abs_value_us) &&
- (GNUNET_TIME_absolute_get_remaining (lac->expiration).rel_value_us >
- MIN_EXPIRATION.rel_value_us) )
+ if ( (lac->expiration.abs_value_us !=
+ GNUNET_TIME_UNIT_FOREVER_ABS.abs_value_us) &&
+ ( (expiration.abs_value_us > lac->expiration.abs_value_us) &&
+ (GNUNET_TIME_absolute_get_remaining (lac->expiration).rel_value_us >
+ MIN_EXPIRATION.rel_value_us) ) )
continue;
lac->expiration = expiration;
lac->reserve_pub = reserve_pub;
@@ -4325,10 +4327,14 @@ lookup_reserve_for_tip_cb (void *cls,
* @param[out] expiration set to when the tip expires
* @return transaction status,
* #TALER_EC_TIP_AUTHORIZE_RESERVE_EXPIRED if the reserve is known but
has expired
- * #TALER_EC_TIP_AUTHORIZE_RESERVE_UNKNOWN if the reserve is not known
+ * #TALER_EC_TIP_AUTHORIZE_RESERVE_NOT_FOUND if the reserve is not known
* #TALER_EC_TIP_AUTHORIZE_INSUFFICIENT_FUNDS if the reserve has
insufficient funds left
- * #TALER_EC_TIP_AUTHORIZE_DB_HARD_ERROR on hard DB errors
- * #TALER_EC_TIP_AUTHORIZE_DB_SOFT_ERROR on soft DB errors (client should
retry)
+ * #TALER_EC_TIP_AUTHORIZE_DB_START_FAILURE on hard DB errors
+ * #TALER_EC_TIP_AUTHORIZE_DB_LOOKUP_RESERVE_FAILURE on hard DB errors
+ * #TALER_EC_TIP_AUTHORIZE_DB_UPDATE_RESERVE_FAILURE on hard DB errors
+ * #TALER_EC_TIP_AUTHORIZE_DB_RESERVE_INVARIANT_FAILURE on hard DB errors
+ * #TALER_EC_TIP_AUTHORIZE_DB_START_FAILURE on hard DB errors
+ * #TALER_EC_TIP_AUTHORIZE_DB_SERIALIZATION_FAILURE on soft DB errors
(client should retry)
* #TALER_EC_NONE upon success
*/
static enum TALER_ErrorCode
@@ -4357,22 +4363,25 @@ postgres_authorize_tip (void *cls,
RETRY:
reserve_pubp = reserve_pub;
if (MAX_RETRIES < ++retries)
- return GNUNET_DB_STATUS_SOFT_ERROR; // FIXME: wrong EC!
+ {
+ GNUNET_break (0);
+ return TALER_EC_TIP_AUTHORIZE_DB_SERIALIZATION_FAILURE;
+ }
if (GNUNET_OK !=
postgres_start (pg,
"enable tip reserve"))
{
GNUNET_break (0);
- return GNUNET_DB_STATUS_HARD_ERROR; // FIXME: wrong EC!
+ return TALER_EC_TIP_AUTHORIZE_DB_START_FAILURE;
}
if (NULL == reserve_pubp)
{
struct GNUNET_PQ_QueryParam params[] = {
GNUNET_PQ_query_param_string (instance_id),
- GNUNET_PQ_query_param_absolute_time (expiration),
TALER_PQ_query_param_amount (amount),
GNUNET_PQ_query_param_end
};
+
qs = GNUNET_PQ_eval_prepared_multi_select (pg->conn,
"lookup_reserve_for_tip",
params,
@@ -4387,13 +4396,18 @@ RETRY:
{
GNUNET_break (0);
postgres_rollback (pg);
- return GNUNET_DB_STATUS_HARD_ERROR; // FIXME: wrong EC!
+ return TALER_EC_TIP_AUTHORIZE_DB_LOOKUP_RESERVE_FAILURE;
}
if (GNUNET_TIME_UNIT_FOREVER_ABS.abs_value_us ==
lac.expiration.abs_value_us)
{
postgres_rollback (pg);
- return 0; // FIXME: EC for 'no reserve available!'
+ return TALER_EC_TIP_AUTHORIZE_DB_RESERVE_NOT_FOUND;
+ }
+ if (0 == GNUNET_TIME_absolute_get_remaining (lac.expiration).rel_value_us)
+ {
+ postgres_rollback (pg);
+ return TALER_EC_TIP_AUTHORIZE_DB_RESERVE_EXPIRED;
}
reserve_pubp = &lac.reserve_pub;
}
@@ -4427,7 +4441,7 @@ RETRY:
{
GNUNET_break (0);
postgres_rollback (pg);
- return GNUNET_DB_STATUS_HARD_ERROR; // FIXME: ec!
+ return TALER_EC_TIP_AUTHORIZE_DB_LOOKUP_RESERVE_FAILURE;
}
}
{
@@ -4440,14 +4454,14 @@ RETRY:
{
GNUNET_break (0);
postgres_rollback (pg);
- return GNUNET_DB_STATUS_HARD_ERROR; // FIXME: EC: invariant failure!
+ return TALER_EC_TIP_AUTHORIZE_DB_RESERVE_INVARIANT_FAILURE;
}
if (0 <
TALER_amount_cmp (&remaining,
amount))
{
postgres_rollback (pg);
- return GNUNET_DB_STATUS_HARD_ERROR; // FIXME: EC: insufficient funds!
+ return TALER_EC_TIP_AUTHORIZE_INSUFFICIENT_FUNDS;
}
}
GNUNET_assert (0 <=
@@ -4474,7 +4488,7 @@ RETRY:
{
GNUNET_break (0);
postgres_rollback (pg);
- return GNUNET_DB_STATUS_HARD_ERROR; // FIXME: ec!
+ return TALER_EC_TIP_AUTHORIZE_DB_UPDATE_RESERVE_FAILURE;
}
}
GNUNET_CRYPTO_random_block (GNUNET_CRYPTO_QUALITY_NONCE,
@@ -4503,7 +4517,7 @@ RETRY:
{
GNUNET_break (0);
postgres_rollback (pg);
- return GNUNET_DB_STATUS_HARD_ERROR; // FIXME: ec!
+ return TALER_EC_TIP_AUTHORIZE_DB_UPDATE_RESERVE_FAILURE;
}
}
qs = postgres_commit (pg);
@@ -4513,7 +4527,7 @@ RETRY:
{
GNUNET_break (0);
postgres_rollback (pg);
- return GNUNET_DB_STATUS_HARD_ERROR; // FIXME: ec!
+ return TALER_EC_TIP_AUTHORIZE_DB_UPDATE_RESERVE_FAILURE;
}
return TALER_EC_NONE;
}
@@ -6930,8 +6944,7 @@ libtaler_plugin_merchantdb_postgres_init (void *cls)
",tips_committed_val"
",tips_committed_frac"
" FROM merchant_tip_reserves"
- " WHERE expiration < $2 "
- " AND exchange_initial_balance_val -
tips_committed_val >= $3"
+ " WHERE exchange_initial_balance_val -
tips_committed_val >= $2"
" AND merchant_serial ="
" (SELECT merchant_serial"
" FROM merchant_instances"
diff --git a/src/include/taler_merchantdb_plugin.h
b/src/include/taler_merchantdb_plugin.h
index ef55729..8f17da7 100644
--- a/src/include/taler_merchantdb_plugin.h
+++ b/src/include/taler_merchantdb_plugin.h
@@ -1697,10 +1697,14 @@ struct TALER_MERCHANTDB_Plugin
* @param[out] expiration set to when the tip expires
* @return transaction status,
* #TALER_EC_TIP_AUTHORIZE_RESERVE_EXPIRED if the reserve is known but
has expired
- * #TALER_EC_TIP_AUTHORIZE_RESERVE_UNKNOWN if the reserve is not known
+ * #TALER_EC_TIP_AUTHORIZE_RESERVE_NOT_FOUND if the reserve is not known
* #TALER_EC_TIP_AUTHORIZE_INSUFFICIENT_FUNDS if the reserve has
insufficient funds left
- * #TALER_EC_TIP_AUTHORIZE_DB_HARD_ERROR on hard DB errors
- * #TALER_EC_TIP_AUTHORIZE_DB_SOFT_ERROR on soft DB errors (client
should retry)
+ * #TALER_EC_TIP_AUTHORIZE_DB_START_FAILURE on hard DB errors
+ * #TALER_EC_TIP_AUTHORIZE_DB_LOOKUP_RESERVE_FAILURE on hard DB errors
+ * #TALER_EC_TIP_AUTHORIZE_DB_UPDATE_RESERVE_FAILURE on hard DB errors
+ * #TALER_EC_TIP_AUTHORIZE_DB_RESERVE_INVARIANT_FAILURE on hard DB
errors
+ * #TALER_EC_TIP_AUTHORIZE_DB_START_FAILURE on hard DB errors
+ * #TALER_EC_TIP_AUTHORIZE_DB_SERIALIZATION_FAILURE on soft DB errors
(client should retry)
* #TALER_EC_NONE upon success
*/
enum TALER_ErrorCode
--
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.
- [taler-merchant] 148/277: fixed inventory locking, test code for transfer lookups, (continued)
- [taler-merchant] 148/277: fixed inventory locking, test code for transfer lookups, gnunet, 2020/07/05
- [taler-merchant] 155/277: fix ftbfs, gnunet, 2020/07/05
- [taler-merchant] 154/277: return creation_time instead of leaving it uninitizlied, mark problematic missing lines, gnunet, 2020/07/05
- [taler-merchant] 158/277: work on tip APIs, gnunet, 2020/07/05
- [taler-merchant] 156/277: implement lookup tip details, gnunet, 2020/07/05
- [taler-merchant] 159/277: add POST /tips logic, gnunet, 2020/07/05
- [taler-merchant] 164/277: fixed db test building and added test for wire fee storage, gnunet, 2020/07/05
- [taler-merchant] 163/277: implement filter, gnunet, 2020/07/05
- [taler-merchant] 165/277: add logic for activation of reserves to merchant backend DB, gnunet, 2020/07/05
- [taler-merchant] 147/277: added more tests for contract terms, deposits, and transfers, gnunet, 2020/07/05
- [taler-merchant] 160/277: address DB fixes for missing EC values,
gnunet <=
- [taler-merchant] 157/277: fix DB use, gnunet, 2020/07/05
- [taler-merchant] 166/277: SQL fixing, gnunet, 2020/07/05
- [taler-merchant] 152/277: wrote db tests for tips/lookups, gnunet, 2020/07/05
- [taler-merchant] 145/277: refactored the existing product and order tests, gnunet, 2020/07/05
- [taler-merchant] 171/277: tests/fixes for tips and pickups in backenddb, gnunet, 2020/07/05
- [taler-merchant] 169/277: implement POST /private/reserves, gnunet, 2020/07/05
- [taler-merchant] 161/277: fix misc issues in client APIs, gnunet, 2020/07/05
- [taler-merchant] 162/277: implement GET /reserves/RPUB, gnunet, 2020/07/05
- [taler-merchant] 170/277: implement POST /private/reserves, gnunet, 2020/07/05
- [taler-merchant] 175/277: avoid amount_zero, use DEFAULT instead, gnunet, 2020/07/05