gnunet-svn
[Top][All Lists]
Advanced

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

[taler-exchange] branch master updated (287370b4 -> b90d25ec)


From: gnunet
Subject: [taler-exchange] branch master updated (287370b4 -> b90d25ec)
Date: Wed, 21 Dec 2022 11:30:14 +0100

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

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

    from 287370b4 -improve logging
     new 802dbaef add batch8
     new b90d25ec Rollback in sqlcode

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 src/benchmark/bank-benchmark-rsa.conf              |   2 +-
 .../exchange_do_batch4_reserves_in_insert.sql      | 153 +++-------
 ...l => exchange_do_batch8_reserves_in_insert.sql} | 327 ++++++++++++++-------
 .../exchange_do_batch_reserves_update.sql          |  33 ++-
 src/exchangedb/pg_batch2_reserves_in_insert.c      | 308 +++++++++++++++++--
 src/exchangedb/procedures.sql.in                   |   2 +
 src/exchangedb/test_exchangedb_by_j.c              |  10 +-
 7 files changed, 586 insertions(+), 249 deletions(-)
 copy src/exchangedb/{exchange_do_batch4_reserves_in_insert.sql => 
exchange_do_batch8_reserves_in_insert.sql} (51%)

diff --git a/src/benchmark/bank-benchmark-rsa.conf 
b/src/benchmark/bank-benchmark-rsa.conf
index f2f4dee5..41934b08 100644
--- a/src/benchmark/bank-benchmark-rsa.conf
+++ b/src/benchmark/bank-benchmark-rsa.conf
@@ -37,7 +37,7 @@ MASTER_PRIV_FILE = 
${TALER_DATA_HOME}/exchange/offline-keys/master.priv
 BASE_URL = "http://localhost:8083/";
 
 [exchangedb-postgres]
-config = "postgres:///talercheck"
+config = "postgres://exchange:taler@192.168.42.42/exchange"
 
 [benchmark-remote-exchange]
 host = localhost
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_batch4_reserves_in_insert.sql 
b/src/exchangedb/exchange_do_batch8_reserves_in_insert.sql
similarity index 51%
copy from src/exchangedb/exchange_do_batch4_reserves_in_insert.sql
copy to src/exchangedb/exchange_do_batch8_reserves_in_insert.sql
index ece92698..ab11e380 100644
--- a/src/exchangedb/exchange_do_batch4_reserves_in_insert.sql
+++ b/src/exchangedb/exchange_do_batch8_reserves_in_insert.sql
@@ -13,7 +13,7 @@
 -- You should have received a copy of the GNU General Public License along with
 -- TALER; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
 --
-CREATE OR REPLACE FUNCTION exchange_do_batch4_reserves_insert(
+CREATE OR REPLACE FUNCTION exchange_do_batch8_reserves_insert(
   IN in_reserve_pub BYTEA,
   IN in_expiration_date INT8,
   IN in_gc_date INT8,
@@ -29,6 +29,10 @@ CREATE OR REPLACE FUNCTION 
exchange_do_batch4_reserves_insert(
   IN in2_notify text,
   IN in3_notify text,
   IN in4_notify text,
+  IN in5_notify text,
+  IN in6_notify text,
+  IN in7_notify text,
+  IN in8_notify text,
   IN in2_reserve_pub BYTEA,
   IN in2_wire_ref INT8,
   IN in2_credit_val INT8,
@@ -56,33 +60,79 @@ CREATE OR REPLACE FUNCTION 
exchange_do_batch4_reserves_insert(
   IN in4_wire_source_h_payto BYTEA,    ---h_payto
   IN in4_payto_uri VARCHAR,
   IN in4_reserve_expiration INT8,
+  IN in5_reserve_pub BYTEA,
+  IN in5_wire_ref INT8,
+  IN in5_credit_val INT8,
+  IN in5_credit_frac INT4,
+  IN in5_exchange_account_name VARCHAR,
+  IN in5_exectution_date INT8,
+  IN in5_wire_source_h_payto BYTEA,    ---h_payto
+  IN in5_payto_uri VARCHAR,
+  IN in5_reserve_expiration INT8,
+  IN in6_reserve_pub BYTEA,
+  IN in6_wire_ref INT8,
+  IN in6_credit_val INT8,
+  IN in6_credit_frac INT4,
+  IN in6_exchange_account_name VARCHAR,
+  IN in6_exectution_date INT8,
+  IN in6_wire_source_h_payto BYTEA,    ---h_payto
+  IN in6_payto_uri VARCHAR,
+  IN in6_reserve_expiration INT8,
+  IN in7_reserve_pub BYTEA,
+  IN in7_wire_ref INT8,
+  IN in7_credit_val INT8,
+  IN in7_credit_frac INT4,
+  IN in7_exchange_account_name VARCHAR,
+  IN in7_exectution_date INT8,
+  IN in7_wire_source_h_payto BYTEA,    ---h_payto
+  IN in7_payto_uri VARCHAR,
+  IN in7_reserve_expiration INT8,
+  IN in8_reserve_pub BYTEA,
+  IN in8_wire_ref INT8,
+  IN in8_credit_val INT8,
+  IN in8_credit_frac INT4,
+  IN in8_exchange_account_name VARCHAR,
+  IN in8_exectution_date INT8,
+  IN in8_wire_source_h_payto BYTEA,    ---h_payto
+  IN in8_payto_uri VARCHAR,
+  IN in8_reserve_expiration INT8,
   OUT out_reserve_found BOOLEAN,
   OUT out_reserve_found2 BOOLEAN,
   OUT out_reserve_found3 BOOLEAN,
   OUT out_reserve_found4 BOOLEAN,
+  OUT out_reserve_found5 BOOLEAN,
+  OUT out_reserve_found6 BOOLEAN,
+  OUT out_reserve_found7 BOOLEAN,
+  OUT out_reserve_found8 BOOLEAN,
   OUT transaction_duplicate BOOLEAN,
   OUT transaction_duplicate2 BOOLEAN,
   OUT transaction_duplicate3 BOOLEAN,
   OUT transaction_duplicate4 BOOLEAN,
+  OUT transaction_duplicate5 BOOLEAN,
+  OUT transaction_duplicate6 BOOLEAN,
+  OUT transaction_duplicate7 BOOLEAN,
+  OUT transaction_duplicate8 BOOLEAN,
   OUT ruuid INT8,
   OUT ruuid2 INT8,
   OUT ruuid3 INT8,
-  OUT ruuid4 INT8)
+  OUT ruuid4 INT8,
+  OUT ruuid5 INT8,
+  OUT ruuid6 INT8,
+  OUT ruuid7 INT8,
+  OUT ruuid8 INT8)
 LANGUAGE plpgsql
 AS $$
 DECLARE
-  curs_reserve_exist refcursor;
-
+  curs_reserve_existed refcursor;
+DECLARE
+  k INT8;
 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;
+  curs_transaction_existed refcursor;
+
 DECLARE
   i RECORD;
+DECLARE
+  r RECORD;
 
 BEGIN
 --INITIALIZATION
@@ -90,14 +140,27 @@ BEGIN
   transaction_duplicate2=FALSE;
   transaction_duplicate3=FALSE;
   transaction_duplicate4=FALSE;
+  transaction_duplicate5=FALSE;
+  transaction_duplicate6=FALSE;
+  transaction_duplicate7=FALSE;
+  transaction_duplicate8=FALSE;
   out_reserve_found = TRUE;
   out_reserve_found2 = TRUE;
   out_reserve_found3 = TRUE;
   out_reserve_found4 = TRUE;
+  out_reserve_found5 = TRUE;
+  out_reserve_found6 = TRUE;
+  out_reserve_found7 = TRUE;
+  out_reserve_found8 = TRUE;
   ruuid=0;
   ruuid2=0;
   ruuid3=0;
   ruuid4=0;
+  ruuid5=0;
+  ruuid6=0;
+  ruuid7=0;
+  ruuid8=0;
+  k=0;
 
   --SIMPLE INSERT ON CONFLICT DO NOTHING
   INSERT INTO wire_targets
@@ -111,10 +174,18 @@ BEGIN
     (in3_wire_source_h_payto
     ,in3_payto_uri),
     (in4_wire_source_h_payto
-    ,in4_payto_uri)
+    ,in4_payto_uri),
+    (in5_wire_source_h_payto
+    ,in5_payto_uri),
+    (in6_wire_source_h_payto
+    ,in6_payto_uri),
+    (in7_wire_source_h_payto
+    ,in7_payto_uri),
+    (in8_wire_source_h_payto
+    ,in8_payto_uri)
   ON CONFLICT DO NOTHING;
 
-  OPEN curs_reserve_exist FOR
+  OPEN curs_reserve_existed FOR
   WITH reserve_changes AS (
     INSERT INTO reserves
       (reserve_pub
@@ -142,109 +213,98 @@ BEGIN
       ,in4_credit_val
       ,in4_credit_frac
       ,in_expiration_date
+      ,in_gc_date),
+      (in5_reserve_pub
+      ,in5_credit_val
+      ,in5_credit_frac
+      ,in_expiration_date
+      ,in_gc_date),
+      (in6_reserve_pub
+      ,in6_credit_val
+      ,in6_credit_frac
+      ,in_expiration_date
+      ,in_gc_date),
+      (in7_reserve_pub
+      ,in7_credit_val
+      ,in7_credit_frac
+      ,in_expiration_date
+      ,in_gc_date),
+      (in8_reserve_pub
+      ,in8_credit_val
+      ,in8_credit_frac
+      ,in_expiration_date
       ,in_gc_date)
      ON CONFLICT DO NOTHING
      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;
-    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;
+
+  WHILE k < 8 LOOP
+
+    FETCH FROM curs_reserve_existed 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
+      IF in5_reserve_pub = i.reserve_pub
       THEN
-          out_reserve_found = FALSE;
-          ruuid = i.reserve_uuid;
+         out_reserve_found5 = FALSE;
+         ruuid5 = i.reserve_uuid;
+         k=k+1;
       END IF;
-      IF in2_reserve_pub = i.reserve_pub
+      IF in6_reserve_pub = i.reserve_pub
       THEN
-          out_reserve_found2 = FALSE;
-          ruuid2 = i.reserve_uuid;
+          out_reserve_found6 = FALSE;
+          ruuid6 = i.reserve_uuid;
+          k=k+1;
       END IF;
-      IF in3_reserve_pub = i.reserve_pub
+      IF in7_reserve_pub = i.reserve_pub
       THEN
-          out_reserve_found3 = FALSE;
-          ruuid3 = i.reserve_uuid;
+          out_reserve_found7 = FALSE;
+          ruuid7 = i.reserve_uuid;
+          k=k+1;
       END IF;
-      IF in4_reserve_pub = i.reserve_pub
+      IF in8_reserve_pub = i.reserve_pub
       THEN
-          out_reserve_found4 = FALSE;
-          ruuid4 = i.reserve_uuid;
+          out_reserve_found8 = FALSE;
+          ruuid8 = i.reserve_uuid;
+          k=k+1;
       END IF;
     END IF;
-  END IF;
-  CLOSE curs_reserve_exist;
-  IF out_reserve_found AND out_reserve_found2 AND out_reserve_found3 AND 
out_reserve_found4
+
+  END LOOP;
+
+  CLOSE curs_reserve_existed;
+  IF out_reserve_found
+  AND out_reserve_found2
+  AND out_reserve_found3
+  AND out_reserve_found4
+  AND out_reserve_found5
+  AND out_reserve_found6
+  AND out_reserve_found7
+  AND out_reserve_found8
   THEN
       RETURN;
   END IF;
@@ -253,8 +313,14 @@ BEGIN
   PERFORM pg_notify(in2_notify, NULL);
   PERFORM pg_notify(in3_notify, NULL);
   PERFORM pg_notify(in4_notify, NULL);
-
-  INSERT INTO reserves_in
+  PERFORM pg_notify(in5_notify, NULL);
+  PERFORM pg_notify(in6_notify, NULL);
+  PERFORM pg_notify(in7_notify, NULL);
+  PERFORM pg_notify(in8_notify, NULL);
+  k=0;
+  OPEN curs_transaction_existed FOR
+  WITH reserve_in_changes AS (
+    INSERT INTO reserves_in
     (reserve_pub
     ,wire_reference
     ,credit_val
@@ -262,7 +328,7 @@ BEGIN
     ,exchange_account_section
     ,wire_source_h_payto
     ,execution_date)
-    VALUES
+      VALUES
     (in_reserve_pub
     ,in_wire_ref
     ,in_credit_val
@@ -290,44 +356,89 @@ BEGIN
     ,in4_credit_frac
     ,in4_exchange_account_name
     ,in4_wire_source_h_payto
+    ,in_expiration_date),
+    (in5_reserve_pub
+    ,in5_wire_ref
+    ,in5_credit_val
+    ,in5_credit_frac
+    ,in5_exchange_account_name
+    ,in5_wire_source_h_payto
+    ,in_expiration_date),
+    (in6_reserve_pub
+    ,in6_wire_ref
+    ,in6_credit_val
+    ,in6_credit_frac
+    ,in6_exchange_account_name
+    ,in6_wire_source_h_payto
+    ,in_expiration_date),
+    (in7_reserve_pub
+    ,in7_wire_ref
+    ,in7_credit_val
+    ,in7_credit_frac
+    ,in7_exchange_account_name
+    ,in7_wire_source_h_payto
+    ,in_expiration_date),
+    (in8_reserve_pub
+    ,in8_wire_ref
+    ,in8_credit_val
+    ,in8_credit_frac
+    ,in8_exchange_account_name
+    ,in8_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 < 8 LOOP
+    FETCH FROM curs_transaction_existed INTO r;
+    IF FOUND
+    THEN
+      IF in_reserve_pub = r.reserve_pub
       THEN
          transaction_duplicate = TRUE;
+         k=k+1;
       END IF;
-
-      IF in2_reserve_pub = l.reserve_pub
+      IF in2_reserve_pub = r.reserve_pub
       THEN
          transaction_duplicate2 = TRUE;
+         k=k+1;
       END IF;
-      IF in3_reserve_pub = l.reserve_pub
+      IF in3_reserve_pub = r.reserve_pub
       THEN
          transaction_duplicate3 = TRUE;
+         k=k+1;
       END IF;
-      IF in4_reserve_pub = l.reserve_pub
+      IF in4_reserve_pub = r.reserve_pub
       THEN
          transaction_duplicate4 = TRUE;
+         k=k+1;
       END IF;
-
-      IF transaction_duplicate AND transaction_duplicate2 AND 
transaction_duplicate3 AND transaction_duplicate4
+      IF in5_reserve_pub = r.reserve_pub
       THEN
-        RETURN;
+         transaction_duplicate5 = TRUE;
+         k=k+1;
       END IF;
-    END LOOP;
-  END IF;
+      IF in6_reserve_pub = r.reserve_pub
+      THEN
+         transaction_duplicate6 = TRUE;
+         k=k+1;
+      END IF;
+      IF in7_reserve_pub = r.reserve_pub
+      THEN
+         transaction_duplicate7 = TRUE;
+         k=k+1;
+      END IF;
+      IF in8_reserve_pub = r.reserve_pub
+      THEN
+         transaction_duplicate8 = TRUE;
+         k=k+1;
+      END IF;
+
+    END IF;
+
+  END LOOP;
 
-  CLOSE curs_reserve_exist;
-  CLOSE curs_transaction_exist;
+  CLOSE curs_transaction_existed;
   RETURN;
 END $$;
diff --git a/src/exchangedb/exchange_do_batch_reserves_update.sql 
b/src/exchangedb/exchange_do_batch_reserves_update.sql
index f6b972c6..af5d358f 100644
--- a/src/exchangedb/exchange_do_batch_reserves_update.sql
+++ b/src/exchangedb/exchange_do_batch_reserves_update.sql
@@ -23,11 +23,16 @@ 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 $$
+DECLARE
+  i RECORD;
+DECLARE
+  curs refcursor;
 BEGIN
-
+  OPEN curs FOR
+  WITH reserves_update AS (
   INSERT INTO reserves_in
     (reserve_pub
     ,wire_reference
@@ -43,12 +48,14 @@ BEGIN
     ,in_credit_frac
     ,in_exchange_account_name
     ,in_wire_source_h_payto
-    ,in_expiration_date);
+    ,in_expiration_date)
+    ON CONFLICT DO NOTHING
+    RETURNING reserve_pub, credit_val, credit_frac)
+    SELECT * FROM reserves_in;
 
---IF THE INSERTION WAS A SUCCESS IT MEANS NO DUPLICATED TRANSACTION
-  IF FOUND
+  FETCH FROM curs INTO i;
+  IF FOUND    --IF THE INSERTION WAS A SUCCESS IT MEANS NO DUPLICATED 
TRANSACTION
   THEN
---    transaction_duplicate = FALSE;
     IF in_reserve_found
     THEN
       UPDATE reserves
@@ -67,9 +74,21 @@ BEGIN
                END
                ,expiration_date=GREATEST(expiration_date,in_expiration_date)
                ,gc_date=GREATEST(gc_date,in_expiration_date)
-             WHERE reserves.reserve_pub=in_reserve_pub;
+             WHERE reserve_pub=in_reserve_pub;
     END IF;
     PERFORM pg_notify(in_notify, NULL);
+  ELSE
+    CLOSE curs;
+    IF ! out_reserve_found
+    THEN
+      ROLLBACK;
+    END IF;
+    PERFORM pg_notify(in_notify, NULL);
+
+/*    UPDATE reserves_in
+    SET credit_frac = credit_frac - in_credit_frac
+    AND credit_val = credit_val + in_credit_val
+    WHERE reserve_pub = in_reserve_pub;*/
   END IF;
 
 END $$;
diff --git a/src/exchangedb/pg_batch2_reserves_in_insert.c 
b/src/exchangedb/pg_batch2_reserves_in_insert.c
index 5518b2c6..268f20d4 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,
@@ -547,21 +820,22 @@ TEH_PG_batch2_reserves_in_insert (void *cls,
 
   enum GNUNET_DB_QueryStatus qs3;
   PREPARE (pg,
-           "reserves_in_add_transaction",
+           "reserves_update",
            "CALL exchange_do_batch_reserves_update"
            " ($1,$2,$3,$4,$5,$6,$7,$8,$9);");
   for (unsigned int i = 0; i<reserves_length; i++)
   {
+
     if (! conflicts[i])
       continue;
     {
-      const struct TALER_EXCHANGEDB_ReserveInInfo *reserve = &reserves[i];
+      //      const struct TALER_EXCHANGEDB_ReserveInInfo *reserve = 
&reserves[i];
       struct GNUNET_PQ_QueryParam params[] = {
-        GNUNET_PQ_query_param_auto_from_type (reserve->reserve_pub),
+        GNUNET_PQ_query_param_auto_from_type (reserves[i].reserve_pub),
         GNUNET_PQ_query_param_timestamp (&expiry),
-        GNUNET_PQ_query_param_uint64 (&reserve->wire_reference),
-        TALER_PQ_query_param_amount (reserve->balance),
-        GNUNET_PQ_query_param_string (reserve->exchange_account_name),
+        GNUNET_PQ_query_param_uint64 (&reserves[i].wire_reference),
+        TALER_PQ_query_param_amount (reserves[i].balance),
+        GNUNET_PQ_query_param_string (reserves[i].exchange_account_name),
         GNUNET_PQ_query_param_bool (conflicts[i]),
         GNUNET_PQ_query_param_auto_from_type (&h_payto),
         GNUNET_PQ_query_param_string (notify_s[i]),
@@ -569,12 +843,12 @@ TEH_PG_batch2_reserves_in_insert (void *cls,
       };
 
       qs3 = GNUNET_PQ_eval_prepared_non_select (pg->conn,
-                                                "reserves_in_add_transaction",
+                                                "reserves_update",
                                                 params);
       if (qs3<0)
       {
         GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
-                    "Failed to update reserves (%d)\n",
+                    "Failed to update (%d)\n",
                     qs3);
         return qs3;
       }
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..9769d964 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,12 +102,12 @@ 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;
         unsigned int batch_size = batches[i];
-        unsigned int iterations = 1024*10;
+        unsigned int iterations = 16;//1024*10;
         struct TALER_ReservePublicKeyP reserve_pubs[iterations];
         struct GNUNET_TIME_Absolute now;
         struct GNUNET_TIME_Timestamp ts;
@@ -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]