diff options
Diffstat (limited to 'src/exchangedb/plugin_exchangedb_postgres.c')
-rw-r--r-- | src/exchangedb/plugin_exchangedb_postgres.c | 111 |
1 files changed, 66 insertions, 45 deletions
diff --git a/src/exchangedb/plugin_exchangedb_postgres.c b/src/exchangedb/plugin_exchangedb_postgres.c index 2ef250775..108b55219 100644 --- a/src/exchangedb/plugin_exchangedb_postgres.c +++ b/src/exchangedb/plugin_exchangedb_postgres.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 published by the Free Software @@ -21,6 +21,7 @@ * @author Christian Grothoff * @author Sree Harsha Totakura * @author Marcello Stanisci + * @author Özgür Kesim */ #include "platform.h" #include <poll.h> @@ -37,7 +38,6 @@ #include "pg_get_link_data.h" #include "pg_helper.h" #include "pg_do_reserve_open.h" -#include "pg_do_withdraw.h" #include "pg_get_coin_transactions.h" #include "pg_get_expired_reserves.h" #include "pg_get_purse_request.h" @@ -46,6 +46,7 @@ #include "pg_insert_close_request.h" #include "pg_insert_records_by_table.h" #include "pg_insert_reserve_open_deposit.h" +#include "pg_get_pending_kyc_requirement_process.h" #include "pg_iterate_kyc_reference.h" #include "pg_iterate_reserve_close_info.h" #include "pg_lookup_records_by_table.h" @@ -64,7 +65,6 @@ #include "pg_iterate_active_signkeys.h" #include "pg_preflight.h" #include "pg_commit.h" -#include "pg_insert_aggregation_tracking.h" #include "pg_drop_tables.h" #include "pg_select_satisfied_kyc_processes.h" #include "pg_select_aggregation_amounts_for_kyc_check.h" @@ -81,6 +81,7 @@ #include "pg_get_drain_profit.h" #include "pg_get_purse_deposit.h" #include "pg_insert_contract.h" +#include "pg_insert_kyc_failure.h" #include "pg_select_contract.h" #include "pg_select_purse_merge.h" #include "pg_select_contract_by_purse.h" @@ -92,7 +93,6 @@ #include "pg_update_auditor.h" #include "pg_begin_revolving_shard.h" #include "pg_get_extension_manifest.h" -#include "pg_insert_history_request.h" #include "pg_do_purse_delete.h" #include "pg_do_purse_merge.h" #include "pg_start_read_committed.h" @@ -116,11 +116,13 @@ #include "pg_drain_kyc_alert.h" #include "pg_reserves_in_insert.h" #include "pg_get_withdraw_info.h" -#include "pg_get_age_withdraw_info.h" +#include "pg_get_age_withdraw.h" #include "pg_do_batch_withdraw.h" +#include "pg_do_age_withdraw.h" #include "pg_get_policy_details.h" #include "pg_persist_policy_details.h" #include "pg_do_deposit.h" +#include "pg_get_wire_hash_for_contract.h" #include "pg_add_policy_fulfillment_proof.h" #include "pg_do_melt.h" #include "pg_do_refund.h" @@ -130,6 +132,7 @@ #include "pg_count_known_coins.h" #include "pg_ensure_coin_known.h" #include "pg_get_known_coin.h" +#include "pg_get_signature_for_known_coin.h" #include "pg_get_coin_denomination.h" #include "pg_have_deposit2.h" #include "pg_aggregate.h" @@ -138,7 +141,6 @@ #include "pg_find_aggregation_transient.h" #include "pg_update_aggregation_transient.h" #include "pg_get_ready_deposit.h" -#include "pg_insert_deposit.h" #include "pg_insert_refund.h" #include "pg_select_refunds_by_coin.h" #include "pg_get_melt.h" @@ -159,8 +161,8 @@ #include "pg_start_deferred_wire_out.h" #include "pg_store_wire_transfer_out.h" #include "pg_gc.h" -#include "pg_select_deposits_above_serial_id.h" -#include "pg_select_history_requests_above_serial_id.h" +#include "pg_inject_auditor_triggers.h" +#include "pg_select_coin_deposits_above_serial_id.h" #include "pg_select_purse_decisions_above_serial_id.h" #include "pg_select_purse_deposits_by_purse.h" #include "pg_select_refreshes_above_serial_id.h" @@ -176,7 +178,9 @@ #include "pg_get_old_coin_by_h_blind.h" #include "pg_insert_denomination_revocation.h" #include "pg_get_denomination_revocation.h" -#include "pg_select_deposits_missing_wire.h" +#include "pg_select_batch_deposits_missing_wire.h" +#include "pg_select_justification_for_missing_wire.h" +#include "pg_select_aggregations_above_serial.h" #include "pg_lookup_auditor_timestamp.h" #include "pg_lookup_auditor_status.h" #include "pg_insert_auditor.h" @@ -206,7 +210,6 @@ #include "pg_setup_wire_target.h" #include "pg_compute_shard.h" #include "pg_insert_kyc_attributes.h" -#include "pg_update_kyc_attributes.h" #include "pg_select_similar_kyc_attributes.h" #include "pg_select_kyc_attributes.h" #include "pg_insert_aml_officer.h" @@ -216,14 +219,14 @@ #include "pg_select_aml_process.h" #include "pg_select_aml_history.h" #include "pg_insert_aml_decision.h" - +#include "pg_batch_ensure_coin_known.h" /** * Set to 1 to enable Postgres auto_explain module. This will * slow down things a _lot_, but also provide extensive logging * in the Postgres database logger for performance analysis. */ -#define AUTO_EXPLAIN 1 +#define AUTO_EXPLAIN 0 /** @@ -270,6 +273,8 @@ TEH_PG_internal_setup (struct PostgresClosure *pg) GNUNET_PQ_make_try_execute ("SET enable_sort=OFF;"), GNUNET_PQ_make_try_execute ("SET enable_seqscan=OFF;"), GNUNET_PQ_make_try_execute ("SET search_path TO exchange;"), + /* Mergejoin causes issues, see Postgres #18380 */ + GNUNET_PQ_make_try_execute ("SET enable_mergejoin=OFF;"), GNUNET_PQ_EXECUTE_STATEMENT_END }; #else @@ -278,7 +283,8 @@ TEH_PG_internal_setup (struct PostgresClosure *pg) "SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL SERIALIZABLE;"), GNUNET_PQ_make_try_execute ("SET enable_sort=OFF;"), GNUNET_PQ_make_try_execute ("SET enable_seqscan=OFF;"), - GNUNET_PQ_make_try_execute ("SET autocommit=OFF;"), + /* Mergejoin causes issues, see Postgres #18380 */ + GNUNET_PQ_make_try_execute ("SET enable_mergejoin=OFF;"), GNUNET_PQ_make_try_execute ("SET search_path TO exchange;"), GNUNET_PQ_EXECUTE_STATEMENT_END }; @@ -292,6 +298,7 @@ TEH_PG_internal_setup (struct PostgresClosure *pg) NULL); if (NULL == db_conn) return GNUNET_SYSERR; + pg->prep_gen++; pg->conn = db_conn; } @@ -343,21 +350,29 @@ libtaler_plugin_exchangedb_postgres_init (void *cls) GNUNET_free (pg); return NULL; } - if ( (GNUNET_OK != - GNUNET_CONFIGURATION_get_value_time (cfg, - "exchangedb", - "IDLE_RESERVE_EXPIRATION_TIME", - &pg->idle_reserve_expiration_time)) - || - (GNUNET_OK != - GNUNET_CONFIGURATION_get_value_time (cfg, - "exchangedb", - "LEGAL_RESERVE_EXPIRATION_TIME", - &pg->legal_reserve_expiration_time)) ) + if (GNUNET_OK != + GNUNET_CONFIGURATION_get_value_time (cfg, + "exchangedb", + "IDLE_RESERVE_EXPIRATION_TIME", + &pg->idle_reserve_expiration_time)) + { + GNUNET_log_config_missing (GNUNET_ERROR_TYPE_ERROR, + "exchangedb", + "IDLE_RESERVE_EXPIRATION_TIME"); + GNUNET_free (pg->exchange_url); + GNUNET_free (pg->sql_dir); + GNUNET_free (pg); + return NULL; + } + if (GNUNET_OK != + GNUNET_CONFIGURATION_get_value_time (cfg, + "exchangedb", + "LEGAL_RESERVE_EXPIRATION_TIME", + &pg->legal_reserve_expiration_time)) { GNUNET_log_config_missing (GNUNET_ERROR_TYPE_ERROR, "exchangedb", - "LEGAL/IDLE_RESERVE_EXPIRATION_TIME"); + "LEGAL_RESERVE_EXPIRATION_TIME"); GNUNET_free (pg->exchange_url); GNUNET_free (pg->sql_dir); GNUNET_free (pg); @@ -413,8 +428,6 @@ libtaler_plugin_exchangedb_postgres_init (void *cls) = &TEH_PG_do_reserve_open; plugin->drop_tables = &TEH_PG_drop_tables; - plugin->do_withdraw - = &TEH_PG_do_withdraw; plugin->free_coin_transaction_list = &TEH_COMMON_free_coin_transaction_list; plugin->free_reserve_history @@ -427,8 +440,6 @@ libtaler_plugin_exchangedb_postgres_init (void *cls) = &TEH_PG_get_purse_request; plugin->get_reserve_history = &TEH_PG_get_reserve_history; - plugin->get_reserve_status - = &TEH_PG_get_reserve_status; plugin->get_unfinished_close_requests = &TEH_PG_get_unfinished_close_requests; plugin->insert_records_by_table @@ -477,8 +488,6 @@ libtaler_plugin_exchangedb_postgres_init (void *cls) = &TEH_PG_commit; plugin->preflight = &TEH_PG_preflight; - plugin->insert_aggregation_tracking - = &TEH_PG_insert_aggregation_tracking; plugin->select_aggregation_amounts_for_kyc_check = &TEH_PG_select_aggregation_amounts_for_kyc_check; plugin->select_satisfied_kyc_processes @@ -531,8 +540,6 @@ libtaler_plugin_exchangedb_postgres_init (void *cls) = &TEH_PG_begin_revolving_shard; plugin->get_extension_manifest = &TEH_PG_get_extension_manifest; - plugin->insert_history_request - = &TEH_PG_insert_history_request; plugin->do_purse_merge = &TEH_PG_do_purse_merge; plugin->do_purse_delete @@ -581,14 +588,18 @@ libtaler_plugin_exchangedb_postgres_init (void *cls) = &TEH_PG_get_withdraw_info; plugin->do_batch_withdraw = &TEH_PG_do_batch_withdraw; - plugin->get_age_withdraw_info - = &TEH_PG_get_age_withdraw_info; + plugin->do_age_withdraw + = &TEH_PG_do_age_withdraw; + plugin->get_age_withdraw + = &TEH_PG_get_age_withdraw; plugin->get_policy_details = &TEH_PG_get_policy_details; plugin->persist_policy_details = &TEH_PG_persist_policy_details; plugin->do_deposit = &TEH_PG_do_deposit; + plugin->get_wire_hash_for_contract + = &TEH_PG_get_wire_hash_for_contract; plugin->add_policy_fulfillment_proof = &TEH_PG_add_policy_fulfillment_proof; plugin->do_melt @@ -607,6 +618,8 @@ libtaler_plugin_exchangedb_postgres_init (void *cls) = &TEH_PG_ensure_coin_known; plugin->get_known_coin = &TEH_PG_get_known_coin; + plugin->get_signature_for_known_coin + = &TEH_PG_get_signature_for_known_coin; plugin->get_coin_denomination = &TEH_PG_get_coin_denomination; plugin->have_deposit2 @@ -623,8 +636,6 @@ libtaler_plugin_exchangedb_postgres_init (void *cls) = &TEH_PG_update_aggregation_transient; plugin->get_ready_deposit = &TEH_PG_get_ready_deposit; - plugin->insert_deposit - = &TEH_PG_insert_deposit; plugin->insert_refund = &TEH_PG_insert_refund; plugin->select_refunds_by_coin @@ -665,10 +676,8 @@ libtaler_plugin_exchangedb_postgres_init (void *cls) = &TEH_PG_store_wire_transfer_out; plugin->gc = &TEH_PG_gc; - plugin->select_deposits_above_serial_id - = &TEH_PG_select_deposits_above_serial_id; - plugin->select_history_requests_above_serial_id - = &TEH_PG_select_history_requests_above_serial_id; + plugin->select_coin_deposits_above_serial_id + = &TEH_PG_select_coin_deposits_above_serial_id; plugin->select_purse_decisions_above_serial_id = &TEH_PG_select_purse_decisions_above_serial_id; plugin->select_purse_deposits_by_purse @@ -699,8 +708,12 @@ libtaler_plugin_exchangedb_postgres_init (void *cls) = &TEH_PG_insert_denomination_revocation; plugin->get_denomination_revocation = &TEH_PG_get_denomination_revocation; - plugin->select_deposits_missing_wire - = &TEH_PG_select_deposits_missing_wire; + plugin->select_batch_deposits_missing_wire + = &TEH_PG_select_batch_deposits_missing_wire; + plugin->select_justification_for_missing_wire + = &TEH_PG_select_justification_for_missing_wire; + plugin->select_aggregations_above_serial + = &TEH_PG_select_aggregations_above_serial; plugin->lookup_auditor_timestamp = &TEH_PG_lookup_auditor_timestamp; plugin->lookup_auditor_status @@ -735,6 +748,8 @@ libtaler_plugin_exchangedb_postgres_init (void *cls) = &TEH_PG_begin_shard; plugin->abort_shard = &TEH_PG_abort_shard; + plugin->insert_kyc_failure + = &TEH_PG_insert_kyc_failure; plugin->complete_shard = &TEH_PG_complete_shard; plugin->release_revolving_shard @@ -751,10 +766,10 @@ libtaler_plugin_exchangedb_postgres_init (void *cls) = &TEH_PG_select_purse_by_merge_pub; plugin->set_purse_balance = &TEH_PG_set_purse_balance; + plugin->get_pending_kyc_requirement_process + = &TEH_PG_get_pending_kyc_requirement_process; plugin->insert_kyc_attributes = &TEH_PG_insert_kyc_attributes; - plugin->update_kyc_attributes - = &TEH_PG_update_kyc_attributes; plugin->select_similar_kyc_attributes = &TEH_PG_select_similar_kyc_attributes; plugin->select_kyc_attributes @@ -773,6 +788,12 @@ libtaler_plugin_exchangedb_postgres_init (void *cls) = &TEH_PG_select_aml_history; plugin->insert_aml_decision = &TEH_PG_insert_aml_decision; + + plugin->batch_ensure_coin_known + = &TEH_PG_batch_ensure_coin_known; + plugin->inject_auditor_triggers + = &TEH_PG_inject_auditor_triggers; + return plugin; } |