gnunet-svn
[Top][All Lists]
Advanced

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

[taler-exchange] branch master updated: fix wire-debit auditor


From: gnunet
Subject: [taler-exchange] branch master updated: fix wire-debit auditor
Date: Fri, 23 Aug 2024 19:43:58 +0200

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 81332e229 fix wire-debit auditor
81332e229 is described below

commit 81332e22941497f8181300c4ba43952e5052e7b5
Author: Christian Grothoff <christian@grothoff.org>
AuthorDate: Fri Aug 23 19:43:55 2024 +0200

    fix wire-debit auditor
---
 src/auditor/taler-helper-auditor-wire-debit.c     | 54 +++++++++++++++--------
 src/auditordb/auditor_do_get_auditor_progress.sql | 18 +++++---
 src/auditordb/auditor_do_get_balance.sql          |  7 +--
 src/auditordb/pg_get_auditor_progress.c           |  5 ++-
 src/auditordb/test_auditordb_checkpoints.c        | 13 ++++--
 5 files changed, 65 insertions(+), 32 deletions(-)

diff --git a/src/auditor/taler-helper-auditor-wire-debit.c 
b/src/auditor/taler-helper-auditor-wire-debit.c
index 5d853ebc5..eee944832 100644
--- a/src/auditor/taler-helper-auditor-wire-debit.c
+++ b/src/auditor/taler-helper-auditor-wire-debit.c
@@ -42,13 +42,6 @@
 #include "taler_dbevents.h"
 
 
-/**
- * How much time do we allow the aggregator to lag behind?  If
- * wire transfers should have been made more than #GRACE_PERIOD
- * before, we issue warnings.
- */
-#define GRACE_PERIOD GNUNET_TIME_UNIT_HOURS
-
 /**
  * Maximum number of wire transfers we process per
  * (database) transaction.
@@ -60,16 +53,25 @@
  * timestamps? Should be sufficiently large to avoid bogus reports from deltas
  * created by imperfect clock synchronization and network delay.
  */
-#define TIME_TOLERANCE GNUNET_TIME_relative_multiply 
(GNUNET_TIME_UNIT_MINUTES, \
-                                                      15)
+#define TIME_TOLERANCE GNUNET_TIME_relative_multiply ( \
+          GNUNET_TIME_UNIT_MINUTES, \
+          15)
+
+
+/**
+ * How long do we try to long-poll for bank wire transfers?
+ */
+#define MAX_LONGPOLL_DELAY GNUNET_TIME_relative_multiply ( \
+          GNUNET_TIME_UNIT_HOURS, \
+          1)
 
 
 /**
- * How long do we long-poll for bank wire transfers?
+ * How long do we wait between polling for bank wire transfers at the minimum?
  */
-#define MAX_LONGPOLL_DELAY GNUNET_TIME_relative_multiply 
(GNUNET_TIME_UNIT_HOURS \
-                                                          , \
-                                                          1)
+#define MIN_LONGPOLL_DELAY GNUNET_TIME_relative_multiply ( \
+          GNUNET_TIME_UNIT_MINUTES, \
+          5)
 
 
 /**
@@ -558,6 +560,11 @@ commit (enum GNUNET_DB_QueryStatus qs)
        NULL != wa;
        wa = wa->next)
   {
+    GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+                "Transaction of account %s ends at %llu/%llu\n",
+                wa->ai->section_name,
+                (unsigned long long) wa->last_wire_out_serial_id,
+                (unsigned long long) wa->wire_off_out);
     qs = TALER_ARL_adb->update_auditor_progress (
       TALER_ARL_adb->cls,
       wa->label_wire_out_serial_id,
@@ -1065,6 +1072,7 @@ wire_out_cb (
               GNUNET_TIME_timestamp2s (date),
               TALER_amount2s (amount),
               TALER_B2S (wtid));
+  wa->last_wire_out_serial_id = rowid + 1;
   TALER_ARL_amount_add (&TALER_ARL_USE_AB (total_wire_out),
                         &TALER_ARL_USE_AB (total_wire_out),
                         amount);
@@ -1207,7 +1215,6 @@ wire_out_cb (
                    free_roi (NULL,
                              &key,
                              roi));
-    wa->last_wire_out_serial_id = rowid + 1;
     return ret;
   }
 }
@@ -1290,7 +1297,7 @@ dh_long_poll (void *cls)
 
   wa->dhh_task = NULL;
   wa->dhh_next
-    = GNUNET_TIME_relative_to_absolute (MAX_LONGPOLL_DELAY);
+    = GNUNET_TIME_relative_to_absolute (MIN_LONGPOLL_DELAY);
   GNUNET_assert (NULL == wa->dhh);
   wa->dhh = TALER_BANK_debit_history (
     ctx,
@@ -1322,8 +1329,12 @@ history_debit_cb (
   size_t slen;
 
   wa->dhh = NULL;
-  if (MHD_HTTP_OK == dhr->http_status)
+  if ( (MHD_HTTP_OK == dhr->http_status) &&
+       (0 != dhr->details.ok.details_length) )
+  {
+    /* As we got results, we go again *immediately* */
     wa->dhh_next = GNUNET_TIME_UNIT_ZERO_ABS;
+  }
   GNUNET_assert (NULL == wa->dhh_task);
   wa->dhh_task
     = GNUNET_SCHEDULER_add_at (wa->dhh_next,
@@ -1338,11 +1349,12 @@ history_debit_cb (
         = &dhr->details.ok.details[i];
 
       GNUNET_log (GNUNET_ERROR_TYPE_INFO,
-                  "Analyzing bank DEBIT at %s of %s with WTID %s\n",
+                  "Analyzing bank DEBIT #%llu at %s of %s with WTID %s\n",
+                  (unsigned long long) dd->serial_id,
                   GNUNET_TIME_timestamp2s (dd->execution_date),
                   TALER_amount2s (&dd->amount),
                   TALER_B2S (&dd->wtid));
-      wa->wire_off_out = dd->serial_id;
+      wa->wire_off_out = dd->serial_id + 1;
       slen = strlen (dd->credit_account_uri) + 1;
       roi = GNUNET_malloc (sizeof (struct ReserveOutInfo)
                            + slen);
@@ -1615,7 +1627,13 @@ begin_transaction (void)
       GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qs);
       return qs;
     }
+    GNUNET_assert (2 == qs);
     wa->start_wire_out_serial_id = wa->last_wire_out_serial_id;
+    GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+                "Resuming account %s debit audit at %llu/%llu\n",
+                wa->ai->section_name,
+                (unsigned long long) wa->last_wire_out_serial_id,
+                (unsigned long long) wa->wire_off_out);
   }
   qs = TALER_ARL_adb->get_auditor_progress (
     TALER_ARL_adb->cls,
diff --git a/src/auditordb/auditor_do_get_auditor_progress.sql 
b/src/auditordb/auditor_do_get_auditor_progress.sql
index 9371cf67b..afe6112c2 100644
--- a/src/auditordb/auditor_do_get_auditor_progress.sql
+++ b/src/auditordb/auditor_do_get_auditor_progress.sql
@@ -15,22 +15,28 @@
 --
 -- @author Christian Grothoff
 
-CREATE OR REPLACE FUNCTION auditor_do_get_auditor_progress(
+DROP FUNCTION IF EXISTS auditor_do_get_auditor_progress;
+CREATE FUNCTION auditor_do_get_auditor_progress(
   IN in_keys TEXT[])
-RETURNS INT8
+RETURNS SETOF INT8
 LANGUAGE plpgsql
 AS $$
 DECLARE
-  my_key TEXT;
+  ini_key TEXT;
   my_off INT8;
 BEGIN
-  FOREACH my_key IN ARRAY in_keys
+  FOREACH ini_key IN ARRAY in_keys
   LOOP
     SELECT progress_offset
       INTO my_off
       FROM auditor_progress
-      WHERE progress_key=my_key;
-    RETURN my_off;
+      WHERE progress_key=ini_key;
+    IF FOUND
+    THEN
+      RETURN NEXT my_off;
+    ELSE
+      RETURN NEXT NULL;
+    END IF;
   END LOOP;
 END $$;
 
diff --git a/src/auditordb/auditor_do_get_balance.sql 
b/src/auditordb/auditor_do_get_balance.sql
index 782a31f89..ad9ed0108 100644
--- a/src/auditordb/auditor_do_get_balance.sql
+++ b/src/auditordb/auditor_do_get_balance.sql
@@ -15,9 +15,10 @@
 --
 -- @author Christian Grothoff
 
+DROP FUNCTION IF EXISTS auditor_do_get_balance;
 CREATE OR REPLACE FUNCTION auditor_do_get_balance(
   IN in_keys TEXT[])
-RETURNS taler_amount
+RETURNS SETOF taler_amount
 LANGUAGE plpgsql
 AS $$
 DECLARE
@@ -36,9 +37,9 @@ BEGIN
     THEN
         my_val.val = my_rec.val;
         my_val.frac = my_rec.frac;
-        RETURN my_val;
+        RETURN NEXT my_val;
     ELSE
-        RETURN NULL;
+        RETURN NEXT NULL;
     END IF;
   END LOOP;
 END $$;
diff --git a/src/auditordb/pg_get_auditor_progress.c 
b/src/auditordb/pg_get_auditor_progress.c
index 3742d2eb6..b13842b1d 100644
--- a/src/auditordb/pg_get_auditor_progress.c
+++ b/src/auditordb/pg_get_auditor_progress.c
@@ -75,7 +75,7 @@ auditor_progress_cb (void *cls,
 {
   struct AuditorProgressContext *ctx = cls;
 
-  GNUNET_assert (num_results <= ctx->len);
+  GNUNET_assert (num_results == ctx->len);
   for (unsigned int i = 0; i < num_results; i++)
   {
     bool is_missing = false;
@@ -142,7 +142,6 @@ TAH_PG_get_auditor_progress (void *cls,
 
     keys[0] = progress_key;
     dsts[0] = progress_offset;
-
     va_start (ap,
               progress_offset);
     while (off < cnt)
@@ -163,6 +162,7 @@ TAH_PG_get_auditor_progress (void *cls,
              " auditor_do_get_auditor_progress AS progress_offset"
              " FROM auditor_do_get_auditor_progress "
              "($1);");
+    ctx.off = 0;
     qs = GNUNET_PQ_eval_prepared_multi_select (pg->conn,
                                                "get_auditor_progress",
                                                params,
@@ -173,6 +173,7 @@ TAH_PG_get_auditor_progress (void *cls,
       return GNUNET_DB_STATUS_HARD_ERROR;
     if (qs < 0)
       return qs;
+    GNUNET_assert (ctx.off == cnt);
     return qs;
   }
 }
diff --git a/src/auditordb/test_auditordb_checkpoints.c 
b/src/auditordb/test_auditordb_checkpoints.c
index 639868867..2000a674a 100644
--- a/src/auditordb/test_auditordb_checkpoints.c
+++ b/src/auditordb/test_auditordb_checkpoints.c
@@ -179,15 +179,23 @@ run (void *cls)
    * Test3 = 245
    * Let's make sure that's the case! */
   uint64_t value;
+  uint64_t valueNX;
+  uint64_t value3;
   GNUNET_assert (
-    GNUNET_DB_STATUS_SUCCESS_ONE_RESULT ==
+    3 ==
     plugin->get_auditor_progress (
       plugin->cls,
       "Test",
       &value,
+      "TestNX",
+      &valueNX,
+      "Test3",
+      &value3,
       NULL)
     );
   GNUNET_assert (value == 42);
+  GNUNET_assert (valueNX == 0);
+  GNUNET_assert (value3 == 245);
 
   /* Ensure the rest are also at their expected values */
   GNUNET_assert (
@@ -323,8 +331,7 @@ run (void *cls)
       &a1,
       NULL)
     );
-  GNUNET_assert (GNUNET_OK !=
-                 TALER_amount_is_valid (&a1));
+  GNUNET_assert (TALER_amount_is_zero (&a1));
 
   result = 0;
   GNUNET_break (0 <=

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