gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[taler-exchange] 01/15: -remove shard support


From: gnunet
Subject: [taler-exchange] 01/15: -remove shard support
Date: Sun, 27 Nov 2022 22:14:25 +0100

This is an automated email from the git hooks/post-receive script.

grothoff pushed a commit to branch master
in repository exchange.

commit 746a8a0cdb7b3494230d41e870173936120cd34b
Author: Christian Grothoff <christian@grothoff.org>
AuthorDate: Sat Nov 26 23:26:44 2022 +0100

    -remove shard support
---
 contrib/gana                                |   2 +-
 src/exchange-tools/taler-exchange-dbinit.c  |  49 +----
 src/exchangedb/Makefile.am                  |  26 +--
 src/exchangedb/common-0001.sql              |  81 --------
 src/exchangedb/common-0002.sql              | 288 +++++++++++++---------------
 src/exchangedb/exchange-0001-part.sql       |  34 ----
 src/exchangedb/exchange-0002-part.sql       |   3 +
 src/exchangedb/exchange-0002.sql.in         |   3 +-
 src/exchangedb/pg_complete_shard.c          |   9 +-
 src/exchangedb/pg_create_shard_tables.c     |  66 -------
 src/exchangedb/pg_create_shard_tables.h     |  39 ----
 src/exchangedb/pg_setup_foreign_servers.c   | 118 ------------
 src/exchangedb/pg_setup_foreign_servers.h   |  39 ----
 src/exchangedb/plugin_exchangedb_postgres.c |  30 +--
 src/exchangedb/procedures.sql               |   1 +
 src/exchangedb/shard-0002-part.sql          |  16 --
 16 files changed, 161 insertions(+), 643 deletions(-)

diff --git a/contrib/gana b/contrib/gana
index b971fd44..a4a6b9ba 160000
--- a/contrib/gana
+++ b/contrib/gana
@@ -1 +1 @@
-Subproject commit b971fd44ebf51a9c403dbbff144b43e73aa02c6c
+Subproject commit a4a6b9ba4b2634c56194d53e36344686d7052cef
diff --git a/src/exchange-tools/taler-exchange-dbinit.c 
b/src/exchange-tools/taler-exchange-dbinit.c
index 7dd5c015..db3d65a2 100644
--- a/src/exchange-tools/taler-exchange-dbinit.c
+++ b/src/exchange-tools/taler-exchange-dbinit.c
@@ -49,21 +49,11 @@ static int gc_db;
  */
 static uint32_t num_partitions;
 
-/**
- * -F option: setup a sharded database, i.e. create foreign tables/server
- */
-static int shard_db;
-
 /**
  * -f option: force partitions to be created when there is only one
  */
 static int force_create_partitions;
 
-/**
- * -S option: setup a database on a shard server, creates tables with suffix 
shard_idx
- */
-static uint32_t shard_idx;
-
 /**
  * Main function that will be run.
  *
@@ -100,21 +90,6 @@ run (void *cls,
                   "Could not drop tables as requested. Either database was not 
yet initialized, or permission denied. Consult the logs. Will still try to 
create new tables.\n");
     }
   }
-  if (0 < shard_idx)
-  {
-    if (GNUNET_OK !=
-        plugin->create_shard_tables (plugin->cls,
-                                     shard_idx))
-    {
-      GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-                  "Could not create shard database\n");
-      global_ret = EXIT_NOTINSTALLED;
-    }
-    /* We do not want to continue if we are on a shard */
-    TALER_EXCHANGEDB_plugin_unload (plugin);
-    plugin = NULL;
-    return;
-  }
   if (GNUNET_OK !=
       plugin->create_tables (plugin->cls))
   {
@@ -132,16 +107,9 @@ run (void *cls,
         && force_create_partitions))
   {
     enum GNUNET_GenericReturnValue r = GNUNET_OK;
-    if (shard_db)
-    {
-      r = plugin->setup_foreign_servers (plugin->cls,
-                                         num_partitions);
-    }
-    else
-    {
-      r = plugin->setup_partitions (plugin->cls,
-                                    num_partitions);
-    }
+
+    r = plugin->setup_partitions (plugin->cls,
+                                  num_partitions);
     if (GNUNET_OK != r)
     {
       GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
@@ -220,17 +188,8 @@ main (int argc,
     GNUNET_GETOPT_option_uint ('P',
                                "partition",
                                "NUMBER",
-                               "Setup a partitioned database where each table 
which can be partitioned holds NUMBER partitions on a single DB node (NOTE: 
sharding add -F for sharding)",
+                               "Setup a partitioned database where each table 
which can be partitioned holds NUMBER partitions on a single DB node",
                                &num_partitions),
-    GNUNET_GETOPT_option_flag ('F',
-                               "foreign",
-                               "Setup a sharded database with foreign servers 
(shards) / tables rather than a partitioned one, must be called as DB 
superuser.",
-                               &shard_db),
-    GNUNET_GETOPT_option_uint ('S',
-                               "shard",
-                               "INDEX",
-                               "Setup a shard server, creates tables with 
INDEX as suffix",
-                               &shard_idx),
     GNUNET_GETOPT_option_flag ('f',
                                "force",
                                "Force partitions to be created if there is 
only one partition",
diff --git a/src/exchangedb/Makefile.am b/src/exchangedb/Makefile.am
index 043b438c..595bb903 100644
--- a/src/exchangedb/Makefile.am
+++ b/src/exchangedb/Makefile.am
@@ -18,33 +18,25 @@ sqlinputs = \
   common-0001.sql \
   exchange-0001.sql.in \
   exchange-0001-part.sql \
-  shard-0001-part.sql \
-  shard-0001.sql.in \
   common-0002.sql \
   exchange-0002.sql.in \
-  exchange-0002-part.sql \
-  shard-0002-part.sql \
-  shard-0002.sql.in
+  exchange-0002-part.sql
 
 sql_DATA = \
   benchmark-0001.sql \
   versioning.sql \
   exchange-0001.sql \
   drop.sql \
-  procedures.sql \
-  shard-0001.sql
+  procedures.sql
 
 BUILT_SOURCES = \
-  shard-0001.sql \
   exchange-0001.sql \
   drop.sql \
   procedures.sql
 
 CLEANFILES = \
-  shard-0001.sql \
   exchange-0001.sql \
-  shard-0002.sql \
-  exchange-0002.sql 
+  exchange-0002.sql
 
 exchange-0001.sql: common-0001.sql exchange-0001-part.sql exchange-0001.sql.in
        chmod +w $@ || true
@@ -56,16 +48,6 @@ exchange-0002.sql: common-0002.sql exchange-0002-part.sql 
exchange-0002.sql.in
        gcc -E -P -undef - < exchange-0002.sql.in 2>/dev/null | sed -e 
"s/--.*//" | awk 'NF' - >$@
        chmod ugo-w $@
 
-shard-0001.sql: common-0001.sql shard-0001-part.sql exchange-0001.sql.in
-       chmod +w $@ || true
-       gcc -E -P -undef - < shard-0001.sql.in 2>/dev/null | sed -e "s/--.*//" 
| awk 'NF' - >$@
-       chmod ugo-w $@
-
-shard-0002.sql: common-0002.sql shard-0002-part.sql exchange-0002.sql.in
-       chmod +w $@ || true
-       gcc -E -P -undef - < shard-0002.sql.in 2>/dev/null | sed -e "s/--.*//" 
| awk 'NF' - >$@
-       chmod ugo-w $@
-
 EXTRA_DIST = \
   exchangedb.conf \
   exchangedb-postgres.conf \
@@ -111,7 +93,6 @@ libtaler_plugin_exchangedb_postgres_la_SOURCES = \
   pg_select_contract_by_purse.h pg_select_contract_by_purse.c \
   pg_insert_drain_profit.h pg_insert_drain_profit.c \
   pg_create_tables.h pg_create_tables.c \
-  pg_setup_foreign_servers.h pg_setup_foreign_servers.c \
   pg_event_listen.h pg_event_listen.c \
   pg_event_listen_cancel.h pg_event_listen_cancel.c \
   pg_event_notify.h pg_event_notify.c \
@@ -225,7 +206,6 @@ libtaler_plugin_exchangedb_postgres_la_SOURCES = \
   pg_do_batch_withdraw_insert.h pg_do_batch_withdraw_insert.c \
   pg_do_reserve_open.c pg_do_reserve_open.h \
   pg_do_withdraw.h pg_do_withdraw.c \
-  pg_create_shard_tables.h pg_create_shard_tables.c \
   pg_preflight.h pg_preflight.c \
   pg_iterate_active_signkeys.h pg_iterate_active_signkeys.c \
   pg_commit.h pg_commit.c \
diff --git a/src/exchangedb/common-0001.sql b/src/exchangedb/common-0001.sql
index a95d74d2..3c2a850d 100644
--- a/src/exchangedb/common-0001.sql
+++ b/src/exchangedb/common-0001.sql
@@ -50,7 +50,6 @@ RETURNS VOID
 LANGUAGE plpgsql
 AS $$
 BEGIN
-
   PERFORM create_partitioned_table(
     'CREATE TABLE IF NOT EXISTS %I'
       '(wire_target_serial_id BIGINT GENERATED BY DEFAULT AS IDENTITY' -- 
UNIQUE'
@@ -61,7 +60,6 @@ BEGIN
     ,'PARTITION BY HASH (wire_target_h_payto)'
     ,shard_suffix
   );
-
 END
 $$;
 
@@ -1010,61 +1008,6 @@ BEGIN
 END
 $$;
 
------------------------------ refunds ------------------------------
-
-CREATE OR REPLACE FUNCTION create_table_refunds(
-  IN shard_suffix VARCHAR DEFAULT NULL
-)
-RETURNS VOID
-LANGUAGE plpgsql
-AS $$
-DECLARE
-  table_name VARCHAR DEFAULT 'refunds';
-BEGIN
-
-  PERFORM create_partitioned_table(
-    'CREATE TABLE IF NOT EXISTS %I'
-      '(refund_serial_id BIGINT GENERATED BY DEFAULT AS IDENTITY' -- UNIQUE'
-      ',coin_pub BYTEA NOT NULL CHECK (LENGTH(coin_pub)=32)' -- REFERENCES 
known_coins (coin_pub) ON DELETE CASCADE
-      ',deposit_serial_id INT8 NOT NULL' -- REFERENCES deposits 
(deposit_serial_id) ON DELETE CASCADE'
-      ',merchant_sig BYTEA NOT NULL CHECK(LENGTH(merchant_sig)=64)'
-      ',rtransaction_id INT8 NOT NULL'
-      ',amount_with_fee_val INT8 NOT NULL'
-      ',amount_with_fee_frac INT4 NOT NULL'
-      -- ,PRIMARY KEY (deposit_serial_id, rtransaction_id) -- done per shard!
-    ') %s ;'
-    ,table_name
-    ,'PARTITION BY HASH (coin_pub)'
-    ,shard_suffix
-  );
-
-  table_name = concat_ws('_', table_name, shard_suffix);
-
-  EXECUTE FORMAT (
-    'CREATE INDEX IF NOT EXISTS ' || table_name || '_by_coin_pub_index '
-    'ON ' || table_name || ' '
-    '(coin_pub);'
-  );
-
-END
-$$;
-
-CREATE OR REPLACE FUNCTION add_constraints_to_refunds_partition(
-  IN partition_suffix VARCHAR
-)
-RETURNS void
-LANGUAGE plpgsql
-AS $$
-BEGIN
-  EXECUTE FORMAT (
-    'ALTER TABLE refunds_' || partition_suffix || ' '
-      'ADD CONSTRAINT refunds_' || partition_suffix || '_refund_serial_id_key '
-        'UNIQUE (refund_serial_id) '
-      ',ADD PRIMARY KEY (deposit_serial_id, rtransaction_id) '
-  );
-END
-$$;
-
 ---------------------------- wire_out -------------------------------
 
 CREATE OR REPLACE FUNCTION create_table_wire_out(
@@ -2028,30 +1971,6 @@ $$;
 ------------------------- Partitions ------------------------------
 -------------------------------------------------------------------
 
-CREATE OR REPLACE FUNCTION create_hash_partition(
-    source_table_name VARCHAR
-    ,modulus INTEGER
-    ,partition_num INTEGER
-  )
-  RETURNS VOID
-  LANGUAGE plpgsql
-AS $$
-BEGIN
-
-  RAISE NOTICE 'Creating partition %_%', source_table_name, partition_num;
-
-  EXECUTE FORMAT(
-    'CREATE TABLE IF NOT EXISTS %I '
-      'PARTITION OF %I '
-      'FOR VALUES WITH (MODULUS %s, REMAINDER %s)'
-    ,source_table_name || '_' || partition_num
-    ,source_table_name
-    ,modulus
-    ,partition_num-1
-  );
-
-END
-$$;
 
 CREATE OR REPLACE FUNCTION create_range_partition(
   source_table_name VARCHAR
diff --git a/src/exchangedb/common-0002.sql b/src/exchangedb/common-0002.sql
index 0f7b1f52..388d5547 100644
--- a/src/exchangedb/common-0002.sql
+++ b/src/exchangedb/common-0002.sql
@@ -14,192 +14,174 @@
 -- TALER; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
 --
 
+--------------------------------
+
+CREATE TABLE IF NOT EXISTS exchange_tables
+  (table_serial_id BIGINT GENERATED BY DEFAULT AS IDENTITY
+  ,name VARCHAR NOT NULL
+  ,version VARCHAR NOT NULL
+  ,action VARCHAR NOT NULL
+  ,partitioned BOOL NOT NULL
+  ,by_range BOOL NOT NULL);
+COMMENT ON TABLE exchange_tables
+  IS 'Tables of the exchange and their status';
+COMMENT ON COLUMN exchange_tables.name
+  IS 'Base name of the table (without partition/shard)';
+COMMENT ON COLUMN exchange_tables.version
+  IS 'Version of the DB in which the given action happened';
+COMMENT ON COLUMN exchange_tables.action
+  IS 'Action to take on the table (e.g. create, alter, constrain, unconstrain, 
or drop)';
+COMMENT ON COLUMN exchange_tables.partitioned
+  IS 'TRUE if the table is partitioned';
+COMMENT ON COLUMN exchange_tables.by_range
+  IS 'TRUE if the table is partitioned by range';
+
+
+INSERT INTO exchange_tables
+    (name
+    ,version
+    ,action
+    ,partitioned
+    ,by_range)
+  VALUES
+    ('denominations', 'exchange-0001', 'create', FALSE, FALSE)
+   ,('denomination_revocations', 'exchange-0001', 'create', FALSE, FALSE)
+   ,('kyc_alerts', 'exchange-0001', 'create', FALSE, FALSE)
+   ,('profit_drains', 'exchange-0001', 'create', FALSE, FALSE)
+   ,('auditors', 'exchange-0001', 'create', FALSE, FALSE)
+   ,('auditor_denom_sigs', 'exchange-0001', 'create', FALSE, FALSE)
+   ,('exchange_sign_keys', 'exchange-0001', 'create', FALSE, FALSE)
+   ,('signkey_revocations', 'exchange-0001', 'create', FALSE, FALSE)
+   ,('extensions', 'exchange-0001', 'create', FALSE, FALSE)
+   ,('wire_fee', 'exchange-0001', 'create', FALSE, FALSE)
+   ,('global_fee', 'exchange-0001', 'create', FALSE, FALSE)
+   ,('wire_accounts', 'exchange-0001', 'create', FALSE, FALSE)
+   ,('work_shards', 'exchange-0001', 'create', FALSE, FALSE)
+   ,('revolving_work_shards', 'exchange-0001', 'create', FALSE, FALSE)
+   ,('partners', 'exchange-0001', 'create', FALSE, FALSE)
+   ,('partner_accounts', 'exchange-0001', 'create', FALSE, FALSE)
+   ,('purse_actions', 'exchange-0001', 'create', FALSE, FALSE)
+   ,('policy_fulfillments', 'exchange-0001', 'create', FALSE, FALSE) -- bad!
+   ,('policy_details', 'exchange-0001', 'create', FALSE, FALSE) -- bad!
+   ,('wire_targets''exchange-0001', 'create', TRUE, FALSE)
+   ,('legitimization_processes', 'exchange-0001', 'create', TRUE, FALSE)
+   ,('legitimization_requirements', 'exchange-0001', 'create', TRUE, FALSE)
+   ,('reserves', 'exchange-0001', 'create', TRUE, FALSE)
+   ,('reserves_in', 'exchange-0001', 'create', TRUE, FALSE)
+   ,('reserves_close', 'exchange-0001', 'create', TRUE, FALSE)
+   ,('reserves_open_requests', 'exchange-0001', 'create', TRUE, FALSE)
+   ,('reserves_open_deposits', 'exchange-0001', 'create', TRUE, FALSE)
+   ,('reserves_out', 'exchange-0001', 'create', TRUE, FALSE)
+   ,('reserves_out_by_reserve', 'exchange-0001', 'create', TRUE, FALSE)
+   ,('known_coins', 'exchange-0001', 'create', TRUE, FALSE)
+   ,('refresh_commitments', 'exchange-0001', 'create', TRUE, FALSE)
+   ,('refresh_revealed_coins', 'exchange-0001', 'create', TRUE, FALSE)
+   ,('refresh_transfer_keys', 'exchange-0001', 'create', TRUE, FALSE)
+   ,('refunds', 'exchange-0001', 'create', TRUE, FALSE)
+   ,('deposits', 'exchange-0001', 'create', TRUE, FALSE)
+   ,('deposits_by_ready', 'exchange-0001', 'create', TRUE, TRUE)
+   ,('deposits_for_matching', 'exchange-0001', 'create', TRUE, TRUE)
+   ,('wire_out', 'exchange-0001', 'create', TRUE, FALSE)
+   ,('aggregation_transient', 'exchange-0001', 'create', TRUE, FALSE)
+   ,('aggregation_tracking', 'exchange-0001', 'create', TRUE, FALSE)
+   ,('recoup', 'exchange-0001', 'create', TRUE, FALSE)
+   ,('recoup_by_reserve', 'exchange-0001', 'create', TRUE, FALSE)
+   ,('recoup_refresh', 'exchange-0001', 'create', TRUE, FALSE)
+   ,('prewire', 'exchange-0001', 'create', TRUE, FALSE)
+   ,('cs_nonce_locks', 'exchange-0001', 'create', TRUE, FALSE)
+   ,('purse_requests', 'exchange-0001', 'create', TRUE, FALSE)
+   ,('purse_decision', 'exchange-0001', 'create', TRUE, FALSE)
+   ,('purse_merges', 'exchange-0001', 'create', TRUE, FALSE)
+   ,('account_merges', 'exchange-0001', 'create', TRUE, FALSE)
+   ,('contracts', 'exchange-0001', 'create', TRUE, FALSE)
+   ,('history_requests', 'exchange-0001', 'create', TRUE, FALSE)
+   ,('close_requests', 'exchange-0001', 'create', TRUE, FALSE)
+   ,('purse_deposists', 'exchange-0001', 'create', TRUE, FALSE)
+   ,('wads_out', 'exchange-0001', 'create', TRUE, FALSE)
+   ,('wads_out_entries', 'exchange-0001', 'create', TRUE, FALSE)
+   ,('wads_in', 'exchange-0001', 'create', TRUE, FALSE)
+   ,('wads_in_entries', 'exchange-0001', 'create', TRUE, FALSE)
+ ON CONFLICT DO NOTHING;
+
+
+
 -------------------- Tables ----------------------------
 
-CREATE OR REPLACE FUNCTION create_table_wire_targets(
+CREATE OR REPLACE FUNCTION create_table_purse_deletion(
   IN shard_suffix VARCHAR DEFAULT NULL
 )
 RETURNS VOID
 LANGUAGE plpgsql
 AS $$
 BEGIN
-
   PERFORM create_partitioned_table(
     'CREATE TABLE IF NOT EXISTS %I'
-      '(wire_target_serial_id BIGINT GENERATED BY DEFAULT AS IDENTITY' -- 
UNIQUE'
-      ',wire_target_h_payto BYTEA PRIMARY KEY CHECK 
(LENGTH(wire_target_h_payto)=32)'
-      ',payto_uri VARCHAR NOT NULL'
+      '(purse_deletion_serial_id BIGINT GENERATED BY DEFAULT AS IDENTITY' -- 
UNIQUE'
+      ',purse_sig BYTEA CHECK (LENGTH(purse_sig)=64)'
+      ',XXX VARCHAR NOT NULL'
     ') %s ;'
-    ,'wire_targets'
-    ,'PARTITION BY HASH (wire_target_h_payto)'
+    ,'purse_deletion'
+    ,'PARTITION BY HASH (XXX)'
     ,shard_suffix
   );
-
+  COMMENT ON TABLE purse_deletion
+    IS 'signatures affirming explicit purse deletions';
+  COMMENT ON COLUMN purse_deletion.purse_sig
+    IS 'signature of type XXX';
 END
 $$;
+COMMENT ON FUNCTION create_table_purse_deletion
+  IS 'Creates the purse_deletion table';
 
--- We need a separate function for this, as we call create_table only once but 
need to add
--- those constraints to each partition which gets created
-CREATE OR REPLACE FUNCTION add_constraints_to_wire_targets_partition(
+CREATE OR REPLACE FUNCTION constrain_table_purse_deletion(
   IN partition_suffix VARCHAR
 )
 RETURNS void
 LANGUAGE plpgsql
 AS $$
 BEGIN
-
   EXECUTE FORMAT (
-    'ALTER TABLE wire_targets_' || partition_suffix || ' '
-      'ADD CONSTRAINT wire_targets_' || partition_suffix || 
'_wire_target_serial_id_key '
-        'UNIQUE (wire_target_serial_id)'
+    'ALTER TABLE purse_deletion_' || partition_suffix || ' '
+      'ADD CONSTRAINT purse_deletion_' || partition_suffix || '_XXX '
+        'UNIQUE (XXX)'
   );
 END
 $$;
 
-
-CREATE OR REPLACE FUNCTION detach_default_partitions2()
-  RETURNS VOID
-  LANGUAGE plpgsql
-AS $$
-BEGIN
-
-  RAISE NOTICE 'Detaching all default table partitions';
-
-  ALTER TABLE IF EXISTS wire_targets
-    DETACH PARTITION wire_targets_default;
-
-END
-$$;
-
-COMMENT ON FUNCTION detach_default_partitions2
-  IS 'We need to drop default and create new one before deleting the default 
partitions
-      otherwise constraints get lost too. Might be needed in sharding too';
-
-
-CREATE OR REPLACE FUNCTION drop_default_partitions2()
-  RETURNS VOID
-  LANGUAGE plpgsql
-AS $$
-BEGIN
-
-  RAISE NOTICE 'Dropping default table partitions';
-
-  DROP TABLE IF EXISTS wire_targets_default;
-END
-$$;
-
-COMMENT ON FUNCTION drop_default_partitions2
-  IS 'Drop all default partitions once other partitions are attached.
-      Might be needed in sharding too.';
-
-
-CREATE OR REPLACE FUNCTION create_partitions2(
-    num_partitions INTEGER
-)
-RETURNS VOID
-LANGUAGE plpgsql
-AS $$
-DECLARE
-  modulus INTEGER;
-BEGIN
-
-  modulus := num_partitions;
-
-  PERFORM detach_default_partitions2();
-
-  LOOP
-
-    PERFORM create_hash_partition(
-      'wire_targets'
-      ,modulus
-      ,num_partitions
-    );
-    PERFORM add_constraints_to_wire_targets_partition(num_partitions::varchar);
-
-  END LOOP;
-
-  PERFORM drop_default_partitions2();
-
-END
-$$;
-
-
-CREATE OR REPLACE FUNCTION prepare_sharding2()
-RETURNS VOID
-LANGUAGE plpgsql
-AS $$
-BEGIN
-
-  PERFORM detach_default_partitions2();
-
-  ALTER TABLE IF EXISTS wire_targets
-    DROP CONSTRAINT IF EXISTS wire_targets_pkey CASCADE
-  ;
-
-END
-$$;
-
-
-CREATE OR REPLACE FUNCTION create_shard_server2(
-    shard_suffix VARCHAR
-    ,total_num_shards INTEGER
-    ,current_shard_num INTEGER
-    ,remote_host VARCHAR
-    ,remote_user VARCHAR
-    ,remote_user_password VARCHAR
-    ,remote_db_name VARCHAR DEFAULT 'taler-exchange'
-    ,remote_port INTEGER DEFAULT '5432'
-    ,local_user VARCHAR DEFAULT 'taler-exchange-httpd'
+CREATE OR REPLACE FUNCTION alter_create_was_deleted_table_purse_requests (
+  IN partition_suffix VARCHAR
 )
-RETURNS VOID
+RETURNS void
 LANGUAGE plpgsql
 AS $$
 BEGIN
-
-  RAISE NOTICE 'Creating server %', remote_host;
-
-  PERFORM create_foreign_hash_partition(
-    'wire_targets'
-    ,total_num_shards
-    ,shard_suffix
-    ,current_shard_num
-    ,local_user
+  EXECUTE FORMAT (
+    'ALTER TABLE purse_requests_' || partition_suffix ||
+    ' ADD COLUMN'
+    ' was_deleted BOOLEAN NOT NULL DEFAULT(FALSE)'
   );
 END
 $$;
 
-COMMENT ON FUNCTION create_shard_server2
-  IS 'Create a shard server on the master
-      node with all foreign tables and user mappings';
-
-
-
---------------------------------
-
-CREATE TABLE IF NOT EXISTS partitioned_tables
-  (name VARCHAR PRIMARY KEY NOT NULL);
-
-INSERT INTO partitioned_tables
-    (name)
+INSERT INTO exchange_tables
+    (name
+    ,version
+    ,action
+    ,partitioned
+    ,by_range)
   VALUES
-    ('wire_targets')
-   ,('refunds')
-  ON CONFLICT DO NOTHING;
-
-
-CREATE OR REPLACE FUNCTION drop_default_partitions()
-  RETURNS VOID
-  LANGUAGE plpgsql
-AS $$
-DECLARE
-  tc CURSOR FOR SELECT name FROM partitioned_tables;
-BEGIN
-
-  RAISE NOTICE 'Dropping default table partitions';
-  FOR rec IN tc
-  LOOP
-    EXECUTE FORMAT (
-      'DROP TABLE IF EXISTS %s_default ;'::text,
-    rec.name;
-END  
-$$;
+    ('purse_deletion'
+    ,'exchange-0002'
+    ,'create'
+    ,TRUE
+    ,FALSE),
+    ('purse_deletion'
+    ,'exchange-0002'
+    ,'constrain'
+    ,TRUE
+    ,FALSE),
+    ('purse_requests'
+    ,'exchange-0002'
+    ,'alter_create_was_deleted'
+    ,TRUE
+    ,FALSE);
diff --git a/src/exchangedb/exchange-0001-part.sql 
b/src/exchangedb/exchange-0001-part.sql
index 72b08410..59e684e1 100644
--- a/src/exchangedb/exchange-0001-part.sql
+++ b/src/exchangedb/exchange-0001-part.sql
@@ -16,40 +16,6 @@
 
 -- ------------------------------ denominations 
----------------------------------------
 
-CREATE TABLE IF NOT EXISTS denominations
-  (denominations_serial BIGINT GENERATED BY DEFAULT AS IDENTITY UNIQUE
-  ,denom_pub_hash BYTEA PRIMARY KEY CHECK (LENGTH(denom_pub_hash)=64)
-  ,denom_type INT4 NOT NULL DEFAULT (1) -- 1 == RSA (for now, remove default 
later!)
-  ,age_mask INT4 NOT NULL DEFAULT (0)
-  ,denom_pub BYTEA NOT NULL
-  ,master_sig BYTEA NOT NULL CHECK (LENGTH(master_sig)=64)
-  ,valid_from INT8 NOT NULL
-  ,expire_withdraw INT8 NOT NULL
-  ,expire_deposit INT8 NOT NULL
-  ,expire_legal INT8 NOT NULL
-  ,coin_val INT8 NOT NULL
-  ,coin_frac INT4 NOT NULL
-  ,fee_withdraw_val INT8 NOT NULL
-  ,fee_withdraw_frac INT4 NOT NULL
-  ,fee_deposit_val INT8 NOT NULL
-  ,fee_deposit_frac INT4 NOT NULL
-  ,fee_refresh_val INT8 NOT NULL
-  ,fee_refresh_frac INT4 NOT NULL
-  ,fee_refund_val INT8 NOT NULL
-  ,fee_refund_frac INT4 NOT NULL
-  );
-COMMENT ON TABLE denominations
-  IS 'Main denominations table. All the valid denominations the exchange knows 
about.';
-COMMENT ON COLUMN denominations.denom_type
-  IS 'determines cipher type for blind signatures used with this denomination; 
0 is for RSA';
-COMMENT ON COLUMN denominations.age_mask
-  IS 'bitmask with the age restrictions that are being used for this 
denomination; 0 if denomination does not support the use of age restrictions';
-COMMENT ON COLUMN denominations.denominations_serial
-  IS 'needed for exchange-auditor replication logic';
-
-CREATE INDEX IF NOT EXISTS denominations_by_expire_legal_index
-  ON denominations
-  (expire_legal);
 
 
 -- ------------------------------ denomination_revocations 
----------------------------------------
diff --git a/src/exchangedb/exchange-0002-part.sql 
b/src/exchangedb/exchange-0002-part.sql
index 1697a375..2381d8b2 100644
--- a/src/exchangedb/exchange-0002-part.sql
+++ b/src/exchangedb/exchange-0002-part.sql
@@ -31,3 +31,6 @@ CREATE TABLE IF NOT EXISTS wire_targets_default
 
 SELECT add_constraints_to_wire_targets_partition('default');
 
+
+
+SELECT create_tables('exchange-0002');
diff --git a/src/exchangedb/exchange-0002.sql.in 
b/src/exchangedb/exchange-0002.sql.in
index b25555ce..a09ea58f 100644
--- a/src/exchangedb/exchange-0002.sql.in
+++ b/src/exchangedb/exchange-0002.sql.in
@@ -24,7 +24,6 @@ SELECT _v.register_patch('exchange-0002', NULL, NULL);
 
 SET search_path TO exchange;
 
-#include "common-0002.sql"
-#include "exchange-0002-part.sql"
+#include "0002-denominations.sql"
 
 COMMIT;
diff --git a/src/exchangedb/pg_complete_shard.c 
b/src/exchangedb/pg_complete_shard.c
index 5efea7c0..8e62809c 100644
--- a/src/exchangedb/pg_complete_shard.c
+++ b/src/exchangedb/pg_complete_shard.c
@@ -27,12 +27,11 @@
 
 enum GNUNET_DB_QueryStatus
 TEH_PG_complete_shard (void *cls,
-                         const char *job_name,
-                         uint64_t start_row,
-                         uint64_t end_row)
+                       const char *job_name,
+                       uint64_t start_row,
+                       uint64_t end_row)
 {
   struct PostgresClosure *pg = cls;
-
   struct GNUNET_PQ_QueryParam params[] = {
     GNUNET_PQ_query_param_string (job_name),
     GNUNET_PQ_query_param_uint64 (&start_row),
@@ -44,8 +43,6 @@ TEH_PG_complete_shard (void *cls,
               "Completing shard %llu-%llu\n",
               (unsigned long long) start_row,
               (unsigned long long) end_row);
-
-
   PREPARE (pg,
            "complete_shard",
            "UPDATE work_shards"
diff --git a/src/exchangedb/pg_create_shard_tables.c 
b/src/exchangedb/pg_create_shard_tables.c
deleted file mode 100644
index 4fb6940f..00000000
--- a/src/exchangedb/pg_create_shard_tables.c
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
-   This file is part of TALER
-   Copyright (C) 2022 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/>
- */
-/**
- * @file exchangedb/pg_create_shard_tables.c
- * @brief Implementation of the create_shard_tables function for Postgres
- * @author Christian Grothoff
- */
-#include "platform.h"
-#include "taler_error_codes.h"
-#include "taler_dbevents.h"
-#include "taler_pq_lib.h"
-#include "pg_create_shard_tables.h"
-#include "pg_helper.h"
-
-
-enum GNUNET_GenericReturnValue
-TEH_PG_create_shard_tables (void *cls,
-                              uint32_t idx)
-{
-  struct PostgresClosure *pg = cls;
-  struct GNUNET_PQ_Context *conn;
-  enum GNUNET_GenericReturnValue ret = GNUNET_OK;
-  struct GNUNET_PQ_QueryParam params[] = {
-    GNUNET_PQ_query_param_uint32 (&idx),
-    GNUNET_PQ_query_param_end
-  };
-  struct GNUNET_PQ_ExecuteStatement es[] = {
-    GNUNET_PQ_make_try_execute ("SET search_path TO exchange;"),
-    GNUNET_PQ_EXECUTE_STATEMENT_END
-  };
-
-  struct GNUNET_PQ_PreparedStatement ps[] = {
-    GNUNET_PQ_make_prepare ("create_shard_tables",
-                            "SELECT"
-                            " setup_shard"
-                            " ($1);"),
-    GNUNET_PQ_PREPARED_STATEMENT_END
-  };
-
-  conn = GNUNET_PQ_connect_with_cfg (pg->cfg,
-                                     "exchangedb-postgres",
-                                     "shard-",
-                                     es,
-                                     ps);
-  if (NULL == conn)
-    return GNUNET_SYSERR;
-  if (0 > GNUNET_PQ_eval_prepared_non_select (conn,
-                                              "create_shard_tables",
-                                              params))
-    ret = GNUNET_SYSERR;
-  GNUNET_PQ_disconnect (conn);
-  return ret;
-}
diff --git a/src/exchangedb/pg_create_shard_tables.h 
b/src/exchangedb/pg_create_shard_tables.h
deleted file mode 100644
index 31ab49a4..00000000
--- a/src/exchangedb/pg_create_shard_tables.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
-   This file is part of TALER
-   Copyright (C) 2022 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/>
- */
-/**
- * @file exchangedb/pg_create_shard_tables.h
- * @brief implementation of the create_shard_tables function for Postgres
- * @author Christian Grothoff
- */
-#ifndef PG_CREATE_SHARD_TABLES_H
-#define PG_CREATE_SHARD_TABLES_H
-
-#include "taler_util.h"
-#include "taler_json_lib.h"
-#include "taler_exchangedb_plugin.h"
-
-/**
- * Create tables of a shard node with index idx
- *
- * @param cls the `struct PostgresClosure` with the plugin-specific state
- * @param idx the shards index, will be appended as suffix to all tables
- * @return #GNUNET_OK upon success; #GNUNET_SYSERR upon failure
- */
-enum GNUNET_GenericReturnValue
-TEH_PG_create_shard_tables (void *cls,
-                            uint32_t idx);
-
-#endif
diff --git a/src/exchangedb/pg_setup_foreign_servers.c 
b/src/exchangedb/pg_setup_foreign_servers.c
deleted file mode 100644
index 490ae4c2..00000000
--- a/src/exchangedb/pg_setup_foreign_servers.c
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
-   This file is part of TALER
-   Copyright (C) 2022 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/>
- */
-/**
- * @file exchangedb/pg_setup_foreign_servers.c
- * @brief Implementation of the setup_foreign_servers function for Postgres
- * @author Christian Grothoff
- */
-#include "platform.h"
-#include "taler_error_codes.h"
-#include "taler_dbevents.h"
-#include "taler_pq_lib.h"
-#include "pg_setup_foreign_servers.h"
-#include "pg_helper.h"
-
-
-
-enum GNUNET_GenericReturnValue
-TEH_PG_setup_foreign_servers (void *cls,
-                                uint32_t num)
-{
-  struct PostgresClosure *pg = cls;
-  struct GNUNET_PQ_Context *conn;
-  enum GNUNET_GenericReturnValue ret = GNUNET_OK;
-  char *shard_domain = NULL;
-  char *remote_user = NULL;
-  char *remote_user_pw = NULL;
-
-  if (GNUNET_OK !=
-      GNUNET_CONFIGURATION_get_value_string (pg->cfg,
-                                             "exchange",
-                                             "SHARD_DOMAIN",
-                                             &shard_domain))
-  {
-    GNUNET_log_config_missing (GNUNET_ERROR_TYPE_ERROR,
-                               "exchange",
-                               "SHARD_DOMAIN");
-    return GNUNET_SYSERR;
-  }
-  if (GNUNET_OK !=
-      GNUNET_CONFIGURATION_get_value_string (pg->cfg,
-                                             "exchangedb-postgres",
-                                             "SHARD_REMOTE_USER",
-                                             &remote_user))
-  {
-    GNUNET_log_config_missing (GNUNET_ERROR_TYPE_ERROR,
-                               "exchangedb-postgres",
-                               "SHARD_REMOTE_USER");
-    GNUNET_free (shard_domain);
-    return GNUNET_SYSERR;
-  }
-  if (GNUNET_OK !=
-      GNUNET_CONFIGURATION_get_value_string (pg->cfg,
-                                             "exchangedb-postgres",
-                                             "SHARD_REMOTE_USER_PW",
-                                             &remote_user_pw))
-  {
-    GNUNET_log_config_missing (GNUNET_ERROR_TYPE_ERROR,
-                               "exchangedb-postgres",
-                               "SHARD_REMOTE_USER_PW");
-    GNUNET_free (shard_domain);
-    GNUNET_free (remote_user);
-    return GNUNET_SYSERR;
-  }
-
-  struct GNUNET_PQ_QueryParam params[] = {
-    GNUNET_PQ_query_param_uint32 (&num),
-    GNUNET_PQ_query_param_string (shard_domain),
-    GNUNET_PQ_query_param_string (remote_user),
-    GNUNET_PQ_query_param_string (remote_user_pw),
-    GNUNET_PQ_query_param_end
-  };
-  struct GNUNET_PQ_ExecuteStatement es[] = {
-    GNUNET_PQ_make_try_execute ("SET search_path TO exchange;"),
-    GNUNET_PQ_EXECUTE_STATEMENT_END
-  };
-  struct GNUNET_PQ_PreparedStatement ps[] = {
-    GNUNET_PQ_make_prepare ("create_foreign_servers",
-                            "SELECT"
-                            " create_foreign_servers"
-                            " ($1, $2, $3, $4);"),
-    GNUNET_PQ_PREPARED_STATEMENT_END
-  };
-
-  conn = GNUNET_PQ_connect_with_cfg (pg->cfg,
-                                     "exchangedb-postgres",
-                                     NULL,
-                                     es,
-                                     ps);
-  if (NULL == conn)
-  {
-    ret = GNUNET_SYSERR;
-  }
-  else if (0 > GNUNET_PQ_eval_prepared_non_select (conn,
-                                                   "create_foreign_servers",
-                                                   params))
-  {
-    ret = GNUNET_SYSERR;
-  }
-  GNUNET_free (shard_domain);
-  GNUNET_free (remote_user);
-  GNUNET_free (remote_user_pw);
-  GNUNET_PQ_disconnect (conn);
-  return ret;
-}
-
diff --git a/src/exchangedb/pg_setup_foreign_servers.h 
b/src/exchangedb/pg_setup_foreign_servers.h
deleted file mode 100644
index 65ba0343..00000000
--- a/src/exchangedb/pg_setup_foreign_servers.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
-   This file is part of TALER
-   Copyright (C) 2022 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/>
- */
-/**
- * @file exchangedb/pg_setup_foreign_servers.h
- * @brief implementation of the setup_foreign_servers function for Postgres
- * @author Christian Grothoff
- */
-#ifndef PG_SETUP_FOREIGN_SERVERS_H
-#define PG_SETUP_FOREIGN_SERVERS_H
-
-#include "taler_util.h"
-#include "taler_json_lib.h"
-#include "taler_exchangedb_plugin.h"
-
-
-/**
- * Setup foreign servers (shards) for already existing tables
- *
- * @param cls the `struct PostgresClosure` with the plugin-specific state
- * @param num the number of foreign servers (shards) to create for each 
partitioned table
- * @return #GNUNET_OK upon success; #GNUNET_SYSERR upon failure
- */
-enum GNUNET_GenericReturnValue
-TEH_PG_setup_foreign_servers (void *cls,
-                              uint32_t num);
-#endif
diff --git a/src/exchangedb/plugin_exchangedb_postgres.c 
b/src/exchangedb/plugin_exchangedb_postgres.c
index 5b59d4b0..2f8b9b57 100644
--- a/src/exchangedb/plugin_exchangedb_postgres.c
+++ b/src/exchangedb/plugin_exchangedb_postgres.c
@@ -65,10 +65,8 @@
 #include "pg_iterate_active_signkeys.h"
 #include "pg_preflight.h"
 #include "pg_commit.h"
-#include "pg_create_shard_tables.h"
 #include "pg_insert_aggregation_tracking.h"
 #include "pg_drop_tables.h"
-#include "pg_setup_partitions.h"
 #include "pg_select_satisfied_kyc_processes.h"
 #include "pg_select_aggregation_amounts_for_kyc_check.h"
 #include "pg_kyc_provider_account_lookup.h"
@@ -123,6 +121,7 @@
 #include "pg_get_policy_details.h"
 #include "pg_persist_policy_details.h"
 #include "pg_do_deposit.h"
+#include "pg_setup_partitions.h"
 #include "pg_add_policy_fulfillment_proof.h"
 #include "pg_do_melt.h"
 #include "pg_do_refund.h"
@@ -384,9 +383,6 @@ TEH_PG_internal_setup (struct PostgresClosure *pg,
 }
 
 
-
-
-
 /**
  * Closure for #get_refunds_cb().
  */
@@ -456,9 +452,6 @@ get_refunds_cb (void *cls,
 }
 
 
-
-
-
 /* Get the details of a policy, referenced by its hash code
  *
  * @param cls the `struct PostgresClosure` with the plugin-specific state
@@ -1627,8 +1620,9 @@ postgres_ensure_coin_known (void *cls,
   return TALER_EXCHANGEDB_CKS_PRESENT;
 }
 
+
 enum GNUNET_DB_QueryStatus
-setup_wire_target(
+setup_wire_target (
   struct PostgresClosure *pg,
   const char *payto_uri,
   struct TALER_PaytoHashP *h_payto)
@@ -1654,6 +1648,8 @@ setup_wire_target(
                                              "insert_kyc_status",
                                              iparams);
 }
+
+
 /**
  * Insert information about deposited coin into the database.
  *
@@ -2866,7 +2862,7 @@ postgres_insert_reserve_closed (
   reserve.pub = *reserve_pub;
   if (GNUNET_DB_STATUS_SUCCESS_ONE_RESULT !=
       (qs = TEH_PG_reserves_get (cls,
-                                   &reserve)))
+                                 &reserve)))
   {
     /* Existence should have been checked before we got here... */
     GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qs);
@@ -2893,7 +2889,7 @@ postgres_insert_reserve_closed (
     GNUNET_break (TALER_AAR_RESULT_ZERO == ret);
   }
   return TEH_PG_reserves_update (cls,
-                          &reserve);
+                                 &reserve);
 }
 
 
@@ -5168,12 +5164,8 @@ libtaler_plugin_exchangedb_postgres_init (void *cls)
     = &TEH_PG_commit;
   plugin->preflight
     = &TEH_PG_preflight;
-  plugin->create_shard_tables
-    = &TEH_PG_create_shard_tables;
   plugin->insert_aggregation_tracking
     = &TEH_PG_insert_aggregation_tracking;
-  plugin->setup_partitions
-    = &TEH_PG_setup_partitions;
   plugin->select_aggregation_amounts_for_kyc_check
     = &TEH_PG_select_aggregation_amounts_for_kyc_check;
 
@@ -5245,11 +5237,8 @@ libtaler_plugin_exchangedb_postgres_init (void *cls)
     = &TEH_PG_start;
   plugin->rollback
     = &TEH_PG_rollback;
-
- plugin->create_tables
+  plugin->create_tables
     = &TEH_PG_create_tables;
-  plugin->setup_foreign_servers
-    = &TEH_PG_setup_foreign_servers;
   plugin->event_listen
     = &TEH_PG_event_listen;
   plugin->event_listen_cancel
@@ -5446,7 +5435,8 @@ libtaler_plugin_exchangedb_postgres_init (void *cls)
     = &TEH_PG_select_purse_by_merge_pub;
   plugin->set_purse_balance
     = &TEH_PG_set_purse_balance;
-
+  plugin->setup_partitions
+    = &TEH_PG_setup_partitions;
   plugin->batch_reserves_in_insert
     = &TEH_PG_batch_reserves_in_insert;
 
diff --git a/src/exchangedb/procedures.sql b/src/exchangedb/procedures.sql
index ff282735..9783d2b1 100644
--- a/src/exchangedb/procedures.sql
+++ b/src/exchangedb/procedures.sql
@@ -23,6 +23,7 @@ SET search_path TO exchange;
 --                      Stored procedures
 ---------------------------------------------------------------------------
 
+
 CREATE OR REPLACE FUNCTION exchange_do_withdraw(
   IN cs_nonce BYTEA,
   IN amount_val INT8,
diff --git a/src/exchangedb/shard-0002-part.sql 
b/src/exchangedb/shard-0002-part.sql
index 439d672a..723154f1 100644
--- a/src/exchangedb/shard-0002-part.sql
+++ b/src/exchangedb/shard-0002-part.sql
@@ -13,19 +13,3 @@
 -- 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/>
 --
-
-CREATE OR REPLACE FUNCTION setup_shard2(
-  shard_idx INTEGER
-)
-RETURNS VOID
-LANGUAGE plpgsql
-AS $$
-DECLARE
-  shard_suffix VARCHAR;
-BEGIN
-
-  shard_suffix = shard_idx::varchar;
-
-  PERFORM create_table_wire_targets(shard_suffix);
-END
-$$;

-- 
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]