gnunet-svn
[Top][All Lists]
Advanced

[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.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]