also cover drop/restart cases with psql logic

This commit is contained in:
Christian Grothoff 2020-01-17 12:22:11 +01:00
parent 099884ee66
commit d3fb16b380
No known key found for this signature in database
GPG Key ID: 939E6BE1E29FC3CC
8 changed files with 164 additions and 85 deletions

View File

@ -15,7 +15,9 @@ sqldir = $(prefix)/share/taler/sql/auditor/
sql_DATA = \
0000.sql \
0001.sql
0001.sql \
drop0000.sql \
restart0000.sql
EXTRA_DIST = \
auditordb-postgres.conf \

View File

@ -0,0 +1,49 @@
--
-- This file is part of TALER
-- Copyright (C) 2014--2020 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
-- Foundation; either version 3, or (at your option) any later version.
--
-- TALER is distributed in the hope that it will be useful, but WITHOUT ANY
-- WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
-- A PARTICULAR PURPOSE. See the GNU General Public License for more details.
--
-- You should have received a copy of the GNU General Public License along with
-- TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
--
-- Everything in one big transaction
BEGIN;
-- This script DROPs all of the tables we create, including the
-- versioning schema!
--
-- Unlike the other SQL files, it SHOULD be updated to reflect the
-- latest requirements for dropping tables.
-- Drops for 0001.sql
DROP TABLE IF EXISTS auditor_predicted_result;
DROP TABLE IF EXISTS auditor_historic_denomination_revenue;
DROP TABLE IF EXISTS auditor_balance_summary;
DROP TABLE IF EXISTS auditor_denomination_pending;
DROP TABLE IF EXISTS auditor_reserve_balance;
DROP TABLE IF EXISTS auditor_wire_fee_balance;
DROP TABLE IF EXISTS auditor_reserves;
DROP TABLE IF EXISTS auditor_progress_reserve;
DROP TABLE IF EXISTS auditor_progress_aggregation;
DROP TABLE IF EXISTS auditor_progress_deposit_confirmation;
DROP TABLE IF EXISTS auditor_progress_coin;
DROP TABLE IF EXISTS wire_auditor_progress;
DROP TABLE IF EXISTS wire_auditor_account_progress;
DROP TABLE IF EXISTS auditor_historic_reserve_summary CASCADE;
DROP TABLE IF EXISTS auditor_denominations CASCADE;
DROP TABLE IF EXISTS deposit_confirmations CASCADE;
DROP TABLE IF EXISTS auditor_exchanges CASCADE;
-- Drop versioning (0000.sql)
DROP SCHEMA IF EXISTS _v CASCADE;
-- And we're out of here...
COMMIT;

View File

@ -113,69 +113,20 @@ postgres_drop_tables (void *cls,
int drop_exchangelist)
{
struct PostgresClosure *pc = cls;
struct GNUNET_PQ_ExecuteStatement es[] = {
GNUNET_PQ_make_execute ("DELETE FROM auditor_predicted_result;"),
GNUNET_PQ_make_execute (
"DELETE FROM auditor_historic_denomination_revenue;"),
GNUNET_PQ_make_execute ("DELETE FROM auditor_balance_summary;"),
GNUNET_PQ_make_execute ("DELETE FROM auditor_denomination_pending;"),
GNUNET_PQ_make_execute ("DELETE FROM auditor_reserve_balance;"),
GNUNET_PQ_make_execute ("DELETE FROM auditor_wire_fee_balance;"),
GNUNET_PQ_make_execute ("DELETE FROM auditor_reserves;"),
GNUNET_PQ_make_execute ("DELETE FROM auditor_progress_reserve;"),
GNUNET_PQ_make_execute ("DELETE FROM auditor_progress_aggregation;"),
GNUNET_PQ_make_execute (
"DELETE FROM auditor_progress_deposit_confirmation;"),
GNUNET_PQ_make_execute ("DELETE FROM auditor_progress_coin;"),
GNUNET_PQ_make_execute ("DELETE FROM wire_auditor_progress;"),
GNUNET_PQ_make_execute ("DELETE FROM wire_auditor_account_progress;"),
GNUNET_PQ_make_execute ("DELETE FROM auditor_historic_reserve_summary;"),
GNUNET_PQ_EXECUTE_STATEMENT_END
};
struct GNUNET_PQ_ExecuteStatement esx[] = {
GNUNET_PQ_make_execute ("DROP TABLE IF EXISTS auditor_predicted_result;"),
GNUNET_PQ_make_execute (
"DROP TABLE IF EXISTS auditor_historic_denomination_revenue;"),
GNUNET_PQ_make_execute ("DROP TABLE IF EXISTS auditor_balance_summary;"),
GNUNET_PQ_make_execute (
"DROP TABLE IF EXISTS auditor_denomination_pending;"),
GNUNET_PQ_make_execute ("DROP TABLE IF EXISTS auditor_reserve_balance;"),
GNUNET_PQ_make_execute ("DROP TABLE IF EXISTS auditor_wire_fee_balance;"),
GNUNET_PQ_make_execute ("DROP TABLE IF EXISTS auditor_reserves;"),
GNUNET_PQ_make_execute ("DROP TABLE IF EXISTS auditor_progress_reserve;"),
GNUNET_PQ_make_execute (
"DROP TABLE IF EXISTS auditor_progress_aggregation;"),
GNUNET_PQ_make_execute (
"DROP TABLE IF EXISTS auditor_progress_deposit_confirmation;"),
GNUNET_PQ_make_execute ("DROP TABLE IF EXISTS auditor_progress_coin;"),
GNUNET_PQ_make_execute ("DROP TABLE IF EXISTS wire_auditor_progress;"),
GNUNET_PQ_make_execute (
"DROP TABLE IF EXISTS wire_auditor_account_progress;"),
GNUNET_PQ_make_execute (
"DROP TABLE IF EXISTS auditor_historic_reserve_summary CASCADE;"),
GNUNET_PQ_make_execute (
"DROP TABLE IF EXISTS auditor_denominations CASCADE;"),
GNUNET_PQ_make_execute (
"DROP TABLE IF EXISTS deposit_confirmations CASCADE;"),
GNUNET_PQ_make_execute ("DROP TABLE IF EXISTS auditor_exchanges CASCADE;"),
GNUNET_PQ_make_execute ("DROP SCHEMA IF EXISTS _v CASCADE;"),
GNUNET_PQ_EXECUTE_STATEMENT_END
};
struct GNUNET_PQ_Context *conn;
int ret;
char *exec_dir;
GNUNET_asprintf (&exec_dir,
(drop_exchangelist) ? "%sdrop" : "%srestart",
pc->sql_dir);
conn = GNUNET_PQ_connect (pc->connection_cfg_str,
exec_dir,
NULL,
es,
NULL);
if (NULL == conn)
return GNUNET_SYSERR;
ret = GNUNET_OK;
if (drop_exchangelist)
ret = GNUNET_PQ_exec_statements (conn,
esx);
GNUNET_PQ_disconnect (conn);
return ret;
return GNUNET_OK;
}

View File

@ -0,0 +1,47 @@
--
-- This file is part of TALER
-- Copyright (C) 2014--2020 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
-- Foundation; either version 3, or (at your option) any later version.
--
-- TALER is distributed in the hope that it will be useful, but WITHOUT ANY
-- WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
-- A PARTICULAR PURPOSE. See the GNU General Public License for more details.
--
-- You should have received a copy of the GNU General Public License along with
-- TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
--
-- Everything in one big transaction
BEGIN;
-- This script restart the auditor state as done to RESTART
-- an audit from scratch. It does NOT drop tables and also
-- PRESERVES data that running the auditor would not recover,
-- such as:
-- * the list of audited exchanges
-- * deposit confirmation reports the auditor received from merchants
-- * schema versioning information
--
-- Unlike the other SQL files, it SHOULD be updated to reflect the
-- latest requirements for dropping tables.
DELETE FROM auditor_predicted_result;
DELETE FROM auditor_historic_denomination_revenue;
DELETE FROM auditor_balance_summary;
DELETE FROM auditor_denomination_pending;
DELETE FROM auditor_reserve_balance;
DELETE FROM auditor_wire_fee_balance;
DELETE FROM auditor_reserves;
DELETE FROM auditor_progress_reserve;
DELETE FROM auditor_progress_aggregation;
DELETE FROM auditor_progress_deposit_confirmation;
DELETE FROM auditor_progress_coin;
DELETE FROM wire_auditor_progress;
DELETE FROM wire_auditor_account_progress;
DELETE FROM auditor_historic_reserve_summary;
-- And we're out of here...
COMMIT;

View File

@ -16,7 +16,8 @@ sqldir = $(prefix)/share/taler/sql/exchange/
sql_DATA = \
0000.sql \
0001.sql
0001.sql \
drop0000.sql
EXTRA_DIST = \
exchangedb.conf \

View File

@ -0,0 +1,50 @@
--
-- This file is part of TALER
-- Copyright (C) 2014--2020 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
-- Foundation; either version 3, or (at your option) any later version.
--
-- TALER is distributed in the hope that it will be useful, but WITHOUT ANY
-- WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
-- A PARTICULAR PURPOSE. See the GNU General Public License for more details.
--
-- You should have received a copy of the GNU General Public License along with
-- TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
--
-- Everything in one big transaction
BEGIN;
-- This script DROPs all of the tables we create, including the
-- versioning schema!
--
-- Unlike the other SQL files, it SHOULD be updated to reflect the
-- latest requirements for dropping tables.
-- Drops for 0001.sql
DROP TABLE IF EXISTS prewire CASCADE;
DROP TABLE IF EXISTS payback CASCADE;
DROP TABLE IF EXISTS payback_refresh CASCADE;
DROP TABLE IF EXISTS aggregation_tracking CASCADE;
DROP TABLE IF EXISTS wire_out CASCADE;
DROP TABLE IF EXISTS wire_fee CASCADE;
DROP TABLE IF EXISTS deposits CASCADE;
DROP TABLE IF EXISTS refunds CASCADE;
DROP TABLE IF EXISTS refresh_commitments CASCADE;
DROP TABLE IF EXISTS refresh_revealed_coins CASCADE;
DROP TABLE IF EXISTS refresh_transfer_keys CASCADE;
DROP TABLE IF EXISTS known_coins CASCADE;
DROP TABLE IF EXISTS reserves_close CASCADE;
DROP TABLE IF EXISTS reserves_out CASCADE;
DROP TABLE IF EXISTS reserves_in CASCADE;
DROP TABLE IF EXISTS reserves CASCADE;
DROP TABLE IF EXISTS denomination_revocations CASCADE;
DROP TABLE IF EXISTS denominations CASCADE;
-- Drop versioning (0000.sql)
DROP SCHEMA IF EXISTS _v CASCADE;
-- And we're out of here...
COMMIT;

View File

@ -2,4 +2,5 @@
CONFIG = "postgres:///taler"
# Where are the SQL files to setup our tables?
# Important: this MUST end with a "/"!
SQL_DIR = $DATADIR/sql/exchange/

View File

@ -147,39 +147,17 @@ static int
postgres_drop_tables (void *cls)
{
struct PostgresClosure *pc = cls;
struct GNUNET_PQ_ExecuteStatement es[] = {
GNUNET_PQ_make_execute ("DROP TABLE IF EXISTS prewire CASCADE;"),
GNUNET_PQ_make_execute ("DROP TABLE IF EXISTS payback CASCADE;"),
GNUNET_PQ_make_execute ("DROP TABLE IF EXISTS payback_refresh CASCADE;"),
GNUNET_PQ_make_execute (
"DROP TABLE IF EXISTS aggregation_tracking CASCADE;"),
GNUNET_PQ_make_execute ("DROP TABLE IF EXISTS wire_out CASCADE;"),
GNUNET_PQ_make_execute ("DROP TABLE IF EXISTS wire_fee CASCADE;"),
GNUNET_PQ_make_execute ("DROP TABLE IF EXISTS deposits CASCADE;"),
GNUNET_PQ_make_execute ("DROP TABLE IF EXISTS refunds CASCADE;"),
GNUNET_PQ_make_execute (
"DROP TABLE IF EXISTS refresh_commitments CASCADE;"),
GNUNET_PQ_make_execute (
"DROP TABLE IF EXISTS refresh_revealed_coins CASCADE;"),
GNUNET_PQ_make_execute (
"DROP TABLE IF EXISTS refresh_transfer_keys CASCADE;"),
GNUNET_PQ_make_execute ("DROP TABLE IF EXISTS known_coins CASCADE;"),
GNUNET_PQ_make_execute ("DROP TABLE IF EXISTS reserves_close CASCADE;"),
GNUNET_PQ_make_execute ("DROP TABLE IF EXISTS reserves_out CASCADE;"),
GNUNET_PQ_make_execute ("DROP TABLE IF EXISTS reserves_in CASCADE;"),
GNUNET_PQ_make_execute ("DROP TABLE IF EXISTS reserves CASCADE;"),
GNUNET_PQ_make_execute (
"DROP TABLE IF EXISTS denomination_revocations CASCADE;"),
GNUNET_PQ_make_execute ("DROP TABLE IF EXISTS denominations CASCADE;"),
GNUNET_PQ_make_execute ("DROP SCHEMA IF EXISTS _v CASCADE;"),
GNUNET_PQ_EXECUTE_STATEMENT_END
};
struct GNUNET_PQ_Context *conn;
char *drop_dir;
GNUNET_asprintf (&drop_dir,
"%sdrop",
pc->sql_dir);
conn = GNUNET_PQ_connect (pc->connection_cfg_str,
drop_dir,
NULL,
es,
NULL);
GNUNET_free (drop_dir);
if (NULL == conn)
return GNUNET_SYSERR;
GNUNET_PQ_disconnect (conn);