gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[taler-exchange] branch master updated: bugfixes in auditor-sync logic


From: gnunet
Subject: [taler-exchange] branch master updated: bugfixes in auditor-sync logic
Date: Tue, 12 Jan 2021 23:01:09 +0100

This is an automated email from the git hooks/post-receive script.

grothoff pushed a commit to branch master
in repository exchange.

The following commit(s) were added to refs/heads/master by this push:
     new 52513dcc bugfixes in auditor-sync logic
52513dcc is described below

commit 52513dcc2690716bb88cba506088b0422a53eb4a
Author: Christian Grothoff <christian@grothoff.org>
AuthorDate: Tue Jan 12 23:00:57 2021 +0100

    bugfixes in auditor-sync logic
---
 src/auditor/taler-auditor-sync.c            | 69 ++++++++++++++++++++++++-----
 src/exchangedb/irbt_callbacks.c             |  3 +-
 src/exchangedb/plugin_exchangedb_postgres.c | 65 +++++++++++++++++----------
 3 files changed, 101 insertions(+), 36 deletions(-)

diff --git a/src/auditor/taler-auditor-sync.c b/src/auditor/taler-auditor-sync.c
index fae3d218..3a57c37b 100644
--- a/src/auditor/taler-auditor-sync.c
+++ b/src/auditor/taler-auditor-sync.c
@@ -84,10 +84,27 @@ static struct Table
 };
 
 
+/**
+ * Closure for #do_insert.
+ */
+struct InsertContext
+{
+  /**
+   * Database session to use.
+   */
+  struct TALER_EXCHANGEDB_Session *ds;
+
+  /**
+   * Set to error if insertion created an error.
+   */
+  enum GNUNET_DB_QueryStatus qs;
+};
+
+
 /**
  * Function called on data to replicate in the auditor's database.
  *
- * @param cls closure
+ * @param cls closure, a `struct InsertContext`
  * @param td record from an exchange table
  * @return #GNUNET_OK to continue to iterate,
  *         #GNUNET_SYSERR to fail with an error
@@ -96,7 +113,21 @@ static int
 do_insert (void *cls,
            const struct TALER_EXCHANGEDB_TableData *td)
 {
-  // FIXME ...
+  struct InsertContext *ctx = cls;
+  enum GNUNET_DB_QueryStatus qs;
+
+  if (0 >= ctx->qs)
+    return GNUNET_SYSERR;
+  qs = dst->insert_records_by_table (dst->cls,
+                                     ctx->ds,
+                                     td);
+  if (0 >= qs)
+  {
+    ctx->qs = qs;
+    return GNUNET_SYSERR;
+  }
+  actual_size++;
+  return GNUNET_OK;
 }
 
 
@@ -109,7 +140,12 @@ static int
 transact (struct TALER_EXCHANGEDB_Session *ss,
           struct TALER_EXCHANGEDB_Session *ds)
 {
-  if (GNUNET_OK !=
+  struct InsertContext ctx = {
+    .ds = ds,
+    .qs = GNUNET_DB_STATUS_SUCCESS_ONE_RESULT
+  };
+
+  if (0 >
       src->start (src->cls,
                   ss,
                   "lookup src serials"))
@@ -119,7 +155,7 @@ transact (struct TALER_EXCHANGEDB_Session *ss,
                                  ss,
                                  tables[i].rt,
                                  &tables[i].end_serial);
-  if (GNUNET_OK !=
+  if (0 >
       src->commit (src->cls,
                    ss))
     return GNUNET_SYSERR;
@@ -133,7 +169,7 @@ transact (struct TALER_EXCHANGEDB_Session *ss,
                                  ds,
                                  tables[i].rt,
                                  &tables[i].start_serial);
-  if (GNUNET_OK !=
+  if (0 >
       dst->commit (dst->cls,
                    ds))
     return GNUNET_SYSERR;
@@ -160,7 +196,9 @@ transact (struct TALER_EXCHANGEDB_Session *ss,
                                          tables[i].rt,
                                          tables[i].start_serial,
                                          &do_insert,
-                                         ds);
+                                         &ctx);
+      if (ctx.qs < 0)
+        qs = ctx.qs;
       if (GNUNET_DB_STATUS_HARD_ERROR == qs)
       {
         global_ret = 3;
@@ -174,15 +212,22 @@ transact (struct TALER_EXCHANGEDB_Session *ss,
         global_ret = 4;
         return GNUNET_SYSERR;
       }
+      if (0 == ctx.qs)
+        return GNUNET_SYSERR; /* insertion failed, maybe record existed? try 
again */
+      src->rollback (src->cls,
+                     ss);
+      qs = dst->commit (dst->cls,
+                        ds);
+      if (GNUNET_DB_STATUS_SOFT_ERROR == qs)
+        continue;
+      if (GNUNET_DB_STATUS_HARD_ERROR == qs)
+      {
+        global_ret = 5;
+        return GNUNET_SYSERR;
+      }
     }
   }
   /* we do not care about conflicting UPDATEs to src table, so safe to just 
rollback */
-  src->rollback (src->cls,
-                 ss);
-  if (GNUNET_OK !=
-      dst->commit (dst->cls,
-                   ds))
-    return GNUNET_SYSERR;
   printf ("\n");
   return GNUNET_OK;
 }
diff --git a/src/exchangedb/irbt_callbacks.c b/src/exchangedb/irbt_callbacks.c
index 891bd260..127ac6d5 100644
--- a/src/exchangedb/irbt_callbacks.c
+++ b/src/exchangedb/irbt_callbacks.c
@@ -38,12 +38,13 @@ irbt_cb_table_denominations (struct PostgresClosure *pg,
                              const struct TALER_EXCHANGEDB_TableData *td)
 {
   struct GNUNET_HashCode denom_hash;
+  static struct TALER_MasterPublicKeyP master_pub;
   struct GNUNET_PQ_QueryParam params[] = {
     GNUNET_PQ_query_param_uint64 (&td->serial),
     GNUNET_PQ_query_param_auto_from_type (&denom_hash),
     GNUNET_PQ_query_param_rsa_public_key (
       td->details.denominations.denom_pub.rsa_public_key),
-    // GNUNET_PQ_query_param_auto_from_type (&master_pub), // FIXME: !?
+    GNUNET_PQ_query_param_auto_from_type (&master_pub), // FIXME: !?
     GNUNET_PQ_query_param_auto_from_type (
       &td->details.denominations.master_sig),
     TALER_PQ_query_param_absolute_time (
diff --git a/src/exchangedb/plugin_exchangedb_postgres.c 
b/src/exchangedb/plugin_exchangedb_postgres.c
index ff828a70..291647f6 100644
--- a/src/exchangedb/plugin_exchangedb_postgres.c
+++ b/src/exchangedb/plugin_exchangedb_postgres.c
@@ -2056,8 +2056,9 @@ postgres_get_session (void *cls)
         ",master_sig"
         ",denominations_serial"
         " FROM denomination_revocations"
+        " WHERE denom_revocations_serial_id > $1"
         " ORDER BY denom_revocations_serial_id ASC;",
-        0),
+        1),
       GNUNET_PQ_make_prepare ("select_above_serial_by_table_reserves",
                               "SELECT"
                               " reserve_uuid AS serial"
@@ -2068,8 +2069,9 @@ postgres_get_session (void *cls)
                               ",expiration_date"
                               ",gc_date"
                               " FROM reserves"
+                              " WHERE reserve_uuid > $1"
                               " ORDER BY reserve_uuid ASC;",
-                              0),
+                              1),
       GNUNET_PQ_make_prepare ("select_above_serial_by_table_reserves_in",
                               "SELECT"
                               " reserve_in_serial_id AS serial"
@@ -2079,9 +2081,11 @@ postgres_get_session (void *cls)
                               ",sender_account_details"
                               ",exchange_account_section"
                               ",execution_date"
+                              ",reserve_uuid"
                               " FROM reserves_in"
+                              " WHERE reserve_in_serial_id > $1"
                               " ORDER BY reserve_in_serial_id ASC;",
-                              0),
+                              1),
       GNUNET_PQ_make_prepare ("select_above_serial_by_table_reserves_close",
                               "SELECT"
                               " close_uuid AS serial"
@@ -2094,8 +2098,9 @@ postgres_get_session (void *cls)
                               ",closing_fee_frac"
                               ",reserve_uuid"
                               " FROM reserves_close"
+                              " WHERE close_uuid > $1"
                               " ORDER BY close_uuid ASC;",
-                              0),
+                              1),
       GNUNET_PQ_make_prepare ("select_above_serial_by_table_reserves_out",
                               "SELECT"
                               " reserve_out_serial_id AS serial"
@@ -2108,8 +2113,9 @@ postgres_get_session (void *cls)
                               ",reserve_uuid"
                               ",denominations_serial"
                               " FROM reserves_out"
+                              " WHERE reserve_out_serial_id > $1"
                               " ORDER BY reserve_out_serial_id ASC;",
-                              0),
+                              1),
       GNUNET_PQ_make_prepare ("select_above_serial_by_table_auditors",
                               "SELECT"
                               " auditor_uuid AS serial"
@@ -2119,16 +2125,18 @@ postgres_get_session (void *cls)
                               ",is_active"
                               ",last_change"
                               " FROM auditors"
+                              " WHERE auditor_uuid > $1"
                               " ORDER BY auditor_uuid ASC;",
-                              0),
+                              1),
       GNUNET_PQ_make_prepare 
("select_above_serial_by_table_auditor_denom_sigs",
                               "SELECT"
                               " auditor_denom_serial AS serial"
                               ",auditor_uuid"
                               ",denominations_serial"
                               " FROM auditor_denom_sigs"
+                              " WHERE auditor_denom_serial > $1"
                               " ORDER BY auditor_denom_serial ASC;",
-                              0),
+                              1),
       GNUNET_PQ_make_prepare 
("select_above_serial_by_table_exchange_sign_keys",
                               "SELECT"
                               " esk_serial AS serial"
@@ -2138,8 +2146,9 @@ postgres_get_session (void *cls)
                               ",expire_sign"
                               ",expire_legal"
                               " FROM exchange_sign_keys"
+                              " WHERE esk_serial > $1"
                               " ORDER BY esk_serial ASC;",
-                              0),
+                              1),
       GNUNET_PQ_make_prepare (
         "select_above_serial_by_table_signkey_revocations",
         "SELECT"
@@ -2147,8 +2156,9 @@ postgres_get_session (void *cls)
         ",esk_serial"
         ",master_sig"
         " FROM signkey_revocations"
+        " WHERE signkey_revocations_serial_id > $1"
         " ORDER BY signkey_revocations_serial_id ASC;",
-        0),
+        1),
       GNUNET_PQ_make_prepare ("select_above_serial_by_table_known_coins",
                               "SELECT"
                               " known_coin_id AS serial"
@@ -2156,8 +2166,9 @@ postgres_get_session (void *cls)
                               ",denom_sig"
                               ",denominations_serial"
                               " FROM known_coins"
+                              " WHERE known_coin_id > $1"
                               " ORDER BY known_coin_id ASC;",
-                              0),
+                              1),
       GNUNET_PQ_make_prepare (
         "select_above_serial_by_table_refresh_commitments",
         "SELECT"
@@ -2169,8 +2180,9 @@ postgres_get_session (void *cls)
         ",amount_with_fee_frac"
         ",noreveal_index"
         " FROM refresh_commitments"
+        " WHERE melt_serial_id > $1"
         " ORDER BY melt_serial_id ASC;",
-        0),
+        1),
       GNUNET_PQ_make_prepare (
         "select_above_serial_by_table_refresh_revealed_coins",
         "SELECT"
@@ -2185,8 +2197,9 @@ postgres_get_session (void *cls)
         ",denominations_serial"
         " FROM refresh_revealed_coins"
         " JOIN refresh_commitments USING (melt_serial_id)"
+        " WHERE rrc_serial > $1"
         " ORDER BY rrc_serial ASC;",
-        0),
+        1),
       GNUNET_PQ_make_prepare (
         "select_above_serial_by_table_refresh_transfer_keys",
         "SELECT"
@@ -2196,8 +2209,9 @@ postgres_get_session (void *cls)
         ",transfer_privs"
         " FROM refresh_transfer_keys"
         " JOIN refresh_commitments USING (melt_serial_id)"
+        " WHERE rtc_serial > $1"
         " ORDER BY rtc_serial ASC;",
-        0),
+        1),
       GNUNET_PQ_make_prepare ("select_above_serial_by_table_deposits",
                               "SELECT"
                               " deposit_serial_id AS serial"
@@ -2216,8 +2230,9 @@ postgres_get_session (void *cls)
                               ",done"
                               ",known_coin_id"
                               " FROM deposits"
+                              " WHERE deposit_serial_id > $1"
                               " ORDER BY deposit_serial_id ASC;",
-                              0),
+                              1),
       GNUNET_PQ_make_prepare ("select_above_serial_by_table_refunds",
                               "SELECT"
                               " refund_serial_id AS serial"
@@ -2230,8 +2245,9 @@ postgres_get_session (void *cls)
                               ",known_coin_id"
                               " FROM refunds"
                               " JOIN deposits USING (deposit_serial_id)"
+                              " WHERE refund_serial_id > $1"
                               " ORDER BY refund_serial_id ASC;",
-                              0),
+                              1),
       GNUNET_PQ_make_prepare ("select_above_serial_by_table_wire_out",
                               "SELECT"
                               " wireout_uuid AS serial"
@@ -2242,8 +2258,9 @@ postgres_get_session (void *cls)
                               ",amount_val"
                               ",amount_frac"
                               " FROM wire_out"
+                              " WHERE wireout_uuid > $1"
                               " ORDER BY wireout_uuid ASC;",
-                              0),
+                              1),
       GNUNET_PQ_make_prepare (
         "select_above_serial_by_table_aggregation_tracking",
         "SELECT"
@@ -2251,8 +2268,9 @@ postgres_get_session (void *cls)
         ",deposit_serial_id"
         ",wtid_raw"
         " FROM aggregation_tracking"
+        " WHERE aggregation_serial_id > $1"
         " ORDER BY aggregation_serial_id ASC;",
-        0),
+        1),
       GNUNET_PQ_make_prepare ("select_above_serial_by_table_wire_fee",
                               "SELECT"
                               " wire_fee_serial AS serial"
@@ -2265,8 +2283,9 @@ postgres_get_session (void *cls)
                               ",closing_fee_frac"
                               ",master_sig"
                               " FROM wire_fee"
+                              " WHERE wire_fee_serial > $1"
                               " ORDER BY wire_fee_serial ASC;",
-                              0),
+                              1),
       GNUNET_PQ_make_prepare ("select_above_serial_by_table_recoup",
                               "SELECT"
                               " recoup_uuid AS serial"
@@ -2278,8 +2297,9 @@ postgres_get_session (void *cls)
                               ",known_coin_id"
                               ",reserve_out_serial_id"
                               " FROM recoup"
+                              " WHERE recoup_uuid > $1"
                               " ORDER BY recoup_uuid ASC;",
-                              0),
+                              1),
       GNUNET_PQ_make_prepare ("select_above_serial_by_table_recoup_refresh",
                               "SELECT"
                               " recoup_refresh_uuid AS serial"
@@ -2291,8 +2311,9 @@ postgres_get_session (void *cls)
                               ",known_coin_id"
                               ",rrc_serial"
                               " FROM recoup_refresh"
+                              " WHERE recoup_refresh_uuid > $1"
                               " ORDER BY recoup_refresh_uuid ASC;",
-                              0),
+                              1),
       /* For postgres_insert_records_by_table */
       GNUNET_PQ_make_prepare ("insert_into_table_denominations",
                               "INSERT INTO denominations"
@@ -2618,14 +2639,12 @@ postgres_start (void *cls,
     GNUNET_PQ_EXECUTE_STATEMENT_END
   };
 
+  (void) cls;
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
               "Starting transaction named: %s\n",
               name);
-
   postgres_preflight (cls,
                       session);
-
-  (void) cls;
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
               "Starting transaction on %p\n",
               session->conn);

-- 
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]