From 37f294b6add3ff4780b14ad54331e98c47b8453a Mon Sep 17 00:00:00 2001 From: Joseph Date: Fri, 6 Jan 2023 11:05:05 -0500 Subject: modifications to batch1 --- .../exchange_do_batch_reserves_in_insert.sql | 50 +++++++++++++--------- src/exchangedb/pg_batch2_reserves_in_insert.c | 2 + 2 files changed, 32 insertions(+), 20 deletions(-) (limited to 'src') diff --git a/src/exchangedb/exchange_do_batch_reserves_in_insert.sql b/src/exchangedb/exchange_do_batch_reserves_in_insert.sql index 4e0383f6..d1cc35d3 100644 --- a/src/exchangedb/exchange_do_batch_reserves_in_insert.sql +++ b/src/exchangedb/exchange_do_batch_reserves_in_insert.sql @@ -32,7 +32,10 @@ CREATE OR REPLACE FUNCTION exchange_do_batch_reserves_in_insert( OUT ruuid INT8) LANGUAGE plpgsql AS $$ - +DECLARE + curs refcursor; +DECLARE + i RECORD; BEGIN ruuid= 0; out_reserve_found = TRUE; @@ -46,28 +49,35 @@ transaction_duplicate= TRUE; ,in_payto_uri) ON CONFLICT DO NOTHING; - INSERT INTO reserves - (reserve_pub - ,current_balance_val - ,current_balance_frac - ,expiration_date - ,gc_date) - VALUES - (in_reserve_pub - ,in_credit_val - ,in_credit_frac - ,in_expiration_date - ,in_gc_date) - ON CONFLICT DO NOTHING - RETURNING reserves.reserve_uuid INTO ruuid; + OPEN curs FOR + WITH reserve_changes AS ( + INSERT INTO reserves + (reserve_pub + ,current_balance_val + ,current_balance_frac + ,expiration_date + ,gc_date) + VALUES + (in_reserve_pub + ,in_credit_val + ,in_credit_frac + ,in_expiration_date + ,in_gc_date) + ON CONFLICT DO NOTHING + RETURNING reserve_uuid, reserve_pub) + SELECT * FROM reserve_changes; + FETCH FROM curs INTO i; IF FOUND THEN -- We made a change, so the reserve did not previously exist. - out_reserve_found = FALSE; - ELSE - -- We made no change, which means the reserve existed. - out_reserve_found = TRUE; + IF in_reserve_pub = i.reserve_pub + THEN + out_reserve_found = FALSE; + ruuid = i.reserve_uuid; + END IF; END IF; + CLOSE curs; + PERFORM pg_notify(in_notify, NULL); INSERT INTO reserves_in (reserve_pub @@ -92,7 +102,7 @@ transaction_duplicate= TRUE; transaction_duplicate = FALSE; ELSE -- Unhappy... --- RAISE EXCEPTION 'Reserve did not exist, but INSERT into reserves_in gave conflict'; + RAISE EXCEPTION 'Reserve did not exist, but INSERT into reserves_in gave conflict'; transaction_duplicate = TRUE; -- ROLLBACK; END IF; diff --git a/src/exchangedb/pg_batch2_reserves_in_insert.c b/src/exchangedb/pg_batch2_reserves_in_insert.c index a55c518c..e0208f09 100644 --- a/src/exchangedb/pg_batch2_reserves_in_insert.c +++ b/src/exchangedb/pg_batch2_reserves_in_insert.c @@ -763,6 +763,7 @@ TEH_PG_batch2_reserves_in_insert (void *cls, t_duplicate |= transaction_duplicate[i+1]; t_duplicate |= transaction_duplicate[i+2]; t_duplicate |= transaction_duplicate[i+3]; + // fprintf(stdout, "reserve_uuid : %ld %ld %ld %ld\n", reserve_uuid[i], reserve_uuid[i+1], reserve_uuid[i+2], reserve_uuid[i+3]); i += 4; break; case 3: @@ -792,6 +793,7 @@ TEH_PG_batch2_reserves_in_insert (void *cls, results[i] = (t_duplicate) ? GNUNET_DB_STATUS_SUCCESS_NO_RESULTS : GNUNET_DB_STATUS_SUCCESS_ONE_RESULT; + // fprintf(stdout, "reserve_uuid : %ld %ld\n", reserve_uuid[i], reserve_uuid[i+1]); i += 2; break; case 1: -- cgit v1.2.3 From 1a94db3d4943b6fbec9e3c3131dc8b9b6ad233f6 Mon Sep 17 00:00:00 2001 From: Joseph Date: Fri, 6 Jan 2023 11:05:53 -0500 Subject: some changes to batchtest --- src/exchangedb/exchange_do_batch2_reserves_in_insert.sql | 1 - src/exchangedb/exchange_do_batch4_reserves_in_insert.sql | 2 +- src/exchangedb/test_exchangedb_by_j.c | 2 +- 3 files changed, 2 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/exchangedb/exchange_do_batch2_reserves_in_insert.sql b/src/exchangedb/exchange_do_batch2_reserves_in_insert.sql index bda644ec..932f7d81 100644 --- a/src/exchangedb/exchange_do_batch2_reserves_in_insert.sql +++ b/src/exchangedb/exchange_do_batch2_reserves_in_insert.sql @@ -55,7 +55,6 @@ DECLARE DECLARE k INT8; BEGIN - --SIMPLE INSERT ON CONFLICT DO NOTHING transaction_duplicate=TRUE; transaction_duplicate2=TRUE; out_reserve_found = TRUE; diff --git a/src/exchangedb/exchange_do_batch4_reserves_in_insert.sql b/src/exchangedb/exchange_do_batch4_reserves_in_insert.sql index c2157f7d..a70521bc 100644 --- a/src/exchangedb/exchange_do_batch4_reserves_in_insert.sql +++ b/src/exchangedb/exchange_do_batch4_reserves_in_insert.sql @@ -267,7 +267,7 @@ BEGIN END IF; k=k+1; END LOOP; - + /**ROLLBACK TRANSACTION IN SOTRED PROCEDURE IS IT PROSSIBLE ?**/ /*IF transaction_duplicate OR transaction_duplicate2 OR transaction_duplicate3 diff --git a/src/exchangedb/test_exchangedb_by_j.c b/src/exchangedb/test_exchangedb_by_j.c index 9769d964..533871cc 100644 --- a/src/exchangedb/test_exchangedb_by_j.c +++ b/src/exchangedb/test_exchangedb_by_j.c @@ -107,7 +107,7 @@ run (void *cls) const char *sndr = "payto://x-taler-bank/localhost:8080/1"; struct TALER_Amount value; unsigned int batch_size = batches[i]; - unsigned int iterations = 16;//1024*10; + unsigned int iterations = 10000;//1024*10; struct TALER_ReservePublicKeyP reserve_pubs[iterations]; struct GNUNET_TIME_Absolute now; struct GNUNET_TIME_Timestamp ts; -- cgit v1.2.3 From 28c3ae47de7428b4f7019db9158390f8d14ca93d Mon Sep 17 00:00:00 2001 From: Joseph Date: Fri, 6 Jan 2023 11:15:32 -0500 Subject: try batch1 with cursor --- .../exchange_do_batch_reserves_in_insert.sql | 20 +++++++++++++------- src/exchangedb/pg_batch2_reserves_in_insert.c | 2 +- src/exchangedb/test_exchangedb_by_j.c | 2 +- 3 files changed, 15 insertions(+), 9 deletions(-) (limited to 'src') diff --git a/src/exchangedb/exchange_do_batch_reserves_in_insert.sql b/src/exchangedb/exchange_do_batch_reserves_in_insert.sql index d1cc35d3..c95f75c3 100644 --- a/src/exchangedb/exchange_do_batch_reserves_in_insert.sql +++ b/src/exchangedb/exchange_do_batch_reserves_in_insert.sql @@ -36,6 +36,8 @@ DECLARE curs refcursor; DECLARE i RECORD; +DECLARE + curs_trans refcursor; BEGIN ruuid= 0; out_reserve_found = TRUE; @@ -79,6 +81,8 @@ transaction_duplicate= TRUE; CLOSE curs; PERFORM pg_notify(in_notify, NULL); + OPEN curs_trans FOR + WITH reserve_transaction AS( INSERT INTO reserves_in (reserve_pub ,wire_reference @@ -95,16 +99,18 @@ transaction_duplicate= TRUE; ,in_exchange_account_name ,in_wire_source_h_payto ,in_expiration_date) - ON CONFLICT DO NOTHING; + ON CONFLICT DO NOTHING + RETURNING reserve_pub) + SELECT * FROM reserve_transaction; + FETCH FROM curs_trans INTO i; IF FOUND THEN + IF i.reserve_pub = in_reserve_pub + THEN -- HAPPY PATH THERE IS NO DUPLICATE TRANS - transaction_duplicate = FALSE; - ELSE - -- Unhappy... - RAISE EXCEPTION 'Reserve did not exist, but INSERT into reserves_in gave conflict'; - transaction_duplicate = TRUE; --- ROLLBACK; + transaction_duplicate = FALSE; + END IF; END IF; + CLOSE curs_trans; RETURN; END $$; diff --git a/src/exchangedb/pg_batch2_reserves_in_insert.c b/src/exchangedb/pg_batch2_reserves_in_insert.c index e0208f09..1ef9045d 100644 --- a/src/exchangedb/pg_batch2_reserves_in_insert.c +++ b/src/exchangedb/pg_batch2_reserves_in_insert.c @@ -817,7 +817,7 @@ TEH_PG_batch2_reserves_in_insert (void *cls, } need_update |= conflicts[i]; t_duplicate |= transaction_duplicate[i]; - // fprintf(stdout, "reserve uuid : %ld c :%d t:%d\n", reserve_uuid[i], conflicts[i], transaction_duplicate[i]); + // fprintf(stdout, "reserve uuid : %ld c :%d t:%d\n", reserve_uuid[i], conflicts[i], transaction_duplicate[i]); i += 1; break; case 0: diff --git a/src/exchangedb/test_exchangedb_by_j.c b/src/exchangedb/test_exchangedb_by_j.c index 533871cc..9769d964 100644 --- a/src/exchangedb/test_exchangedb_by_j.c +++ b/src/exchangedb/test_exchangedb_by_j.c @@ -107,7 +107,7 @@ run (void *cls) const char *sndr = "payto://x-taler-bank/localhost:8080/1"; struct TALER_Amount value; unsigned int batch_size = batches[i]; - unsigned int iterations = 10000;//1024*10; + unsigned int iterations = 16;//1024*10; struct TALER_ReservePublicKeyP reserve_pubs[iterations]; struct GNUNET_TIME_Absolute now; struct GNUNET_TIME_Timestamp ts; -- cgit v1.2.3 From 6cb8b68bd08ddb5edff396e293b6776e0e989ded Mon Sep 17 00:00:00 2001 From: Christian Grothoff Date: Fri, 6 Jan 2023 22:22:14 +0100 Subject: support md in TOS --- contrib/Makefile.am | 2 ++ contrib/update-pp.sh | 4 ++++ contrib/update-tos.sh | 4 ++++ src/mhd/mhd_legal.c | 1 + 4 files changed, 11 insertions(+) (limited to 'src') diff --git a/contrib/Makefile.am b/contrib/Makefile.am index cc1cf4d7..99927e7e 100644 --- a/contrib/Makefile.am +++ b/contrib/Makefile.am @@ -26,6 +26,7 @@ rdatadir=$(datadir)/taler/exchange tosen_DATA = \ tos/en/*.txt \ + tos/en/*.md \ tos/en/*.pdf \ tos/en/*.epub \ tos/en/*.xml \ @@ -33,6 +34,7 @@ tosen_DATA = \ ppen_DATA = \ pp/en/*.txt \ + pp/en/*.md \ pp/en/*.pdf \ pp/en/*.epub \ pp/en/*.xml \ diff --git a/contrib/update-pp.sh b/contrib/update-pp.sh index 948f6af3..728216c5 100755 --- a/contrib/update-pp.sh +++ b/contrib/update-pp.sh @@ -29,6 +29,10 @@ do else mv _build/$f/${VERSION}.$f $l/${VERSION}.$f fi + if test $f = "txt" + then + cp $l/${VERSION}.$f $l/${VERSION}.md + fi done done cd .. diff --git a/contrib/update-tos.sh b/contrib/update-tos.sh index 67db7c03..dcf9e391 100755 --- a/contrib/update-tos.sh +++ b/contrib/update-tos.sh @@ -29,6 +29,10 @@ do else mv _build/$f/${VERSION}.$f $l/${VERSION}.$f fi + if test $f = "txt" + then + cp $l/${VERSION}.$f $l/${VERSION}.md + fi done done cd .. diff --git a/src/mhd/mhd_legal.c b/src/mhd/mhd_legal.c index c801f84c..25435210 100644 --- a/src/mhd/mhd_legal.c +++ b/src/mhd/mhd_legal.c @@ -388,6 +388,7 @@ load_terms (struct TALER_MHD_Legal *legal, { .ext = ".html", .mime = "text/html", .priority = 100 }, { .ext = ".htm", .mime = "text/html", .priority = 99 }, { .ext = ".txt", .mime = "text/plain", .priority = 50 }, + { .ext = ".md", .mime = "text/markdown", .priority = 50 }, { .ext = ".pdf", .mime = "application/pdf", .priority = 25 }, { .ext = ".jpg", .mime = "image/jpeg" }, { .ext = ".jpeg", .mime = "image/jpeg" }, -- cgit v1.2.3 From d782dd7f54a1b86c402a99428364e86f38552f76 Mon Sep 17 00:00:00 2001 From: Christian Grothoff Date: Sat, 7 Jan 2023 13:53:59 +0100 Subject: wirewatch: ensure wirewatch doesn't busy-loop even if the server errors or ignores long-polling --- src/exchange/taler-exchange-wirewatch.c | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/exchange/taler-exchange-wirewatch.c b/src/exchange/taler-exchange-wirewatch.c index 337b11ca..95706032 100644 --- a/src/exchange/taler-exchange-wirewatch.c +++ b/src/exchange/taler-exchange-wirewatch.c @@ -1,6 +1,6 @@ /* This file is part of TALER - Copyright (C) 2016--2022 Taler Systems SA + Copyright (C) 2016--2023 Taler Systems SA TALER is free software; you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software @@ -51,6 +51,17 @@ static const struct TALER_EXCHANGEDB_AccountInfo *ai; */ static struct TALER_BANK_CreditHistoryHandle *hh; +/** + * Set to true if the request for history did actually + * return transaction items. + */ +static bool hh_returned_data; + +/** + * When did we start the last @e hh request? + */ +static struct GNUNET_TIME_Absolute hh_start_time; + /** * Until when is processing this wire plugin delayed? */ @@ -455,6 +466,18 @@ transaction_completed (void) GNUNET_SCHEDULER_shutdown (); return; } + if (! hh_returned_data) + { + /* Enforce long polling delay even if the server ignored it + and returned earlier */ + struct GNUNET_TIME_Relative latency; + struct GNUNET_TIME_Relative left; + + latency = GNUNET_TIME_absolute_get_duration (hh_start_time); + left = GNUNET_TIME_relative_subtract (LONGPOLL_TIMEOUT, + latency); + delayed_until = GNUNET_TIME_relative_to_absolute (left); + } GNUNET_assert (NULL == task); schedule_transfers (); } @@ -482,6 +505,7 @@ process_reply (const struct TALER_BANK_CreditDetails *details, transaction_completed (); return; } + hh_returned_data = true; /* check serial IDs for range constraints */ for (unsigned int i = 0; iauth, latest_row_off, -- cgit v1.2.3 From 0cf46d8e5995f84a642795ddf214776ed8d4077f Mon Sep 17 00:00:00 2001 From: Christian Grothoff Date: Mon, 9 Jan 2023 19:35:16 +0100 Subject: -add index on shard --- src/exchangedb/0002-work_shards.sql | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'src') diff --git a/src/exchangedb/0002-work_shards.sql b/src/exchangedb/0002-work_shards.sql index 016207d3..220745d4 100644 --- a/src/exchangedb/0002-work_shards.sql +++ b/src/exchangedb/0002-work_shards.sql @@ -49,3 +49,8 @@ CREATE INDEX work_shards_by_end_row_index ON work_shards (end_row DESC); +CREATE INDEX work_shards_by_rows + ON work_shards + (job_name + ,start_row + ,end_row); -- cgit v1.2.3