gnunet-svn
[Top][All Lists]
Advanced

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

[taler-merchant] branch master updated: fix #7025 (presumably)


From: gnunet
Subject: [taler-merchant] branch master updated: fix #7025 (presumably)
Date: Wed, 01 Dec 2021 20:03:27 +0100

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

grothoff pushed a commit to branch master
in repository merchant.

The following commit(s) were added to refs/heads/master by this push:
     new 37ca8796 fix #7025 (presumably)
37ca8796 is described below

commit 37ca87961624a84337c3980b725cc4ebb63745eb
Author: Christian Grothoff <christian@grothoff.org>
AuthorDate: Wed Dec 1 20:03:25 2021 +0100

    fix #7025 (presumably)
---
 .../taler-merchant-httpd_private-get-orders.c        | 18 ++++++++++++++++--
 src/backenddb/merchant-0001.sql                      |  7 +++++++
 src/backenddb/plugin_merchantdb_postgres.c           | 20 ++++++++++++++++++--
 3 files changed, 41 insertions(+), 4 deletions(-)

diff --git a/src/backend/taler-merchant-httpd_private-get-orders.c 
b/src/backend/taler-merchant-httpd_private-get-orders.c
index 85660812..9546ae06 100644
--- a/src/backend/taler-merchant-httpd_private-get-orders.c
+++ b/src/backend/taler-merchant-httpd_private-get-orders.c
@@ -273,7 +273,7 @@ add_order (void *cls,
            struct GNUNET_TIME_Absolute creation_time)
 {
   struct TMH_PendingOrder *po = cls;
-  json_t *contract_terms;
+  json_t *contract_terms = NULL;
   struct TALER_PrivateContractHash h_contract_terms;
   enum GNUNET_DB_QueryStatus qs;
   const char *summary;
@@ -282,6 +282,10 @@ add_order (void *cls,
   bool paid;
   struct TALER_Amount order_amount;
 
+  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+              "Adding order `%s' (%llu) to result set\n",
+              orig_order_id,
+              (unsigned long long) order_serial);
   qs = TMH_db->lookup_order_status_by_serial (TMH_db->cls,
                                               po->instance_id,
                                               order_serial,
@@ -319,6 +323,7 @@ add_order (void *cls,
                                         &contract_terms,
                                         &os,
                                         NULL);
+    GNUNET_break (os == order_serial);
   }
   if (GNUNET_DB_STATUS_SUCCESS_NO_RESULTS == qs)
   {
@@ -332,9 +337,18 @@ add_order (void *cls,
                                &unused,
                                &contract_terms);
   }
+  if (GNUNET_DB_STATUS_SUCCESS_NO_RESULTS == qs)
+  {
+    GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
+                "Order %llu disappeared during iteration. Skipping.\n",
+                (unsigned long long) order_serial);
+    json_decref (contract_terms); /* should still be NULL */
+    GNUNET_free (order_id);
+    return;
+  }
   if (GNUNET_DB_STATUS_SUCCESS_ONE_RESULT != qs)
   {
-    GNUNET_break (0); /* Failed: #7025 */
+    GNUNET_break (0);
     po->result = TALER_EC_GENERIC_DB_FETCH_FAILED;
     json_decref (contract_terms);
     GNUNET_free (order_id);
diff --git a/src/backenddb/merchant-0001.sql b/src/backenddb/merchant-0001.sql
index a4058a8a..aaee8998 100644
--- a/src/backenddb/merchant-0001.sql
+++ b/src/backenddb/merchant-0001.sql
@@ -273,6 +273,13 @@ COMMENT ON COLUMN merchant_contract_terms.pay_deadline
 CREATE INDEX IF NOT EXISTS merchant_contract_terms_by_merchant_and_expiration
   ON merchant_contract_terms
   (merchant_serial,pay_deadline);
+COMMENT ON INDEX merchant_contract_terms_by_merchant_and_expiration
+  IS 'for delete_contract_terms';
+CREATE INDEX IF NOT EXISTS merchant_contract_terms_by_expiration
+  ON merchant_contract_terms
+  (paid,pay_deadline);
+COMMENT ON INDEX merchant_contract_terms_by_expiration
+  IS 'for unlock_contracts';
 CREATE INDEX IF NOT EXISTS merchant_contract_terms_by_merchant_and_payment
   ON merchant_contract_terms
   (merchant_serial,paid);
diff --git a/src/backenddb/plugin_merchantdb_postgres.c 
b/src/backenddb/plugin_merchantdb_postgres.c
index 4f4966f6..7bdbaf63 100644
--- a/src/backenddb/plugin_merchantdb_postgres.c
+++ b/src/backenddb/plugin_merchantdb_postgres.c
@@ -1557,6 +1557,7 @@ postgres_expire_locks (void *cls)
   };
   enum GNUNET_DB_QueryStatus qs1;
   enum GNUNET_DB_QueryStatus qs2;
+  enum GNUNET_DB_QueryStatus qs3;
 
   check_connection (pg);
   qs1 = GNUNET_PQ_eval_prepared_non_select (pg->conn,
@@ -1575,10 +1576,19 @@ postgres_expire_locks (void *cls)
     GNUNET_break (0);
     return;
   }
+  qs3 = GNUNET_PQ_eval_prepared_non_select (pg->conn,
+                                            "unlock_contracts",
+                                            params);
+  if (qs3 < 0)
+  {
+    GNUNET_break (0);
+    return;
+  }
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "Released %d+%d locks\n",
+              "Released %d+%d+%d locks\n",
               qs1,
-              qs2);
+              qs2,
+              qs3);
 }
 
 
@@ -7090,6 +7100,12 @@ postgres_connect (void *cls)
                             "DELETE FROM merchant_orders"
                             " WHERE pay_deadline < $1",
                             1),
+    /* for postgres_expire_locks() */
+    GNUNET_PQ_make_prepare ("unlock_contracts",
+                            "DELETE FROM merchant_contract_terms"
+                            " WHERE NOT paid"
+                            "   AND pay_deadline < $1",
+                            1),
 
     /* for postgres_delete_order() */
     GNUNET_PQ_make_prepare ("delete_order",

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