summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2023-02-19 21:46:15 +0100
committerChristian Grothoff <christian@grothoff.org>2023-02-19 21:46:15 +0100
commit13d90bb1a3962272d82da47aa5e193103a2014ae (patch)
tree51d90336e0b750a8fdc3c5bc135f7ed746e62b4c
parente2fe36a0be198bc2e674368b1d32fc8891494a3b (diff)
downloadexchange-13d90bb1a3962272d82da47aa5e193103a2014ae.tar.gz
exchange-13d90bb1a3962272d82da47aa5e193103a2014ae.tar.bz2
exchange-13d90bb1a3962272d82da47aa5e193103a2014ae.zip
on idempotent deposit, just skip most of the transaction
-rw-r--r--src/exchangedb/exchange_do_purse_deposit.sql7
-rw-r--r--src/testing/test_exchange_p2p.c10
2 files changed, 16 insertions, 1 deletions
diff --git a/src/exchangedb/exchange_do_purse_deposit.sql b/src/exchangedb/exchange_do_purse_deposit.sql
index 7ea426b77..d710e9002 100644
--- a/src/exchangedb/exchange_do_purse_deposit.sql
+++ b/src/exchangedb/exchange_do_purse_deposit.sql
@@ -67,6 +67,7 @@ IF NOT FOUND
THEN
-- Idempotency check: check if coin_sig is the same,
-- if so, success, otherwise conflict!
+
PERFORM
FROM exchange.purse_deposits
WHERE coin_pub = in_coin_pub
@@ -79,6 +80,12 @@ THEN
out_late=FALSE;
out_conflict=TRUE;
RETURN;
+ ELSE
+ -- Deposit exists, do not count for balance. Allow.
+ out_late=FALSE;
+ out_balance_ok=TRUE;
+ out_conflict=FALSE;
+ RETURN;
END IF;
END IF;
diff --git a/src/testing/test_exchange_p2p.c b/src/testing/test_exchange_p2p.c
index 6eea4a0bf..329ed2693 100644
--- a/src/testing/test_exchange_p2p.c
+++ b/src/testing/test_exchange_p2p.c
@@ -1,6 +1,6 @@
/*
This file is part of TALER
- Copyright (C) 2014--2022 Taler Systems SA
+ Copyright (C) 2014--2023 Taler Systems SA
TALER is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as
@@ -250,6 +250,14 @@ run (void *cls,
"withdraw-coin-1",
"EUR:1.01",
NULL),
+ TALER_TESTING_cmd_purse_deposit_coins (
+ "purse-deposit-coins-idempotent-but-gone",
+ MHD_HTTP_GONE,
+ 0 /* min age */,
+ "purse-create-with-reserve",
+ "withdraw-coin-1",
+ "EUR:1.01",
+ NULL),
TALER_TESTING_cmd_purse_poll_finish (
"pull-deposit-purse-poll-finish",
GNUNET_TIME_relative_multiply (