gnunet-svn
[Top][All Lists]
Advanced

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

[taler-exchange] branch master updated: -misc bugfixes


From: gnunet
Subject: [taler-exchange] branch master updated: -misc bugfixes
Date: Sun, 05 Sep 2021 23:09:36 +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 87f5d821 -misc bugfixes
87f5d821 is described below

commit 87f5d8211e5c086bf33a0e974fc131a94625af00
Author: Christian Grothoff <christian@grothoff.org>
AuthorDate: Sun Sep 5 23:09:34 2021 +0200

    -misc bugfixes
---
 src/bank-lib/bank_api_transfer.c           |  1 -
 src/bank-lib/fakebank.c                    |  1 +
 src/benchmark/benchmark.conf               | 20 +++-----
 src/benchmark/taler-aggregator-benchmark.c |  4 +-
 src/exchange/taler-exchange-transfer.c     | 81 ++++++++++++++++++++++++------
 5 files changed, 76 insertions(+), 31 deletions(-)

diff --git a/src/bank-lib/bank_api_transfer.c b/src/bank-lib/bank_api_transfer.c
index da9ff4f5..7b8c74b2 100644
--- a/src/bank-lib/bank_api_transfer.c
+++ b/src/bank-lib/bank_api_transfer.c
@@ -357,7 +357,6 @@ TALER_BANK_transfer (
     return NULL;
   }
   json_decref (transfer_obj);
-
   th->job = GNUNET_CURL_job_add2 (ctx,
                                   eh,
                                   th->post_ctx.headers,
diff --git a/src/bank-lib/fakebank.c b/src/bank-lib/fakebank.c
index eb6f4c79..6a6278ed 100644
--- a/src/bank-lib/fakebank.c
+++ b/src/bank-lib/fakebank.c
@@ -988,6 +988,7 @@ make_transfer (
         return GNUNET_SYSERR;
       }
       *ret_row_id = t->row_id;
+      *timestamp = t->date;
       GNUNET_assert (0 ==
                      pthread_mutex_unlock (&h->uuid_map_lock));
       return GNUNET_OK;
diff --git a/src/benchmark/benchmark.conf b/src/benchmark/benchmark.conf
index c38981dd..5199ee87 100644
--- a/src/benchmark/benchmark.conf
+++ b/src/benchmark/benchmark.conf
@@ -54,28 +54,20 @@ MAX_DEBT_BANK = EUR:1000000000000000.0
 [benchmark]
 USER_PAYTO_URI = payto://x-taler-bank/localhost:8082/42
 
-[exchange-account-2]
-# What is the payto://-URL of the exchange (to generate wire response)
-PAYTO_URI = "payto://x-taler-bank/localhost:8082/Exchange"
+[exchange-account-test]
+# What is the bank account (with the "Taler Bank" demo system)? Must end with 
"/".
+PAYTO_URI = "payto://x-taler-bank/localhost/Exchange"
+# Authentication information for basic authentication
 ENABLE_DEBIT = YES
 ENABLE_CREDIT = YES
 
-[exchange-accountcredentials-2]
-# What is the bank account (with the "Taler Bank" demo system)? Must end with 
"/".
-WIRE_GATEWAY_URL = http://localhost:8082/taler-wire-gateway/Exchange/
-# Authentication information for basic authentication
+[exchange-accountcredentials-test]
+WIRE_GATEWAY_URL = http://localhost:8082/Exchange/
 WIRE_GATEWAY_AUTH_METHOD = "basic"
 USERNAME = Exchange
 PASSWORD = x
 
 
-[exchange-account-aggregator]
-# What is the payto://-URL of the exchange (to generate wire response)
-PAYTO_URI = "payto://aggregator-benchmark/exchangeacc"
-ENABLE_DEBIT = YES
-
-
-
 # Sections starting with "coin_" specify which denominations
 # the exchange should support (and their respective fee structure)
 [coin_eur_ct_1]
diff --git a/src/benchmark/taler-aggregator-benchmark.c 
b/src/benchmark/taler-aggregator-benchmark.c
index 283ee23b..e432d8f5 100644
--- a/src/benchmark/taler-aggregator-benchmark.c
+++ b/src/benchmark/taler-aggregator-benchmark.c
@@ -370,7 +370,7 @@ work (void *cls)
   rnd2 = GNUNET_CRYPTO_random_u64 (GNUNET_CRYPTO_QUALITY_NONCE,
                                    UINT64_MAX);
   GNUNET_asprintf (&acc,
-                   "payto://aggregator-benchmark/account-%llX-%llX",
+                   "payto://x-taler-bank/localhost:8082/account-%llX-%llX",
                    (unsigned long long) rnd1,
                    (unsigned long long) rnd2);
   json_wire = GNUNET_JSON_PACK (
@@ -548,7 +548,7 @@ run (void *cls,
               sizeof (master_sig));
       if (0 >
           plugin->insert_wire_fee (plugin->cls,
-                                   "aggregator-benchmark",
+                                   "x-taler-bank",
                                    ws,
                                    we,
                                    &wire_fee,
diff --git a/src/exchange/taler-exchange-transfer.c 
b/src/exchange/taler-exchange-transfer.c
index 46093d89..f3bd16da 100644
--- a/src/exchange/taler-exchange-transfer.c
+++ b/src/exchange/taler-exchange-transfer.c
@@ -33,6 +33,11 @@
  */
 #define MAXIMUM_BATCH_SIZE 1024
 
+/**
+ * How often will we retry a request (given certain
+ * HTTP status codes) before giving up?
+ */
+#define MAX_RETRIES 16
 
 /**
  * Information about our work shard.
@@ -104,6 +109,17 @@ struct WirePrepareData
    */
   unsigned long long row_id;
 
+  /**
+   * Number of bytes allocated after this struct
+   * with the prewire data.
+   */
+  size_t buf_size;
+
+  /**
+   * How often did we retry so far?
+   */
+  unsigned int retries;
+
 };
 
 
@@ -217,16 +233,6 @@ static void
 shutdown_task (void *cls)
 {
   (void) cls;
-  if (NULL != ctx)
-  {
-    GNUNET_CURL_fini (ctx);
-    ctx = NULL;
-  }
-  if (NULL != rc)
-  {
-    GNUNET_CURL_gnunet_rc_destroy (rc);
-    rc = NULL;
-  }
   GNUNET_log (GNUNET_ERROR_TYPE_INFO,
               "Running shutdown\n");
   if (NULL != task)
@@ -241,6 +247,16 @@ shutdown_task (void *cls)
   db_plugin = NULL;
   TALER_EXCHANGEDB_unload_accounts ();
   cfg = NULL;
+  if (NULL != ctx)
+  {
+    GNUNET_CURL_fini (ctx);
+    ctx = NULL;
+  }
+  if (NULL != rc)
+  {
+    GNUNET_CURL_gnunet_rc_destroy (rc);
+    rc = NULL;
+  }
 }
 
 
@@ -410,6 +426,36 @@ wire_confirm_cb (void *cls,
                                                    wpd->row_id);
     /* continued below */
     break;
+  case 0:
+  case MHD_HTTP_TOO_MANY_REQUESTS:
+  case MHD_HTTP_INTERNAL_SERVER_ERROR:
+  case MHD_HTTP_BAD_GATEWAY:
+  case MHD_HTTP_SERVICE_UNAVAILABLE:
+  case MHD_HTTP_GATEWAY_TIMEOUT:
+    wpd->retries++;
+    if (wpd->retries < MAX_RETRIES)
+    {
+      GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
+                  "Wire transfer %llu failed (%u), trying again\n",
+                  (unsigned long long) wpd->row_id,
+                  http_status_code);
+      wpd->eh = TALER_BANK_transfer (ctx,
+                                     wpd->wa->auth,
+                                     &wpd[1],
+                                     wpd->buf_size,
+                                     &wire_confirm_cb,
+                                     wpd);
+      return;
+    }
+    GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+                "Wire transaction %llu failed: %u/%d\n",
+                (unsigned long long) wpd->row_id,
+                http_status_code,
+                ec);
+    db_plugin->rollback (db_plugin->cls);
+    global_ret = EXIT_FAILURE;
+    GNUNET_SCHEDULER_shutdown ();
+    return;
   default:
     GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
                 "Wire transfer %llu failed: %u/%d\n",
@@ -469,7 +515,6 @@ wire_prepare_cb (void *cls,
                  const char *buf,
                  size_t buf_size)
 {
-  const struct TALER_EXCHANGEDB_AccountInfo *wa;
   struct WirePrepareData *wpd;
 
   (void) cls;
@@ -491,7 +536,12 @@ wire_prepare_cb (void *cls,
     GNUNET_SCHEDULER_shutdown ();
     return;
   }
-  wpd = GNUNET_new (struct WirePrepareData);
+  wpd = GNUNET_malloc (sizeof (struct WirePrepareData)
+                       + buf_size);
+  memcpy (&wpd[1],
+          buf,
+          buf_size);
+  wpd->buf_size = buf_size;
   wpd->row_id = rowid;
   GNUNET_CONTAINER_DLL_insert (wpd_head,
                                wpd_tail,
@@ -510,9 +560,8 @@ wire_prepare_cb (void *cls,
     GNUNET_SCHEDULER_shutdown ();
     return;
   }
-  wa = wpd->wa;
   wpd->eh = TALER_BANK_transfer (ctx,
-                                 wa->auth,
+                                 wpd->wa->auth,
                                  buf,
                                  buf_size,
                                  &wire_confirm_cb,
@@ -580,6 +629,10 @@ run_transfers (void *cls)
                                      NULL);
     return;
   }
+  /* cap number of parallel connections to a reasonable
+     limit for concurrent requests to the bank */
+  limit = GNUNET_MIN (limit,
+                      256);
   GNUNET_log (GNUNET_ERROR_TYPE_INFO,
               "Checking for %lld pending wire transfers [%llu-...)\n",
               (long long) limit,

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