add batch8

This commit is contained in:
Joseph 2022-12-20 09:09:03 -05:00
parent 287370b4cb
commit 802dbaefc9
No known key found for this signature in database
GPG Key ID: E709789D3076B5CC
5 changed files with 332 additions and 126 deletions

View File

@ -72,15 +72,10 @@ LANGUAGE plpgsql
AS $$ AS $$
DECLARE DECLARE
curs_reserve_exist refcursor; curs_reserve_exist refcursor;
DECLARE DECLARE
curs_transaction_exist CURSOR k INT8;
FOR SELECT reserve_pub DECLARE
FROM reserves_in curs_transaction_exist refcursor;
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;
DECLARE DECLARE
i RECORD; i RECORD;
@ -98,7 +93,7 @@ BEGIN
ruuid2=0; ruuid2=0;
ruuid3=0; ruuid3=0;
ruuid4=0; ruuid4=0;
k=0;
--SIMPLE INSERT ON CONFLICT DO NOTHING --SIMPLE INSERT ON CONFLICT DO NOTHING
INSERT INTO wire_targets INSERT INTO wire_targets
(wire_target_h_payto (wire_target_h_payto
@ -147,6 +142,7 @@ BEGIN
RETURNING reserve_uuid,reserve_pub) RETURNING reserve_uuid,reserve_pub)
SELECT * FROM reserve_changes; SELECT * FROM reserve_changes;
WHILE k < 4 LOOP
FETCH FROM curs_reserve_exist INTO i; FETCH FROM curs_reserve_exist INTO i;
IF FOUND IF FOUND
THEN THEN
@ -154,97 +150,33 @@ BEGIN
THEN THEN
out_reserve_found = FALSE; out_reserve_found = FALSE;
ruuid = i.reserve_uuid; ruuid = i.reserve_uuid;
k = k+1;
END IF; END IF;
IF in2_reserve_pub = i.reserve_pub IF in2_reserve_pub = i.reserve_pub
THEN THEN
out_reserve_found2 = FALSE; out_reserve_found2 = FALSE;
ruuid2 = i.reserve_uuid; ruuid2 = i.reserve_uuid;
k=k+1;
END IF; END IF;
IF in3_reserve_pub = i.reserve_pub IF in3_reserve_pub = i.reserve_pub
THEN THEN
out_reserve_found3 = FALSE; out_reserve_found3 = FALSE;
ruuid3 = i.reserve_uuid; ruuid3 = i.reserve_uuid;
k=k+1;
END IF; END IF;
IF in4_reserve_pub = i.reserve_pub IF in4_reserve_pub = i.reserve_pub
THEN THEN
out_reserve_found4 = FALSE; out_reserve_found4 = FALSE;
ruuid4 = i.reserve_uuid; ruuid4 = i.reserve_uuid;
END IF; k=k+1;
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;
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;
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 IF; END IF;
END LOOP;
CLOSE curs_reserve_exist; 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 THEN
RETURN; RETURN;
END IF; END IF;
@ -254,6 +186,9 @@ BEGIN
PERFORM pg_notify(in3_notify, NULL); PERFORM pg_notify(in3_notify, NULL);
PERFORM pg_notify(in4_notify, NULL); PERFORM pg_notify(in4_notify, NULL);
k=0;
OPEN curs_transaction_exist FOR
WITH reserve_in_changes AS (
INSERT INTO reserves_in INSERT INTO reserves_in
(reserve_pub (reserve_pub
,wire_reference ,wire_reference
@ -291,43 +226,39 @@ BEGIN
,in4_exchange_account_name ,in4_exchange_account_name
,in4_wire_source_h_payto ,in4_wire_source_h_payto
,in_expiration_date) ,in_expiration_date)
ON CONFLICT DO NOTHING; 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 IF FOUND
THEN THEN
transaction_duplicate = FALSE; /*HAPPY PATH THERE IS NO DUPLICATE TRANS AND NEW RESERVE*/ IF in_reserve_pub = i.reserve_pub
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
THEN THEN
transaction_duplicate = TRUE; transaction_duplicate = TRUE;
k=k+1;
END IF; END IF;
IF in2_reserve_pub = i.reserve_pub
IF in2_reserve_pub = l.reserve_pub
THEN THEN
transaction_duplicate2 = TRUE; transaction_duplicate2 = TRUE;
k=k+1;
END IF; END IF;
IF in3_reserve_pub = l.reserve_pub IF in3_reserve_pub = i.reserve_pub
THEN THEN
transaction_duplicate3 = TRUE; transaction_duplicate3 = TRUE;
k=k+1;
END IF; END IF;
IF in4_reserve_pub = l.reserve_pub IF in4_reserve_pub = i.reserve_pub
THEN THEN
transaction_duplicate4 = TRUE; transaction_duplicate4 = TRUE;
k=k+1;
END IF; END IF;
IF transaction_duplicate AND transaction_duplicate2 AND transaction_duplicate3 AND transaction_duplicate4
THEN
RETURN;
END IF; END IF;
END LOOP; END LOOP;
END IF;
CLOSE curs_reserve_exist;
CLOSE curs_transaction_exist; CLOSE curs_transaction_exist;
RETURN; RETURN;
END $$; END $$;

View File

@ -23,7 +23,7 @@ CREATE OR REPLACE PROCEDURE exchange_do_batch_reserves_update(
IN in_exchange_account_name VARCHAR, IN in_exchange_account_name VARCHAR,
IN in_reserve_found BOOLEAN, IN in_reserve_found BOOLEAN,
IN in_wire_source_h_payto BYTEA, IN in_wire_source_h_payto BYTEA,
IN in_notify text) ---h_payto IN in_notify text)
LANGUAGE plpgsql LANGUAGE plpgsql
AS $$ AS $$
BEGIN BEGIN
@ -48,7 +48,7 @@ BEGIN
--IF THE INSERTION WAS A SUCCESS IT MEANS NO DUPLICATED TRANSACTION --IF THE INSERTION WAS A SUCCESS IT MEANS NO DUPLICATED TRANSACTION
IF FOUND IF FOUND
THEN THEN
-- transaction_duplicate = FALSE;
IF in_reserve_found IF in_reserve_found
THEN THEN
UPDATE reserves UPDATE reserves

View File

@ -217,7 +217,10 @@ insert2 (struct PostgresClosure *pg,
? GNUNET_DB_STATUS_SUCCESS_NO_RESULTS ? GNUNET_DB_STATUS_SUCCESS_NO_RESULTS
: GNUNET_DB_STATUS_SUCCESS_ONE_RESULT;*/ : 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); GNUNET_break (0);
TEH_PG_rollback (pg); TEH_PG_rollback (pg);
@ -358,7 +361,12 @@ insert4 (struct PostgresClosure *pg,
? GNUNET_DB_STATUS_SUCCESS_NO_RESULTS ? GNUNET_DB_STATUS_SUCCESS_NO_RESULTS
: GNUNET_DB_STATUS_SUCCESS_ONE_RESULT;*/ : 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); GNUNET_break (0);
TEH_PG_rollback (pg); 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 enum GNUNET_DB_QueryStatus
TEH_PG_batch2_reserves_in_insert (void *cls, 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) enum GNUNET_DB_QueryStatus *results)
{ {
struct PostgresClosure *pg = cls; struct PostgresClosure *pg = cls;
// enum GNUNET_DB_QueryStatus qs1; enum GNUNET_DB_QueryStatus qs1;
enum GNUNET_DB_QueryStatus qs2; enum GNUNET_DB_QueryStatus qs2;
enum GNUNET_DB_QueryStatus qs4; enum GNUNET_DB_QueryStatus qs4;
enum GNUNET_DB_QueryStatus qs5; enum GNUNET_DB_QueryStatus qs5;
@ -437,9 +677,45 @@ TEH_PG_batch2_reserves_in_insert (void *cls,
{ {
unsigned int bs = GNUNET_MIN (batch_size, unsigned int bs = GNUNET_MIN (batch_size,
reserves_length - i); 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, qs4=insert4(pg,
&reserves[i], &reserves[i],
expiry, 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, "%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]); //fprintf(stdout, "%d %d %d %d\n", transaction_duplicate[i], transaction_duplicate[i+1], transaction_duplicate[i+2], transaction_duplicate[i+3]);
i += 4; i += 4;
continue; break;
}
switch (bs)
{
case 3: case 3:
case 2: case 2:
qs5=insert2(pg, qs5=insert2(pg,

View File

@ -39,4 +39,6 @@ SET search_path TO exchange;
#include "exchange_do_batch_reserves_update.sql" #include "exchange_do_batch_reserves_update.sql"
#include "exchange_do_batch2_reserves_in_insert.sql" #include "exchange_do_batch2_reserves_in_insert.sql"
#include "exchange_do_batch4_reserves_in_insert.sql" #include "exchange_do_batch4_reserves_in_insert.sql"
#include "exchange_do_batch8_reserves_in_insert.sql"
COMMIT; COMMIT;

View File

@ -23,7 +23,7 @@
#include "taler_json_lib.h" #include "taler_json_lib.h"
#include "taler_exchangedb_plugin.h" #include "taler_exchangedb_plugin.h"
#include "math.h" #include "math.h"
#define ROUNDS 100 #define ROUNDS 10
/** /**
* Global result from the testcase. * Global result from the testcase.
@ -73,7 +73,7 @@ static struct TALER_EXCHANGEDB_Plugin *plugin;
static void static void
run (void *cls) 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)]; struct GNUNET_TIME_Relative times[sizeof (batches)/sizeof(*batches)];
unsigned long long sqrs[sizeof (batches)/sizeof(*batches)]; unsigned long long sqrs[sizeof (batches)/sizeof(*batches)];
struct GNUNET_CONFIGURATION_Handle *cfg = cls; struct GNUNET_CONFIGURATION_Handle *cfg = cls;
@ -102,7 +102,7 @@ run (void *cls)
memset (sqrs, 0, sizeof (sqrs)); memset (sqrs, 0, sizeof (sqrs));
for (unsigned int r = 0; r < ROUNDS; r++) 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"; const char *sndr = "payto://x-taler-bank/localhost:8080/1";
struct TALER_Amount value; struct TALER_Amount value;
@ -153,7 +153,7 @@ run (void *cls)
system ("./test.sh"); //DELETE AFTER TIMER 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; struct GNUNET_TIME_Relative avg;
double avg_dbl; double avg_dbl;