summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2021-12-19 13:43:33 +0100
committerChristian Grothoff <christian@grothoff.org>2021-12-19 13:43:33 +0100
commit62444504f78976137569d635b34fdbedeb6ccc5c (patch)
tree14822f2fc862c42553bdf9eb78d93704b89a7bb9
parent527d9036785a6d0482a9026b13262f2b8401db8e (diff)
downloadexchange-62444504f78976137569d635b34fdbedeb6ccc5c.tar.gz
exchange-62444504f78976137569d635b34fdbedeb6ccc5c.tar.bz2
exchange-62444504f78976137569d635b34fdbedeb6ccc5c.zip
denormalize reserve_pub in reserve tables to enable sharding
-rw-r--r--src/exchange/taler-exchange-httpd_withdraw.c6
-rw-r--r--src/exchangedb/exchange-0001.sql56
-rw-r--r--src/exchangedb/irbt_callbacks.c9
-rw-r--r--src/exchangedb/lrbt_callbacks.c18
-rw-r--r--src/exchangedb/plugin_exchangedb_postgres.c145
-rw-r--r--src/exchangedb/test_exchangedb.c4
-rw-r--r--src/include/taler_exchangedb_plugin.h14
7 files changed, 104 insertions, 148 deletions
diff --git a/src/exchange/taler-exchange-httpd_withdraw.c b/src/exchange/taler-exchange-httpd_withdraw.c
index 2c5cb4d75..dfd10b5e4 100644
--- a/src/exchange/taler-exchange-httpd_withdraw.c
+++ b/src/exchange/taler-exchange-httpd_withdraw.c
@@ -140,7 +140,6 @@ withdraw_transaction (void *cls,
enum GNUNET_DB_QueryStatus qs;
bool found = false;
bool balance_ok = false;
- uint64_t reserve_uuid;
struct GNUNET_TIME_Timestamp now;
now = GNUNET_TIME_timestamp_get ();
@@ -151,8 +150,7 @@ withdraw_transaction (void *cls,
now,
&found,
&balance_ok,
- &wc->kyc,
- &reserve_uuid);
+ &wc->kyc);
if (0 > qs)
{
if (GNUNET_DB_STATUS_HARD_ERROR == qs)
@@ -234,7 +232,7 @@ withdraw_transaction (void *cls,
qs2 = TEH_plugin->do_withdraw_limit_check (
TEH_plugin->cls,
- reserve_uuid,
+ &wc->collectable.reserve_pub,
GNUNET_TIME_absolute_subtract (now.abs_time,
TEH_kyc_config.withdraw_period),
&TEH_kyc_config.withdraw_limit,
diff --git a/src/exchangedb/exchange-0001.sql b/src/exchangedb/exchange-0001.sql
index a267fe137..dcd0cb091 100644
--- a/src/exchangedb/exchange-0001.sql
+++ b/src/exchangedb/exchange-0001.sql
@@ -87,13 +87,15 @@ COMMENT ON COLUMN wire_targets.external_id
CREATE TABLE IF NOT EXISTS reserves
- (reserve_uuid BIGSERIAL UNIQUE
+ (reserve_uuid BIGSERIAL
,reserve_pub BYTEA PRIMARY KEY CHECK(LENGTH(reserve_pub)=32)
,current_balance_val INT8 NOT NULL
,current_balance_frac INT4 NOT NULL
,expiration_date INT8 NOT NULL
,gc_date INT8 NOT NULL
- );
+ )
+ PARTITION BY HASH (reserve_pub);
+
COMMENT ON TABLE reserves
IS 'Summarizes the balance of a reserve. Updated when new funds are added or withdrawn.';
COMMENT ON COLUMN reserves.expiration_date
@@ -101,6 +103,17 @@ COMMENT ON COLUMN reserves.expiration_date
COMMENT ON COLUMN reserves.gc_date
IS 'Used to forget all information about a reserve during garbage collection';
+CREATE TABLE reserves_0 PARTITION OF reserves FOR VALUES WITH (MODULUS 8, REMAINDER 0);
+CREATE TABLE reserves_1 PARTITION OF reserves FOR VALUES WITH (MODULUS 8, REMAINDER 1);
+CREATE TABLE reserves_2 PARTITION OF reserves FOR VALUES WITH (MODULUS 8, REMAINDER 2);
+CREATE TABLE reserves_3 PARTITION OF reserves FOR VALUES WITH (MODULUS 8, REMAINDER 3);
+CREATE TABLE reserves_4 PARTITION OF reserves FOR VALUES WITH (MODULUS 8, REMAINDER 4);
+CREATE TABLE reserves_5 PARTITION OF reserves FOR VALUES WITH (MODULUS 8, REMAINDER 5);
+CREATE TABLE reserves_6 PARTITION OF reserves FOR VALUES WITH (MODULUS 8, REMAINDER 6);
+CREATE TABLE reserves_7 PARTITION OF reserves FOR VALUES WITH (MODULUS 8, REMAINDER 7);
+
+
+
CREATE INDEX IF NOT EXISTS reserves_expiration_index
ON reserves
(expiration_date
@@ -119,14 +132,14 @@ COMMENT ON INDEX reserves_gc_index
CREATE TABLE IF NOT EXISTS reserves_in
(reserve_in_serial_id BIGSERIAL UNIQUE
- ,reserve_uuid INT8 NOT NULL REFERENCES reserves (reserve_uuid) ON DELETE CASCADE
+ ,reserve_pub BYTEA NOT NULL REFERENCES reserves (reserve_pub) ON DELETE CASCADE
,wire_reference INT8 NOT NULL
,credit_val INT8 NOT NULL
,credit_frac INT4 NOT NULL
,wire_source_serial_id INT8 NOT NULL REFERENCES wire_targets (wire_target_serial_id)
,exchange_account_section TEXT NOT NULL
,execution_date INT8 NOT NULL
- ,PRIMARY KEY (reserve_uuid, wire_reference)
+ ,PRIMARY KEY (reserve_pub, wire_reference)
);
COMMENT ON TABLE reserves_in
IS 'list of transfers of funds into the reserves, one per incoming wire transfer';
@@ -144,9 +157,10 @@ CREATE INDEX IF NOT EXISTS reserves_in_exchange_account_serial
);
+
CREATE TABLE IF NOT EXISTS reserves_close
(close_uuid BIGSERIAL PRIMARY KEY
- ,reserve_uuid INT8 NOT NULL REFERENCES reserves (reserve_uuid) ON DELETE CASCADE
+ ,reserve_pub BYTEA NOT NULL REFERENCES reserves (reserve_pub) ON DELETE CASCADE
,execution_date INT8 NOT NULL
,wtid BYTEA NOT NULL CHECK (LENGTH(wtid)=32)
,wire_target_serial_id INT8 NOT NULL REFERENCES wire_targets (wire_target_serial_id)
@@ -161,7 +175,7 @@ COMMENT ON COLUMN reserves_close.wire_target_serial_id
CREATE INDEX IF NOT EXISTS reserves_close_by_uuid
ON reserves_close
- (reserve_uuid);
+ (reserve_pub);
CREATE TABLE IF NOT EXISTS reserves_out
@@ -169,7 +183,7 @@ CREATE TABLE IF NOT EXISTS reserves_out
,h_blind_ev BYTEA PRIMARY KEY CHECK (LENGTH(h_blind_ev)=64)
,denominations_serial INT8 NOT NULL REFERENCES denominations (denominations_serial)
,denom_sig BYTEA NOT NULL
- ,reserve_uuid INT8 NOT NULL REFERENCES reserves (reserve_uuid) ON DELETE CASCADE
+ ,reserve_pub BYTEA NOT NULL REFERENCES reserves (reserve_pub) ON DELETE CASCADE
,reserve_sig BYTEA NOT NULL CHECK (LENGTH(reserve_sig)=64)
,execution_date INT8 NOT NULL
,amount_with_fee_val INT8 NOT NULL
@@ -182,10 +196,10 @@ COMMENT ON COLUMN reserves_out.h_blind_ev
COMMENT ON COLUMN reserves_out.denominations_serial
IS 'We do not CASCADE ON DELETE here, we may keep the denomination data alive';
-CREATE INDEX IF NOT EXISTS reserves_out_reserve_uuid_index
+CREATE INDEX IF NOT EXISTS reserves_out_reserve_pub_index
ON reserves_out
- (reserve_uuid);
-COMMENT ON INDEX reserves_out_reserve_uuid_index
+ (reserve_pub);
+COMMENT ON INDEX reserves_out_reserve_pub_index
IS 'for get_reserves_out';
CREATE INDEX IF NOT EXISTS reserves_out_execution_date
@@ -710,7 +724,6 @@ CREATE OR REPLACE FUNCTION exchange_do_withdraw(
OUT reserve_found BOOLEAN,
OUT balance_ok BOOLEAN,
OUT kycok BOOLEAN,
- OUT ruuid INT8,
OUT account_uuid INT8)
LANGUAGE plpgsql
AS $$
@@ -734,21 +747,18 @@ THEN
reserve_found=FALSE;
balance_ok=FALSE;
kycok=FALSE;
- ruuid=0;
account_uuid=0;
ASSERT false, 'denomination unknown';
RETURN;
END IF;
SELECT
- reserves.reserve_uuid
- ,current_balance_val
+ current_balance_val
,current_balance_frac
,expiration_date
,gc_date
INTO
- ruuid
- ,reserve_val
+ reserve_val
,reserve_frac
,reserve_gc
FROM reserves
@@ -770,7 +780,7 @@ INSERT INTO reserves_out
(h_blind_ev
,denominations_serial
,denom_sig
- ,reserve_uuid
+ ,reserve_pub
,reserve_sig
,execution_date
,amount_with_fee_val
@@ -779,7 +789,7 @@ VALUES
(h_coin_envelope
,denom_serial
,denom_sig
- ,ruuid
+ ,rpub
,reserve_sig
,now
,amount_val
@@ -830,7 +840,7 @@ UPDATE reserves SET
,current_balance_val=reserve_val
,current_balance_frac=reserve_frac
WHERE
- reserves.reserve_uuid=ruuid;
+ reserves.reserve_pub=rpub;
reserve_found=TRUE;
balance_ok=TRUE;
@@ -845,7 +855,7 @@ SELECT
,account_uuid
FROM reserves_in
JOIN wire_targets ON (wire_source_serial_id = wire_target_serial_id)
- WHERE reserve_uuid=ruuid
+ WHERE reserve_pub=rpub
LIMIT 1; -- limit 1 should not be required (without p2p transfers)
END $$;
@@ -856,7 +866,7 @@ COMMENT ON FUNCTION exchange_do_withdraw(INT8, INT4, BYTEA, BYTEA, BYTEA, BYTEA,
CREATE OR REPLACE FUNCTION exchange_do_withdraw_limit_check(
- IN ruuid INT8,
+ IN rpub BYTEA,
IN start_time INT8,
IN upper_limit_val INT8,
IN upper_limit_frac INT4,
@@ -876,7 +886,7 @@ SELECT
total_val
,total_frac
FROM reserves_out
- WHERE reserves_out.reserve_uuid=ruuid
+ WHERE reserves_out.reserve_pub=rpub
AND execution_date > start_time;
-- normalize result
@@ -889,7 +899,7 @@ below_limit = (total_val < upper_limit_val) OR
(total_frac <= upper_limit_frac) );
END $$;
-COMMENT ON FUNCTION exchange_do_withdraw_limit_check(INT8, INT8, INT8, INT4)
+COMMENT ON FUNCTION exchange_do_withdraw_limit_check(BYTEA, INT8, INT8, INT4)
IS 'Check whether the withdrawals from the given reserve since the given time are below the given threshold';
diff --git a/src/exchangedb/irbt_callbacks.c b/src/exchangedb/irbt_callbacks.c
index 47606ebc2..ffccbef3b 100644
--- a/src/exchangedb/irbt_callbacks.c
+++ b/src/exchangedb/irbt_callbacks.c
@@ -174,7 +174,7 @@ irbt_cb_table_reserves_in (struct PostgresClosure *pg,
td->details.reserves_in.exchange_account_section),
GNUNET_PQ_query_param_timestamp (
&td->details.reserves_in.execution_date),
- GNUNET_PQ_query_param_uint64 (&td->details.reserves_in.reserve_uuid),
+ GNUNET_PQ_query_param_auto_from_type (&td->details.reserves_in.reserve_pub),
GNUNET_PQ_query_param_end
};
@@ -204,7 +204,8 @@ irbt_cb_table_reserves_close (struct PostgresClosure *pg,
&td->details.reserves_close.wire_target_serial_id),
TALER_PQ_query_param_amount (&td->details.reserves_close.amount),
TALER_PQ_query_param_amount (&td->details.reserves_close.closing_fee),
- GNUNET_PQ_query_param_uint64 (&td->details.reserves_close.reserve_uuid),
+ GNUNET_PQ_query_param_auto_from_type (
+ &td->details.reserves_close.reserve_pub),
GNUNET_PQ_query_param_end
};
@@ -232,8 +233,8 @@ irbt_cb_table_reserves_out (struct PostgresClosure *pg,
&td->details.reserves_out.denominations_serial),
TALER_PQ_query_param_blinded_denom_sig (
&td->details.reserves_out.denom_sig),
- GNUNET_PQ_query_param_uint64 (
- &td->details.reserves_out.reserve_uuid),
+ GNUNET_PQ_query_param_auto_from_type (
+ &td->details.reserves_out.reserve_pub),
GNUNET_PQ_query_param_auto_from_type (
&td->details.reserves_out.reserve_sig),
GNUNET_PQ_query_param_timestamp (
diff --git a/src/exchangedb/lrbt_callbacks.c b/src/exchangedb/lrbt_callbacks.c
index 6dc990dc2..4711ac86b 100644
--- a/src/exchangedb/lrbt_callbacks.c
+++ b/src/exchangedb/lrbt_callbacks.c
@@ -277,9 +277,9 @@ lrbt_cb_table_reserves_in (void *cls,
GNUNET_PQ_result_spec_uint64 (
"serial",
&td.serial),
- GNUNET_PQ_result_spec_uint64 (
- "reserve_uuid",
- &td.details.reserves_in.reserve_uuid),
+ GNUNET_PQ_result_spec_auto_from_type (
+ "reserve_pub",
+ &td.details.reserves_in.reserve_pub),
GNUNET_PQ_result_spec_uint64 (
"wire_reference",
&td.details.reserves_in.wire_reference),
@@ -338,9 +338,9 @@ lrbt_cb_table_reserves_close (void *cls,
GNUNET_PQ_result_spec_uint64 (
"serial",
&td.serial),
- GNUNET_PQ_result_spec_uint64 (
- "reserve_uuid",
- &td.details.reserves_close.reserve_uuid),
+ GNUNET_PQ_result_spec_auto_from_type (
+ "reserve_pub",
+ &td.details.reserves_close.reserve_pub),
GNUNET_PQ_result_spec_timestamp (
"execution_date",
&td.details.reserves_close.execution_date),
@@ -408,9 +408,9 @@ lrbt_cb_table_reserves_out (void *cls,
TALER_PQ_result_spec_blinded_denom_sig (
"denom_sig",
&td.details.reserves_out.denom_sig),
- GNUNET_PQ_result_spec_uint64 (
- "reserve_uuid",
- &td.details.reserves_out.reserve_uuid),
+ GNUNET_PQ_result_spec_auto_from_type (
+ "reserve_pub",
+ &td.details.reserves_out.reserve_pub),
GNUNET_PQ_result_spec_auto_from_type (
"reserve_sig",
&td.details.reserves_out.reserve_sig),
diff --git a/src/exchangedb/plugin_exchangedb_postgres.c b/src/exchangedb/plugin_exchangedb_postgres.c
index 99ebd7c7b..5ac344c20 100644
--- a/src/exchangedb/plugin_exchangedb_postgres.c
+++ b/src/exchangedb/plugin_exchangedb_postgres.c
@@ -378,7 +378,7 @@ prepare_statements (struct PostgresClosure *pg)
",kyc_ok"
",wire_target_serial_id AS payment_target_uuid"
" FROM reserves"
- " JOIN reserves_in ri USING (reserve_uuid)"
+ " JOIN reserves_in ri USING (reserve_pub)"
" JOIN wire_targets wt "
" ON (ri.wire_source_serial_id = wt.wire_target_serial_id)"
" WHERE reserve_pub=$1"
@@ -467,7 +467,7 @@ prepare_statements (struct PostgresClosure *pg)
GNUNET_PQ_make_prepare (
"reserves_close_insert",
"INSERT INTO reserves_close "
- "(reserve_uuid"
+ "(reserve_pub"
",execution_date"
",wtid"
",wire_target_serial_id"
@@ -475,9 +475,7 @@ prepare_statements (struct PostgresClosure *pg)
",amount_frac"
",closing_fee_val"
",closing_fee_frac"
- ") SELECT reserve_uuid, $2, $3, $4, $5, $6, $7, $8"
- " FROM reserves"
- " WHERE reserve_pub=$1;",
+ ") VALUES ($1, $2, $3, $4, $5, $6, $7, $8);",
8),
/* Used in #reserves_update() when the reserve is updated */
GNUNET_PQ_make_prepare (
@@ -494,23 +492,21 @@ prepare_statements (struct PostgresClosure *pg)
GNUNET_PQ_make_prepare (
"reserves_in_add_transaction",
"INSERT INTO reserves_in "
- "(reserve_uuid"
+ "(reserve_pub"
",wire_reference"
",credit_val"
",credit_frac"
",exchange_account_section"
",wire_source_serial_id"
",execution_date"
- ") SELECT reserve_uuid, $2, $3, $4, $5, $6, $7"
- " FROM reserves"
- " WHERE reserve_pub=$1"
+ ") VALUES ($1, $2, $3, $4, $5, $6, $7)"
" ON CONFLICT DO NOTHING;",
7),
/* Used in #postgres_reserves_in_insert() to store transaction details */
GNUNET_PQ_make_prepare (
- "reserves_in_add_by_uuid",
+ "reserves_in_add_by_pub",
"INSERT INTO reserves_in "
- "(reserve_uuid"
+ "(reserve_pub"
",wire_reference"
",credit_val"
",credit_frac"
@@ -545,7 +541,7 @@ prepare_statements (struct PostgresClosure *pg)
",reserve_in_serial_id"
" FROM reserves_in"
" JOIN reserves"
- " USING (reserve_uuid)"
+ " USING (reserve_pub)"
" JOIN wire_targets"
" ON (wire_source_serial_id = wire_target_serial_id)"
" WHERE reserve_in_serial_id>=$1"
@@ -565,7 +561,7 @@ prepare_statements (struct PostgresClosure *pg)
",reserve_in_serial_id"
" FROM reserves_in"
" JOIN reserves "
- " USING (reserve_uuid)"
+ " USING (reserve_pub)"
" JOIN wire_targets"
" ON (wire_source_serial_id = wire_target_serial_id)"
" WHERE reserve_in_serial_id>=$1 AND exchange_account_section=$2"
@@ -584,10 +580,7 @@ prepare_statements (struct PostgresClosure *pg)
" FROM reserves_in"
" JOIN wire_targets"
" ON (wire_source_serial_id = wire_target_serial_id)"
- " WHERE reserve_uuid="
- " (SELECT reserve_uuid "
- " FROM reserves"
- " WHERE reserve_pub=$1);",
+ " WHERE reserve_pub=$1;",
1),
/* Lock withdraw table; NOTE: we may want to eventually shard the
deposit table to avoid this lock being the main point of
@@ -619,7 +612,6 @@ prepare_statements (struct PostgresClosure *pg)
" reserve_found"
",balance_ok"
",kycok AS kyc_ok"
- ",ruuid AS reserve_uuid"
",account_uuid AS payment_target_uuid"
" FROM exchange_do_withdraw"
" ($1,$2,$3,$4,$5,$6,$7,$8,$9);",
@@ -643,23 +635,18 @@ prepare_statements (struct PostgresClosure *pg)
authorizing the withdrawal. */
GNUNET_PQ_make_prepare (
"insert_withdraw_info",
- "WITH ds AS"
- " (SELECT denominations_serial"
- " FROM denominations"
- " WHERE denom_pub_hash=$2)"
"INSERT INTO reserves_out "
"(h_blind_ev"
",denominations_serial"
",denom_sig"
- ",reserve_uuid"
+ ",reserve_pub"
",reserve_sig"
",execution_date"
",amount_with_fee_val"
",amount_with_fee_frac"
- ") SELECT $1, ds.denominations_serial, $3, reserve_uuid, $5, $6, $7, $8"
- " FROM reserves"
- " CROSS JOIN ds"
- " WHERE reserve_pub=$4;",
+ ") SELECT $1, denominations_serial, $3, $4, $5, $6, $7, $8"
+ " FROM denominations"
+ " WHERE denom_pub_hash=$2;",
8),
/* Used in #postgres_get_withdraw_info() to
locate the response for a /reserve/withdraw request
@@ -679,7 +666,7 @@ prepare_statements (struct PostgresClosure *pg)
",denom.fee_withdraw_frac"
" FROM reserves_out"
" JOIN reserves"
- " USING (reserve_uuid)"
+ " USING (reserve_pub)"
" JOIN denominations denom"
" USING (denominations_serial)"
" WHERE h_blind_ev=$1;",
@@ -703,10 +690,7 @@ prepare_statements (struct PostgresClosure *pg)
" FROM reserves_out"
" JOIN denominations denom"
" USING (denominations_serial)"
- " WHERE reserve_uuid="
- " (SELECT reserve_uuid"
- " FROM reserves"
- " WHERE reserve_pub=$1);",
+ " WHERE reserve_pub=$1;",
1),
/* Used in #postgres_select_withdrawals_above_serial_id() */
GNUNET_PQ_make_prepare (
@@ -722,7 +706,7 @@ prepare_statements (struct PostgresClosure *pg)
",reserve_out_serial_id"
" FROM reserves_out"
" JOIN reserves"
- " USING (reserve_uuid)"
+ " USING (reserve_pub)"
" JOIN denominations denom"
" USING (denominations_serial)"
" WHERE reserve_out_serial_id>=$1"
@@ -1531,7 +1515,7 @@ prepare_statements (struct PostgresClosure *pg)
" JOIN reserves_out ro"
" USING (reserve_out_serial_id)"
" JOIN reserves"
- " USING (reserve_uuid)"
+ " USING (reserve_pub)"
" JOIN denominations denoms"
" ON (coins.denominations_serial = denoms.denominations_serial)"
" WHERE recoup_uuid>=$1"
@@ -1589,7 +1573,7 @@ prepare_statements (struct PostgresClosure *pg)
" JOIN wire_targets"
" USING (wire_target_serial_id)"
" JOIN reserves"
- " USING (reserve_uuid)"
+ " USING (reserve_pub)"
" WHERE close_uuid>=$1"
" ORDER BY close_uuid ASC;",
1),
@@ -1613,10 +1597,7 @@ prepare_statements (struct PostgresClosure *pg)
" USING (denominations_serial)"
" JOIN reserves_out ro"
" USING (reserve_out_serial_id)"
- " WHERE ro.reserve_uuid="
- " (SELECT reserve_uuid"
- " FROM reserves"
- " WHERE reserve_pub=$1);",
+ " WHERE ro.reserve_pub=$1;",
1),
/* Used in #postgres_get_coin_transactions() to obtain recoup transactions
affecting old coins of refreshed coins */
@@ -1661,10 +1642,7 @@ prepare_statements (struct PostgresClosure *pg)
" FROM reserves_close"
" JOIN wire_targets"
" USING (wire_target_serial_id)"
- " WHERE reserve_uuid="
- " (SELECT reserve_uuid"
- " FROM reserves"
- " WHERE reserve_pub=$1);",
+ " WHERE reserve_pub=$1;",
1),
/* Used in #postgres_get_expired_reserves() */
GNUNET_PQ_make_prepare (
@@ -1677,7 +1655,7 @@ prepare_statements (struct PostgresClosure *pg)
",current_balance_frac"
" FROM reserves"
" JOIN reserves_in ri"
- " USING (reserve_uuid)"
+ " USING (reserve_pub)"
" JOIN wire_targets wt"
" ON (ri.wire_source_serial_id = wt.wire_target_serial_id)"
" WHERE expiration_date<=$1"
@@ -1703,7 +1681,7 @@ prepare_statements (struct PostgresClosure *pg)
" JOIN reserves_out ro"
" USING (reserve_out_serial_id)"
" JOIN reserves"
- " USING (reserve_uuid)"
+ " USING (reserve_pub)"
" JOIN known_coins coins"
" USING (known_coin_id)"
" JOIN denominations denoms"
@@ -1744,7 +1722,7 @@ prepare_statements (struct PostgresClosure *pg)
" reserves.reserve_pub"
" FROM reserves_out"
" JOIN reserves"
- " USING (reserve_uuid)"
+ " USING (reserve_pub)"
" WHERE h_blind_ev=$1"
" LIMIT 1;",
1),
@@ -1952,10 +1930,7 @@ prepare_statements (struct PostgresClosure *pg)
" amount_with_fee_val"
",amount_with_fee_frac"
" FROM reserves_out"
- " WHERE reserve_uuid="
- " (SELECT reserve_uuid"
- " FROM reserves"
- " WHERE reserve_pub=$1)"
+ " WHERE reserve_pub=$1"
" AND execution_date > $2;",
2),
/* used in #postgres_lookup_wire_fee_by_time() */
@@ -2199,7 +2174,7 @@ prepare_statements (struct PostgresClosure *pg)
"select_above_serial_by_table_reserves_in",
"SELECT"
" reserve_in_serial_id AS serial"
- ",reserve_uuid"
+ ",reserve_pub"
",wire_reference"
",credit_val"
",credit_frac"
@@ -2214,7 +2189,7 @@ prepare_statements (struct PostgresClosure *pg)
"select_above_serial_by_table_reserves_close",
"SELECT"
" close_uuid AS serial"
- ",reserve_uuid"
+ ",reserve_pub"
",execution_date"
",wtid"
",wire_target_serial_id"
@@ -2233,7 +2208,7 @@ prepare_statements (struct PostgresClosure *pg)
",h_blind_ev"
",denominations_serial"
",denom_sig"
- ",reserve_uuid"
+ ",reserve_pub"
",reserve_sig"
",execution_date"
",amount_with_fee_val"
@@ -2504,7 +2479,7 @@ prepare_statements (struct PostgresClosure *pg)
",wire_source_serial_id"
",exchange_account_section"
",execution_date"
- ",reserve_uuid"
+ ",reserve_pub"
") VALUES "
"($1, $2, $3, $4, $5, $6, $7, $8);",
8),
@@ -2519,7 +2494,7 @@ prepare_statements (struct PostgresClosure *pg)
",amount_frac"
",closing_fee_val"
",closing_fee_frac"
- ",reserve_uuid"
+ ",reserve_pub"
") VALUES "
"($1, $2, $3, $4, $5, $6, $7, $8, $9);",
9),
@@ -2530,7 +2505,7 @@ prepare_statements (struct PostgresClosure *pg)
",h_blind_ev"
",denominations_serial"
",denom_sig"
- ",reserve_uuid"
+ ",reserve_pub"
",reserve_sig"
",execution_date"
",amount_with_fee_val"
@@ -4249,41 +4224,21 @@ postgres_reserves_in_insert (void *cls,
return qs3;
}
GNUNET_assert (0 != kyc.payment_target_uuid);
- if (GNUNET_DB_STATUS_SUCCESS_NO_RESULTS == qs1)
- {
- /* We do not have the UUID, so insert by public key */
- struct GNUNET_PQ_QueryParam params[] = {
- GNUNET_PQ_query_param_auto_from_type (&reserve.pub),
- GNUNET_PQ_query_param_uint64 (&wire_ref),
- TALER_PQ_query_param_amount (balance),
- GNUNET_PQ_query_param_string (exchange_account_section),
- GNUNET_PQ_query_param_uint64 (&kyc.payment_target_uuid),
- GNUNET_PQ_query_param_timestamp (&execution_time),
- GNUNET_PQ_query_param_end
- };
-
- qs2 = GNUNET_PQ_eval_prepared_non_select (pg->conn,
- "reserves_in_add_transaction",
- params);
- }
- else
- {
- /* We do have the UUID, use that for the insert */
- struct GNUNET_PQ_QueryParam params[] = {
- GNUNET_PQ_query_param_uint64 (&reserve_uuid),
- GNUNET_PQ_query_param_uint64 (&wire_ref),
- TALER_PQ_query_param_amount (balance),
- GNUNET_PQ_query_param_string (exchange_account_section),
- GNUNET_PQ_query_param_uint64 (&kyc.payment_target_uuid),
- GNUNET_PQ_query_param_timestamp (&execution_time),
- GNUNET_PQ_query_param_end
- };
+ /* We do not have the UUID, so insert by public key */
+ struct GNUNET_PQ_QueryParam params[] = {
+ GNUNET_PQ_query_param_auto_from_type (&reserve.pub),
+ GNUNET_PQ_query_param_uint64 (&wire_ref),
+ TALER_PQ_query_param_amount (balance),
+ GNUNET_PQ_query_param_string (exchange_account_section),
+ GNUNET_PQ_query_param_uint64 (&kyc.payment_target_uuid),
+ GNUNET_PQ_query_param_timestamp (&execution_time),
+ GNUNET_PQ_query_param_end
+ };
- qs2 = GNUNET_PQ_eval_prepared_non_select (pg->conn,
- "reserves_in_add_by_uuid",
- params);
- }
- /* qs2 could be 0 as both statements used 'ON CONFLICT DO NOTHING' */
+ qs2 = GNUNET_PQ_eval_prepared_non_select (pg->conn,
+ "reserves_in_add_transaction",
+ params);
+ /* qs2 could be 0 as statement used 'ON CONFLICT DO NOTHING' */
if (0 >= qs2)
{
if ( (GNUNET_DB_STATUS_SUCCESS_NO_RESULTS == qs2) &&
@@ -4558,7 +4513,6 @@ postgres_do_check_coin_balance (
* @param[out] found set to true if the reserve was found
* @param[out] balance_ok set to true if the balance was sufficient
* @param[out] kyc_ok set to true if the kyc status of the reserve is satisfied
- * @param[out] reserve_uuid set to the UUID of the reserve
* @return query execution status
*/
static enum GNUNET_DB_QueryStatus
@@ -4568,8 +4522,7 @@ postgres_do_withdraw (
struct GNUNET_TIME_Timestamp now,
bool *found,
bool *balance_ok,
- struct TALER_EXCHANGEDB_KycStatus *kyc,
- uint64_t *reserve_uuid)
+ struct TALER_EXCHANGEDB_KycStatus *kyc)
{
struct PostgresClosure *pg = cls;
struct GNUNET_TIME_Timestamp gc;
@@ -4591,8 +4544,6 @@ postgres_do_withdraw (
balance_ok),
GNUNET_PQ_result_spec_bool ("kyc_ok",
&kyc->ok),
- GNUNET_PQ_result_spec_uint64 ("reserve_uuid",
- reserve_uuid),
GNUNET_PQ_result_spec_uint64 ("payment_target_uuid",
&kyc->payment_target_uuid),
GNUNET_PQ_result_spec_end
@@ -4624,14 +4575,14 @@ postgres_do_withdraw (
static enum GNUNET_DB_QueryStatus
postgres_do_withdraw_limit_check (
void *cls,
- uint64_t reserve_uuid,
+ const struct TALER_ReservePublicKeyP *reserve_pub,
struct GNUNET_TIME_Absolute withdraw_start,
const struct TALER_Amount *upper_limit,
bool *below_limit)
{
struct PostgresClosure *pg = cls;
struct GNUNET_PQ_QueryParam params[] = {
- GNUNET_PQ_query_param_uint64 (&reserve_uuid),
+ GNUNET_PQ_query_param_auto_from_type (reserve_pub),
GNUNET_PQ_query_param_absolute_time (&withdraw_start),
TALER_PQ_query_param_amount (upper_limit),
GNUNET_PQ_query_param_end
diff --git a/src/exchangedb/test_exchangedb.c b/src/exchangedb/test_exchangedb.c
index 65689d872..6d334d3c8 100644
--- a/src/exchangedb/test_exchangedb.c
+++ b/src/exchangedb/test_exchangedb.c
@@ -1674,7 +1674,6 @@ run (void *cls)
bool found;
bool balance_ok;
struct TALER_EXCHANGEDB_KycStatus kyc;
- uint64_t ruuid;
FAILIF (GNUNET_DB_STATUS_SUCCESS_ONE_RESULT !=
plugin->do_withdraw (plugin->cls,
@@ -1682,8 +1681,7 @@ run (void *cls)
now,
&found,
&balance_ok,
- &kyc,
- &ruuid));
+ &kyc));
GNUNET_assert (found);
GNUNET_assert (balance_ok);
GNUNET_assert (! kyc.ok);
diff --git a/src/include/taler_exchangedb_plugin.h b/src/include/taler_exchangedb_plugin.h
index ad840fc92..eacc13a9a 100644
--- a/src/include/taler_exchangedb_plugin.h
+++ b/src/include/taler_exchangedb_plugin.h
@@ -239,12 +239,12 @@ struct TALER_EXCHANGEDB_TableData
uint64_t sender_account;
char *exchange_account_section;
struct GNUNET_TIME_Timestamp execution_date;
- uint64_t reserve_uuid;
+ struct TALER_ReservePublicKeyP reserve_pub;
} reserves_in;
struct
{
- uint64_t reserve_uuid;
+ struct TALER_ReservePublicKeyP reserve_pub;
struct GNUNET_TIME_Timestamp execution_date;
struct TALER_WireTransferIdentifierRawP wtid;
uint64_t wire_target_serial_id;
@@ -257,7 +257,7 @@ struct TALER_EXCHANGEDB_TableData
struct TALER_BlindedCoinHash h_blind_ev;
uint64_t denominations_serial;
struct TALER_BlindedDenominationSignature denom_sig;
- uint64_t reserve_uuid;
+ struct TALER_ReservePublicKeyP reserve_pub;
struct TALER_ReserveSignatureP reserve_sig;
struct GNUNET_TIME_Timestamp execution_date;
struct TALER_Amount amount_with_fee;
@@ -2537,7 +2537,6 @@ struct TALER_EXCHANGEDB_Plugin
* @param[out] found set to true if the reserve was found
* @param[out] balance_ok set to true if the balance was sufficient
* @param[out] kyc set to the KYC status of the reserve
- * @param[out] reserve_uuid set to the UUID of the reserve
* @return query execution status
*/
enum GNUNET_DB_QueryStatus
@@ -2547,8 +2546,7 @@ struct TALER_EXCHANGEDB_Plugin
struct GNUNET_TIME_Timestamp now,
bool *found,
bool *balance_ok,
- struct TALER_EXCHANGEDB_KycStatus *kyc_ok,
- uint64_t *reserve_uuid);
+ struct TALER_EXCHANGEDB_KycStatus *kyc_ok);
/**
@@ -2556,7 +2554,7 @@ struct TALER_EXCHANGEDB_Plugin
* checks after withdraw operation.
*
* @param cls the `struct PostgresClosure` with the plugin-specific state
- * @param reserve_uuid reserve to check
+ * @param reserve_pub reserve to check
* @param withdraw_start starting point to accumulate from
* @param upper_limit maximum amount allowed
* @param[out] below_limit set to true if the limit was not exceeded
@@ -2565,7 +2563,7 @@ struct TALER_EXCHANGEDB_Plugin
enum GNUNET_DB_QueryStatus
(*do_withdraw_limit_check)(
void *cls,
- uint64_t reserve_uuid,
+ const struct TALER_ReservePublicKeyP *reserve_pub,
struct GNUNET_TIME_Absolute withdraw_start,
const struct TALER_Amount *upper_limit,
bool *below_limit);