gnunet-svn
[Top][All Lists]
Advanced

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

[taler-exchange] 01/02: add batch8


From: gnunet
Subject: [taler-exchange] 01/02: add batch8
Date: Wed, 21 Dec 2022 11:30:15 +0100

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

joseph-xu pushed a commit to branch master
in repository exchange.

commit 802dbaefc984807c54000bd9f695254690dbdcd5
Author: Joseph <Joseph.xu@efrei.net>
AuthorDate: Tue Dec 20 09:09:03 2022 -0500

    add batch8
---
 .../exchange_do_batch4_reserves_in_insert.sql      | 153 +++--------
 .../exchange_do_batch_reserves_update.sql          |   4 +-
 src/exchangedb/pg_batch2_reserves_in_insert.c      | 291 ++++++++++++++++++++-
 src/exchangedb/procedures.sql.in                   |   2 +
 src/exchangedb/test_exchangedb_by_j.c              |   8 +-
 5 files changed, 332 insertions(+), 126 deletions(-)

diff --git a/src/exchangedb/exchange_do_batch4_reserves_in_insert.sql 
b/src/exchangedb/exchange_do_batch4_reserves_in_insert.sql
index ece92698..bf3b2eaa 100644
--- a/src/exchangedb/exchange_do_batch4_reserves_in_insert.sql
+++ b/src/exchangedb/exchange_do_batch4_reserves_in_insert.sql
@@ -72,15 +72,10 @@ LANGUAGE plpgsql
 AS $$
 DECLARE
   curs_reserve_exist refcursor;
-
 DECLARE
-  curs_transaction_exist CURSOR
-  FOR SELECT reserve_pub
-  FROM reserves_in
-  WHERE in_reserve_pub = reserves_in.reserve_pub
-  OR in2_reserve_pub = reserves_in.reserve_pub
-  OR in3_reserve_pub = reserves_in.reserve_pub
-  OR in4_reserve_pub = reserves_in.reserve_pub;
+  k INT8;
+DECLARE
+  curs_transaction_exist refcursor;
 DECLARE
   i RECORD;
 
@@ -98,7 +93,7 @@ BEGIN
   ruuid2=0;
   ruuid3=0;
   ruuid4=0;
-
+  k=0;
   --SIMPLE INSERT ON CONFLICT DO NOTHING
   INSERT INTO wire_targets
     (wire_target_h_payto
@@ -147,104 +142,41 @@ BEGIN
      RETURNING reserve_uuid,reserve_pub)
     SELECT * FROM reserve_changes;
 
-  FETCH FROM curs_reserve_exist INTO i;
-  IF FOUND
-  THEN
-    IF in_reserve_pub = i.reserve_pub
-    THEN
-       out_reserve_found = FALSE;
-       ruuid = i.reserve_uuid;
-    END IF;
-    IF in2_reserve_pub = i.reserve_pub
-    THEN
-        out_reserve_found2 = FALSE;
-        ruuid2 = i.reserve_uuid;
-    END IF;
-    IF in3_reserve_pub = i.reserve_pub
-    THEN
-        out_reserve_found3 = FALSE;
-        ruuid3 = i.reserve_uuid;
-    END IF;
-    IF in4_reserve_pub = i.reserve_pub
-    THEN
-        out_reserve_found4 = FALSE;
-        ruuid4 = i.reserve_uuid;
-    END IF;
+  WHILE k < 4 LOOP
     FETCH FROM curs_reserve_exist INTO i;
     IF FOUND
     THEN
       IF in_reserve_pub = i.reserve_pub
       THEN
-        out_reserve_found = FALSE;
-        ruuid = i.reserve_uuid;
-      END IF;
-      IF in2_reserve_pub = i.reserve_pub
-      THEN
-        out_reserve_found2 = FALSE;
-        ruuid2 = i.reserve_uuid;
-      END IF;
-      IF in3_reserve_pub = i.reserve_pub
-      THEN
-        out_reserve_found3 = FALSE;
-        ruuid3 = i.reserve_uuid;
-      END IF;
-      IF in4_reserve_pub = i.reserve_pub
-      THEN
-        out_reserve_found4 = FALSE;
-        ruuid4 = i.reserve_uuid;
-      END IF;
-    END IF;
-    FETCH FROM curs_reserve_exist INTO i;
-    IF FOUND
-    THEN
-      IF in_reserve_pub = i.reserve_pub
-      THEN
-          out_reserve_found = FALSE;
-          ruuid = i.reserve_uuid;
+         out_reserve_found = FALSE;
+         ruuid = i.reserve_uuid;
+         k = k+1;
       END IF;
       IF in2_reserve_pub = i.reserve_pub
       THEN
           out_reserve_found2 = FALSE;
           ruuid2 = i.reserve_uuid;
+          k=k+1;
       END IF;
       IF in3_reserve_pub = i.reserve_pub
       THEN
           out_reserve_found3 = FALSE;
           ruuid3 = i.reserve_uuid;
+          k=k+1;
       END IF;
       IF in4_reserve_pub = i.reserve_pub
       THEN
           out_reserve_found4 = FALSE;
           ruuid4 = i.reserve_uuid;
+          k=k+1;
       END IF;
     END IF;
-    FETCH FROM curs_reserve_exist INTO i;
-    IF FOUND
-    THEN
-      IF in_reserve_pub = i.reserve_pub
-      THEN
-          out_reserve_found = FALSE;
-          ruuid = i.reserve_uuid;
-      END IF;
-      IF in2_reserve_pub = i.reserve_pub
-      THEN
-          out_reserve_found2 = FALSE;
-          ruuid2 = i.reserve_uuid;
-      END IF;
-      IF in3_reserve_pub = i.reserve_pub
-      THEN
-          out_reserve_found3 = FALSE;
-          ruuid3 = i.reserve_uuid;
-      END IF;
-      IF in4_reserve_pub = i.reserve_pub
-      THEN
-          out_reserve_found4 = FALSE;
-          ruuid4 = i.reserve_uuid;
-      END IF;
-    END IF;
-  END IF;
+  END LOOP;
   CLOSE curs_reserve_exist;
-  IF out_reserve_found AND out_reserve_found2 AND out_reserve_found3 AND 
out_reserve_found4
+  IF out_reserve_found
+  AND out_reserve_found2
+  AND out_reserve_found3
+  AND out_reserve_found4
   THEN
       RETURN;
   END IF;
@@ -254,7 +186,10 @@ BEGIN
   PERFORM pg_notify(in3_notify, NULL);
   PERFORM pg_notify(in4_notify, NULL);
 
-  INSERT INTO reserves_in
+  k=0;
+  OPEN curs_transaction_exist FOR
+  WITH reserve_in_changes AS (
+    INSERT INTO reserves_in
     (reserve_pub
     ,wire_reference
     ,credit_val
@@ -262,7 +197,7 @@ BEGIN
     ,exchange_account_section
     ,wire_source_h_payto
     ,execution_date)
-    VALUES
+      VALUES
     (in_reserve_pub
     ,in_wire_ref
     ,in_credit_val
@@ -291,43 +226,39 @@ BEGIN
     ,in4_exchange_account_name
     ,in4_wire_source_h_payto
     ,in_expiration_date)
-    ON CONFLICT DO NOTHING;
-  IF FOUND
-  THEN
-    transaction_duplicate = FALSE;  /*HAPPY PATH THERE IS NO DUPLICATE TRANS 
AND NEW RESERVE*/
-    transaction_duplicate2 = FALSE;
-    transaction_duplicate3 = FALSE;
-    transaction_duplicate4 = FALSE;
-    RETURN;
-  ELSE
-    FOR l IN curs_transaction_exist
-    LOOP
-      IF in_reserve_pub = l.reserve_pub
+     ON CONFLICT DO NOTHING
+     RETURNING reserve_pub)
+    SELECT * FROM reserve_in_changes;
+  WHILE k < 4 LOOP
+    FETCH FROM curs_transaction_exist INTO i;
+    IF FOUND
+    THEN
+      IF in_reserve_pub = i.reserve_pub
       THEN
          transaction_duplicate = TRUE;
+         k=k+1;
       END IF;
-
-      IF in2_reserve_pub = l.reserve_pub
+      IF in2_reserve_pub = i.reserve_pub
       THEN
          transaction_duplicate2 = TRUE;
+         k=k+1;
       END IF;
-      IF in3_reserve_pub = l.reserve_pub
+      IF in3_reserve_pub = i.reserve_pub
       THEN
          transaction_duplicate3 = TRUE;
+         k=k+1;
       END IF;
-      IF in4_reserve_pub = l.reserve_pub
+      IF in4_reserve_pub = i.reserve_pub
       THEN
          transaction_duplicate4 = TRUE;
+         k=k+1;
       END IF;
-
-      IF transaction_duplicate AND transaction_duplicate2 AND 
transaction_duplicate3 AND transaction_duplicate4
-      THEN
-        RETURN;
-      END IF;
-    END LOOP;
-  END IF;
-
-  CLOSE curs_reserve_exist;
+    END IF;
+  END LOOP;
   CLOSE curs_transaction_exist;
+
   RETURN;
+
+
+
 END $$;
diff --git a/src/exchangedb/exchange_do_batch_reserves_update.sql 
b/src/exchangedb/exchange_do_batch_reserves_update.sql
index f6b972c6..a6b7122d 100644
--- a/src/exchangedb/exchange_do_batch_reserves_update.sql
+++ b/src/exchangedb/exchange_do_batch_reserves_update.sql
@@ -23,7 +23,7 @@ CREATE OR REPLACE PROCEDURE exchange_do_batch_reserves_update(
   IN in_exchange_account_name VARCHAR,
   IN in_reserve_found BOOLEAN,
   IN in_wire_source_h_payto BYTEA,
-  IN in_notify text)    ---h_payto
+  IN in_notify text)
 LANGUAGE plpgsql
 AS $$
 BEGIN
@@ -48,7 +48,7 @@ BEGIN
 --IF THE INSERTION WAS A SUCCESS IT MEANS NO DUPLICATED TRANSACTION
   IF FOUND
   THEN
---    transaction_duplicate = FALSE;
+
     IF in_reserve_found
     THEN
       UPDATE reserves
diff --git a/src/exchangedb/pg_batch2_reserves_in_insert.c 
b/src/exchangedb/pg_batch2_reserves_in_insert.c
index 5518b2c6..f80f7ea0 100644
--- a/src/exchangedb/pg_batch2_reserves_in_insert.c
+++ b/src/exchangedb/pg_batch2_reserves_in_insert.c
@@ -217,7 +217,10 @@ insert2 (struct PostgresClosure *pg,
       ? GNUNET_DB_STATUS_SUCCESS_NO_RESULTS
       : GNUNET_DB_STATUS_SUCCESS_ONE_RESULT;*/
 
-    if (((conflict[0]) && (transaction_duplicate[0])) ||((conflict[1]) && 
(transaction_duplicate[1])))
+    if (
+        ((conflict[0]) && (transaction_duplicate[0]))
+        ||((conflict[1]) && (transaction_duplicate[1]))
+        )
    {
      GNUNET_break (0);
      TEH_PG_rollback (pg);
@@ -358,7 +361,12 @@ insert4 (struct PostgresClosure *pg,
       ? GNUNET_DB_STATUS_SUCCESS_NO_RESULTS
       : GNUNET_DB_STATUS_SUCCESS_ONE_RESULT;*/
 
-    if (((conflict[0]) && (transaction_duplicate[0])) ||((conflict[1]) && 
(transaction_duplicate[1])) ||((conflict[2]) && (transaction_duplicate[2])) 
||((conflict[3]) && (transaction_duplicate[3])))
+    if (
+        ((conflict[0]) && (transaction_duplicate[0]))
+        ||((conflict[1]) && (transaction_duplicate[1]))
+        ||((conflict[2]) && (transaction_duplicate[2]))
+        ||((conflict[3]) && (transaction_duplicate[3]))
+        )
    {
      GNUNET_break (0);
      TEH_PG_rollback (pg);
@@ -368,6 +376,238 @@ insert4 (struct PostgresClosure *pg,
 }
 
 
+static enum GNUNET_DB_QueryStatus
+insert8 (struct PostgresClosure *pg,
+         const struct TALER_EXCHANGEDB_ReserveInInfo reserves[8],
+         struct GNUNET_TIME_Timestamp expiry,
+         struct GNUNET_TIME_Timestamp gc,
+         struct TALER_PaytoHashP h_payto,
+         char *const*notify_s,
+         struct GNUNET_TIME_Timestamp reserve_expiration,
+         bool *transaction_duplicate,
+         bool *conflict,
+         uint64_t *reserve_uuid)
+{
+  enum GNUNET_DB_QueryStatus qs3;
+  PREPARE (pg,
+           "batch8_reserve_create",
+           "SELECT "
+           "out_reserve_found AS conflicted"
+           ",out_reserve_found2 AS conflicted2"
+           ",out_reserve_found3 AS conflicted3"
+           ",out_reserve_found4 AS conflicted4"
+           ",out_reserve_found5 AS conflicted5"
+           ",out_reserve_found6 AS conflicted6"
+           ",out_reserve_found7 AS conflicted7"
+           ",out_reserve_found8 AS conflicted8"
+           ",transaction_duplicate"
+           ",transaction_duplicate2"
+           ",transaction_duplicate3"
+           ",transaction_duplicate4"
+           ",transaction_duplicate5"
+           ",transaction_duplicate6"
+           ",transaction_duplicate7"
+           ",transaction_duplicate8"
+           ",ruuid AS reserve_uuid"
+           ",ruuid2 AS reserve_uuid2"
+           ",ruuid3 AS reserve_uuid3"
+           ",ruuid4 AS reserve_uuid4"
+           ",ruuid5 AS reserve_uuid5"
+           ",ruuid6 AS reserve_uuid6"
+           ",ruuid7 AS reserve_uuid7"
+           ",ruuid8 AS reserve_uuid8"
+           " FROM exchange_do_batch8_reserves_insert"
+           " 
($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$20,$21,$22,$23,$24,$25,$26,$27,$28,$29,$30,$31,$32,$33,$34,$35,$36,$37,$38,$39,
 $40, 
$41,$42,$43,$44,$45,$46,$47,$48,$49,$50,$51,$52,$53,$54,$55,$56,$57,$58,$59,$60,$61,$62,$63,$64,$65,$66,$67,$68,$69,$70,$71,$72,$73,$74,$75,$76,$77,$78,$79,$80,$81,$82);");
+
+    struct GNUNET_PQ_QueryParam params[] = {
+      GNUNET_PQ_query_param_auto_from_type (reserves[0].reserve_pub),
+      GNUNET_PQ_query_param_timestamp (&expiry),
+      GNUNET_PQ_query_param_timestamp (&gc),
+      GNUNET_PQ_query_param_uint64 (&reserves[0].wire_reference),
+      TALER_PQ_query_param_amount (reserves[0].balance),
+      GNUNET_PQ_query_param_string (reserves[0].exchange_account_name),
+      GNUNET_PQ_query_param_timestamp (&reserves[0].execution_time),
+      GNUNET_PQ_query_param_auto_from_type (&h_payto),
+      GNUNET_PQ_query_param_string (reserves[0].sender_account_details),
+      GNUNET_PQ_query_param_timestamp (&reserve_expiration),
+      GNUNET_PQ_query_param_string (notify_s[0]),
+      GNUNET_PQ_query_param_string (notify_s[1]),
+      GNUNET_PQ_query_param_string (notify_s[2]),
+      GNUNET_PQ_query_param_string (notify_s[3]),
+      GNUNET_PQ_query_param_string (notify_s[4]),
+      GNUNET_PQ_query_param_string (notify_s[5]),
+      GNUNET_PQ_query_param_string (notify_s[6]),
+      GNUNET_PQ_query_param_string (notify_s[7]),
+
+      GNUNET_PQ_query_param_auto_from_type (reserves[1].reserve_pub),
+      GNUNET_PQ_query_param_uint64 (&reserves[1].wire_reference),
+      TALER_PQ_query_param_amount (reserves[1].balance),
+      GNUNET_PQ_query_param_string (reserves[1].exchange_account_name),
+      GNUNET_PQ_query_param_timestamp (&reserves[1].execution_time),
+      GNUNET_PQ_query_param_auto_from_type (&h_payto),
+      GNUNET_PQ_query_param_string (reserves[1].sender_account_details),
+      GNUNET_PQ_query_param_timestamp (&reserve_expiration),
+
+      GNUNET_PQ_query_param_auto_from_type (reserves[2].reserve_pub),
+      GNUNET_PQ_query_param_uint64 (&reserves[2].wire_reference),
+      TALER_PQ_query_param_amount (reserves[2].balance),
+      GNUNET_PQ_query_param_string (reserves[2].exchange_account_name),
+      GNUNET_PQ_query_param_timestamp (&reserves[2].execution_time),
+      GNUNET_PQ_query_param_auto_from_type (&h_payto),
+      GNUNET_PQ_query_param_string (reserves[2].sender_account_details),
+      GNUNET_PQ_query_param_timestamp (&reserve_expiration),
+
+      GNUNET_PQ_query_param_auto_from_type (reserves[3].reserve_pub),
+      GNUNET_PQ_query_param_uint64 (&reserves[3].wire_reference),
+      TALER_PQ_query_param_amount (reserves[3].balance),
+      GNUNET_PQ_query_param_string (reserves[3].exchange_account_name),
+      GNUNET_PQ_query_param_timestamp (&reserves[3].execution_time),
+      GNUNET_PQ_query_param_auto_from_type (&h_payto),
+      GNUNET_PQ_query_param_string (reserves[3].sender_account_details),
+      GNUNET_PQ_query_param_timestamp (&reserve_expiration),
+
+      GNUNET_PQ_query_param_auto_from_type (reserves[4].reserve_pub),
+      GNUNET_PQ_query_param_uint64 (&reserves[4].wire_reference),
+      TALER_PQ_query_param_amount (reserves[4].balance),
+      GNUNET_PQ_query_param_string (reserves[4].exchange_account_name),
+      GNUNET_PQ_query_param_timestamp (&reserves[4].execution_time),
+      GNUNET_PQ_query_param_auto_from_type (&h_payto),
+      GNUNET_PQ_query_param_string (reserves[4].sender_account_details),
+      GNUNET_PQ_query_param_timestamp (&reserve_expiration),
+
+      GNUNET_PQ_query_param_auto_from_type (reserves[5].reserve_pub),
+      GNUNET_PQ_query_param_uint64 (&reserves[5].wire_reference),
+      TALER_PQ_query_param_amount (reserves[5].balance),
+      GNUNET_PQ_query_param_string (reserves[5].exchange_account_name),
+      GNUNET_PQ_query_param_timestamp (&reserves[5].execution_time),
+      GNUNET_PQ_query_param_auto_from_type (&h_payto),
+      GNUNET_PQ_query_param_string (reserves[5].sender_account_details),
+      GNUNET_PQ_query_param_timestamp (&reserve_expiration),
+
+      GNUNET_PQ_query_param_auto_from_type (reserves[6].reserve_pub),
+      GNUNET_PQ_query_param_uint64 (&reserves[6].wire_reference),
+      TALER_PQ_query_param_amount (reserves[6].balance),
+      GNUNET_PQ_query_param_string (reserves[6].exchange_account_name),
+      GNUNET_PQ_query_param_timestamp (&reserves[6].execution_time),
+      GNUNET_PQ_query_param_auto_from_type (&h_payto),
+      GNUNET_PQ_query_param_string (reserves[6].sender_account_details),
+      GNUNET_PQ_query_param_timestamp (&reserve_expiration),
+
+      GNUNET_PQ_query_param_auto_from_type (reserves[7].reserve_pub),
+      GNUNET_PQ_query_param_uint64 (&reserves[7].wire_reference),
+      TALER_PQ_query_param_amount (reserves[7].balance),
+      GNUNET_PQ_query_param_string (reserves[7].exchange_account_name),
+      GNUNET_PQ_query_param_timestamp (&reserves[7].execution_time),
+      GNUNET_PQ_query_param_auto_from_type (&h_payto),
+      GNUNET_PQ_query_param_string (reserves[7].sender_account_details),
+      GNUNET_PQ_query_param_timestamp (&reserve_expiration),
+
+      GNUNET_PQ_query_param_end
+    };
+
+    struct GNUNET_PQ_ResultSpec rs[] = {
+      GNUNET_PQ_result_spec_bool ("conflicted",
+                                  &conflict[0]),
+      GNUNET_PQ_result_spec_bool ("conflicted2",
+                                  &conflict[1]),
+      GNUNET_PQ_result_spec_bool ("conflicted3",
+                                  &conflict[2]),
+      GNUNET_PQ_result_spec_bool ("conflicted4",
+                                  &conflict[3]),
+      GNUNET_PQ_result_spec_bool ("conflicted5",
+                                  &conflict[4]),
+      GNUNET_PQ_result_spec_bool ("conflicted6",
+                                  &conflict[5]),
+      GNUNET_PQ_result_spec_bool ("conflicted7",
+                                  &conflict[6]),
+      GNUNET_PQ_result_spec_bool ("conflicted8",
+                                  &conflict[7]),
+      GNUNET_PQ_result_spec_bool ("transaction_duplicate",
+                                  &transaction_duplicate[0]),
+      GNUNET_PQ_result_spec_bool ("transaction_duplicate2",
+                                  &transaction_duplicate[1]),
+      GNUNET_PQ_result_spec_bool ("transaction_duplicate3",
+                                  &transaction_duplicate[2]),
+      GNUNET_PQ_result_spec_bool ("transaction_duplicate4",
+                                  &transaction_duplicate[3]),
+      GNUNET_PQ_result_spec_bool ("transaction_duplicate5",
+                                  &transaction_duplicate[4]),
+      GNUNET_PQ_result_spec_bool ("transaction_duplicate6",
+                                  &transaction_duplicate[5]),
+      GNUNET_PQ_result_spec_bool ("transaction_duplicate7",
+                                  &transaction_duplicate[6]),
+      GNUNET_PQ_result_spec_bool ("transaction_duplicate8",
+                                  &transaction_duplicate[7]),
+      GNUNET_PQ_result_spec_uint64 ("reserve_uuid",
+                                    &reserve_uuid[0]),
+      GNUNET_PQ_result_spec_uint64 ("reserve_uuid2",
+                                    &reserve_uuid[1]),
+      GNUNET_PQ_result_spec_uint64 ("reserve_uuid3",
+                                    &reserve_uuid[2]),
+      GNUNET_PQ_result_spec_uint64 ("reserve_uuid4",
+                                    &reserve_uuid[3]),
+      GNUNET_PQ_result_spec_uint64 ("reserve_uuid5",
+                                    &reserve_uuid[4]),
+      GNUNET_PQ_result_spec_uint64 ("reserve_uuid6",
+                                    &reserve_uuid[5]),
+      GNUNET_PQ_result_spec_uint64 ("reserve_uuid7",
+                                    &reserve_uuid[6]),
+      GNUNET_PQ_result_spec_uint64 ("reserve_uuid8",
+                                    &reserve_uuid[7]),
+      GNUNET_PQ_result_spec_end
+    };
+
+    TALER_payto_hash (reserves[0].sender_account_details,
+                      &h_payto);
+    TALER_payto_hash (reserves[1].sender_account_details,
+                      &h_payto);
+    TALER_payto_hash (reserves[2].sender_account_details,
+                      &h_payto);
+    TALER_payto_hash (reserves[3].sender_account_details,
+                      &h_payto);
+    TALER_payto_hash (reserves[4].sender_account_details,
+                      &h_payto);
+    TALER_payto_hash (reserves[5].sender_account_details,
+                      &h_payto);
+    TALER_payto_hash (reserves[6].sender_account_details,
+                      &h_payto);
+    TALER_payto_hash (reserves[7].sender_account_details,
+                      &h_payto);
+
+    qs3 = GNUNET_PQ_eval_prepared_singleton_select (pg->conn,
+                                                    "batch8_reserve_create",
+                                                    params,
+                                                    rs);
+    if (qs3 < 0)
+    {
+      GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
+                  "Failed to create reserves8 (%d)\n",
+                  qs3);
+      return qs3;
+    }
+
+   GNUNET_assert (GNUNET_DB_STATUS_SUCCESS_NO_RESULTS != qs3);
+   /*   results[i] = (transaction_duplicate)
+      ? GNUNET_DB_STATUS_SUCCESS_NO_RESULTS
+      : GNUNET_DB_STATUS_SUCCESS_ONE_RESULT;*/
+
+    if (
+        ((conflict[0]) && (transaction_duplicate[0]))
+        ||((conflict[1]) && (transaction_duplicate[1]))
+        ||((conflict[2]) && (transaction_duplicate[2]))
+        ||((conflict[3]) && (transaction_duplicate[3]))
+        ||((conflict[4]) && (transaction_duplicate[4]))
+        ||((conflict[5]) && (transaction_duplicate[5]))
+        ||((conflict[6]) && (transaction_duplicate[6]))
+        ||((conflict[7]) && (transaction_duplicate[7]))
+        )
+   {
+     GNUNET_break (0);
+     TEH_PG_rollback (pg);
+     return GNUNET_DB_STATUS_HARD_ERROR;
+   }
+    return qs3;
+}
 
 enum GNUNET_DB_QueryStatus
 TEH_PG_batch2_reserves_in_insert (void *cls,
@@ -377,7 +617,7 @@ TEH_PG_batch2_reserves_in_insert (void *cls,
                                  enum GNUNET_DB_QueryStatus *results)
 {
   struct PostgresClosure *pg = cls;
-  //  enum GNUNET_DB_QueryStatus qs1;
+  enum GNUNET_DB_QueryStatus qs1;
   enum GNUNET_DB_QueryStatus qs2;
   enum GNUNET_DB_QueryStatus qs4;
   enum GNUNET_DB_QueryStatus qs5;
@@ -437,9 +677,45 @@ TEH_PG_batch2_reserves_in_insert (void *cls,
   {
     unsigned int bs = GNUNET_MIN (batch_size,
                                   reserves_length - i);
-    if (bs >= 4)
+    if (bs >= 8)
     {
-      //   fprintf(stdout, "batch4");
+      //     fprintf(stdout, "batch8");
+      qs1=insert8(pg,
+                  &reserves[i],
+                  expiry,
+                  gc,
+                  h_payto,
+                  &notify_s[i],
+                  reserve_expiration,
+                  &transaction_duplicate[i],
+                  &conflicts[i],
+                  &reserve_uuid[i]);
+
+     if (qs1<0)
+      {
+        GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
+                    "Failed to update reserves8 (%d)\n",
+                    qs1);
+        return qs1;
+      }
+     //   fprintf(stdout, "%ld %ld %ld %ld %ld %ld %ld %ld\n", 
reserve_uuid[i], reserve_uuid[i+1], reserve_uuid[i+2], reserve_uuid[i+3], 
reserve_uuid[i+4], reserve_uuid[i+5], reserve_uuid[i+6],reserve_uuid[]);
+      need_update |= conflicts[i];
+      need_update |= conflicts[i+1];
+      need_update |= conflicts[i+2];
+      need_update |= conflicts[i+3];
+      need_update |= conflicts[i+4];
+      need_update |= conflicts[i+5];
+      need_update |= conflicts[i+6];
+      need_update |= conflicts[i+7];
+      i+=8;
+      continue;
+    }
+    switch (bs)
+      {
+    case 7:
+    case 6 :
+    case 5:
+    case 4 :
       qs4=insert4(pg,
                   &reserves[i],
                   expiry,
@@ -465,10 +741,7 @@ TEH_PG_batch2_reserves_in_insert (void *cls,
       //     fprintf(stdout, "%ld %ld %ld %ld\n", reserve_uuid[i], 
reserve_uuid[i+1], reserve_uuid[i+2], reserve_uuid[i+3]);
       //fprintf(stdout, "%d %d %d %d\n", transaction_duplicate[i], 
transaction_duplicate[i+1], transaction_duplicate[i+2], 
transaction_duplicate[i+3]);
       i += 4;
-      continue;
-    }
-    switch (bs)
-    {
+      break;
     case 3:
     case 2:
       qs5=insert2(pg,
diff --git a/src/exchangedb/procedures.sql.in b/src/exchangedb/procedures.sql.in
index 8ddc0ee2..b775639b 100644
--- a/src/exchangedb/procedures.sql.in
+++ b/src/exchangedb/procedures.sql.in
@@ -39,4 +39,6 @@ SET search_path TO exchange;
 #include "exchange_do_batch_reserves_update.sql"
 #include "exchange_do_batch2_reserves_in_insert.sql"
 #include "exchange_do_batch4_reserves_in_insert.sql"
+#include "exchange_do_batch8_reserves_in_insert.sql"
+
 COMMIT;
diff --git a/src/exchangedb/test_exchangedb_by_j.c 
b/src/exchangedb/test_exchangedb_by_j.c
index 8e0b413b..c114f59c 100644
--- a/src/exchangedb/test_exchangedb_by_j.c
+++ b/src/exchangedb/test_exchangedb_by_j.c
@@ -23,7 +23,7 @@
 #include "taler_json_lib.h"
 #include "taler_exchangedb_plugin.h"
 #include "math.h"
-#define ROUNDS 100
+#define ROUNDS 10
 
 /**
  * Global result from the testcase.
@@ -73,7 +73,7 @@ static struct TALER_EXCHANGEDB_Plugin *plugin;
 static void
 run (void *cls)
 {
-  static const unsigned int batches[] = {1, 2, 3, 4, 16 };
+  static const unsigned int batches[] = {1, 2, 3, 4, 8, 16 };
   struct GNUNET_TIME_Relative times[sizeof (batches)/sizeof(*batches)];
   unsigned long long sqrs[sizeof (batches)/sizeof(*batches)];
   struct GNUNET_CONFIGURATION_Handle *cfg = cls;
@@ -102,7 +102,7 @@ run (void *cls)
   memset (sqrs, 0, sizeof (sqrs));
   for (unsigned int r = 0; r < ROUNDS; r++)
     {
-    for (unsigned int i = 0; i< 5; i++)
+    for (unsigned int i = 0; i< 6; i++)
       {
         const char *sndr = "payto://x-taler-bank/localhost:8080/1";
         struct TALER_Amount value;
@@ -153,7 +153,7 @@ run (void *cls)
         system ("./test.sh"); //DELETE AFTER TIMER
       }
     }
-    for (unsigned int i = 0; i< 5; i++)
+    for (unsigned int i = 0; i< 6; i++)
     {
       struct GNUNET_TIME_Relative avg;
       double avg_dbl;

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