gnunet-svn
[Top][All Lists]
Advanced

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

[taler-exchange] branch master updated (6f027fc1 -> 393cea46)


From: gnunet
Subject: [taler-exchange] branch master updated (6f027fc1 -> 393cea46)
Date: Sat, 02 Apr 2022 19:07:17 +0200

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

marco-boss pushed a change to branch master
in repository exchange.

    from 6f027fc1 add additinal signature
     new ae75ff2c extend sharding logic that shard nodes can be initialied and 
dropped
     new 7ba13536 fix name
     new 393cea46 implement shard node setup and drop

The 3 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 src/exchange-tools/taler-exchange-dbinit.c         |  31 +++-
 src/exchangedb/.gitignore                          |   2 +
 src/exchangedb/Makefile.am                         |  19 +-
 src/exchangedb/common-0001.sql                     | 206 ++++++++-------------
 src/exchangedb/drop-common.sql                     |  76 ++++++++
 .../{drop0001.sql => drop0001-exchange-part.sql}   |  59 +-----
 src/exchangedb/drop0001-shard-part.sql             |  27 +++
 src/exchangedb/exchange-0001-part.sql              |   3 +
 src/exchangedb/plugin_exchangedb_postgres.c        |  58 ++++++
 src/exchangedb/shard-0001-part.sql                 | 199 ++++++++++++++++++++
 src/include/taler_exchangedb_plugin.h              |  10 +
 11 files changed, 501 insertions(+), 189 deletions(-)
 create mode 100644 src/exchangedb/drop-common.sql
 rename src/exchangedb/{drop0001.sql => drop0001-exchange-part.sql} (60%)
 create mode 100644 src/exchangedb/drop0001-shard-part.sql
 create mode 100644 src/exchangedb/shard-0001-part.sql

diff --git a/src/exchange-tools/taler-exchange-dbinit.c 
b/src/exchange-tools/taler-exchange-dbinit.c
index 34b68f8f..c2d8964d 100644
--- a/src/exchange-tools/taler-exchange-dbinit.c
+++ b/src/exchange-tools/taler-exchange-dbinit.c
@@ -59,6 +59,11 @@ static uint32_t num_foreign_servers;
  */
 static uint32_t shard_idx;
 
+/**
+ * -R option: do full shard DB reset
+ */
+static uint32_t reset_shard_db;
+
 /**
  * Main function that will be run.
  *
@@ -94,10 +99,25 @@ 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 (1 <
+  if (0 <
+      reset_shard_db)
+  {
+    if (GNUNET_OK != plugin->drop_shard_tables (plugin->cls, reset_shard_db))
+    {
+      GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+                  "Could not drop shard tables as requested. Either database 
was not yet initialized or permission denied. Consult the logs.\n");
+      global_ret = EXIT_FAILURE;
+      return;
+    }
+    GNUNET_log (GNUNET_ERROR_TYPE_MESSAGE,
+                "Dropped shard database, please call taler-exchange-dbinit -S 
<N> to initialize a new shard database\n");
+    return;
+  }
+  if (0 <
       shard_idx)
   {
-    if (GNUNET_OK != plugin->create_shard_tables (plugin->cls, 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");
@@ -226,13 +246,18 @@ main (int argc,
     GNUNET_GETOPT_option_uint ('F',
                                "foreign",
                                "NUMBER",
-                               "Setup a sharded database whit N foreign 
servers (shards) / tables",
+                               "Setup a sharded database whit N foreign 
servers (shards) / tables, must be called as DB superuser",
                                &num_foreign_servers),
     GNUNET_GETOPT_option_uint ('S',
                                "shard",
                                "INDEX",
                                "Setup a shard server, creates tables with 
INDEX as suffix",
                                &shard_idx),
+    GNUNET_GETOPT_option_uint ('R',
+                               "reset-shard",
+                               "OLD_SHARD_IDX",
+                               "reset a shard database, does not reinitialize 
i.e. call taler-exchange-dbinit -S afterwards (DANGEROUS: all existsing data is 
lost!)",
+                               &reset_shard_db),
     GNUNET_GETOPT_OPTION_END
   };
   enum GNUNET_GenericReturnValue ret;
diff --git a/src/exchangedb/.gitignore b/src/exchangedb/.gitignore
index c9ed5547..881bbe53 100644
--- a/src/exchangedb/.gitignore
+++ b/src/exchangedb/.gitignore
@@ -8,3 +8,5 @@ bench-db-postgres
 exchange-0001.sql
 shard-0000.sql
 shard-0001.sql
+drop0001.sql
+shard-drop0001.sql
\ No newline at end of file
diff --git a/src/exchangedb/Makefile.am b/src/exchangedb/Makefile.am
index f525f341..0470887d 100644
--- a/src/exchangedb/Makefile.am
+++ b/src/exchangedb/Makefile.am
@@ -21,27 +21,38 @@ sql_DATA = \
   exchange-0001.sql \
   shard-0000.sql \
   shard-0001.sql \
+  shard-drop0001.sql \
   drop0001.sql
 
 BUILT_SOURCES = \
   shard-0000.sql \
   shard-0001.sql \
-  exchange-0001.sql
+  exchange-0001.sql \
+  drop0001.sql \
+  shard-drop0001.sql
 
 CLEANFILES = \
   shard-0000.sql \
   shard-0001.sql \
-  exchange-0001.sql
+  exchange-0001.sql \
+  drop0001.sql \
+  shard-drop0001.sql
 
 exchange-0001.sql: common-0001.sql exchange-0001-part.sql
        cat common-0001.sql exchange-0001-part.sql >$@
 
-shard-0001.sql: common-0001.sql
-       cp common-0001.sql $@
+shard-0001.sql: common-0001.sql shard-0001-part.sql
+       cat common-0001.sql shard-0001-part.sql >$@
 
 shard-0000.sql: exchange-0000.sql
        cp exchange-0000.sql $@
 
+drop0001.sql: drop-common.sql drop0001-exchange-part.sql
+       cat drop-common.sql drop0001-exchange-part.sql >$@
+
+shard-drop0001.sql: drop-common.sql drop0001-shard-part.sql
+       cat drop-common.sql drop0001-shard-part.sql >$@
+
 EXTRA_DIST = \
   exchangedb.conf \
   exchangedb-postgres.conf \
diff --git a/src/exchangedb/common-0001.sql b/src/exchangedb/common-0001.sql
index 20fddd49..23b50d25 100644
--- a/src/exchangedb/common-0001.sql
+++ b/src/exchangedb/common-0001.sql
@@ -17,9 +17,6 @@
 -- Everything in one big transaction
 BEGIN;
 
--- Check patch versioning is in place.
-SELECT _v.register_patch('exchange-0001', NULL, NULL);
-
 -------------------- Tables ----------------------------
 
 CREATE OR REPLACE FUNCTION create_partitioned_table(
@@ -833,7 +830,7 @@ DECLARE
   table_name VARCHAR DEFAULT 'aggregation_transient';
 BEGIN
 
-  EXECUTE FORMAT (
+  PERFORM create_partitioned_table(
     'CREATE TABLE IF NOT EXISTS %I '
       '(amount_val INT8 NOT NULL'
       ',amount_frac INT4 NOT NULL'
@@ -1141,7 +1138,7 @@ $$;
 
 ------------------------- Partitions ------------------------------
 
-CREATE OR REPLACE FUNCTION create_table_partition(
+CREATE OR REPLACE FUNCTION create_hash_partition(
     source_table_name VARCHAR
     ,modulus INTEGER
     ,partition_num INTEGER
@@ -1166,6 +1163,18 @@ BEGIN
 END
 $$;
 
+CREATE OR REPLACE FUNCTION create_range_partition(
+  source_table_name VARCHAR
+  ,partition_num INTEGER
+)
+  RETURNS void
+  LANGUAGE plpgsql
+AS $$
+BEGIN
+  RAISE NOTICE 'TODO';
+END
+$$;
+
 CREATE OR REPLACE FUNCTION detach_default_partitions()
   RETURNS VOID
   LANGUAGE plpgsql
@@ -1303,75 +1312,75 @@ BEGIN
 
   LOOP
 
-    PERFORM create_table_partition(
+    PERFORM create_hash_partition(
       'wire_targets'
       ,modulus
       ,num_partitions
     );
     PERFORM add_constraints_to_wire_targets_partition(num_partitions::varchar);
 
-    PERFORM create_table_partition(
+    PERFORM create_hash_partition(
       'reserves'
       ,modulus
       ,num_partitions
     );
 
-    PERFORM create_table_partition(
+    PERFORM create_hash_partition(
       'reserves_in'
       ,modulus
       ,num_partitions
     );
     PERFORM add_constraints_to_reserves_in_partition(num_partitions::varchar);
 
-    PERFORM create_table_partition(
+    PERFORM create_hash_partition(
       'reserves_close'
       ,modulus
       ,num_partitions
     );
     PERFORM 
add_constraints_to_reserves_close_partition(num_partitions::varchar);
 
-    PERFORM create_table_partition(
+    PERFORM create_hash_partition(
       'reserves_out'
       ,modulus
       ,num_partitions
     );
     PERFORM add_constraints_to_reserves_out_partition(num_partitions::varchar);
 
-    PERFORM create_table_partition(
+    PERFORM create_hash_partition(
       'reserves_out_by_reserve'
       ,modulus
       ,num_partitions
     );
 
-    PERFORM create_table_partition(
+    PERFORM create_hash_partition(
       'known_coins'
       ,modulus
       ,num_partitions
     );
     PERFORM add_constraints_to_known_coins_partition(num_partitions::varchar);
     
-    PERFORM create_table_partition(
+    PERFORM create_hash_partition(
       'refresh_commitments'
       ,modulus
       ,num_partitions
     );
     PERFORM 
add_constraints_to_refresh_commitments_partition(num_partitions::varchar);
 
-    PERFORM create_table_partition(
+    PERFORM create_hash_partition(
       'refresh_revealed_coins'
       ,modulus
       ,num_partitions
     );
     PERFORM 
add_constraints_to_refresh_revealed_coins_partition(num_partitions::varchar);
 
-    PERFORM create_table_partition(
+    PERFORM create_hash_partition(
       'refresh_transfer_keys'
       ,modulus
       ,num_partitions
     );
     PERFORM 
add_constraints_to_refresh_transfer_keys_partition(num_partitions::varchar);
 
-    PERFORM create_table_partition(
+    PERFORM create_hash_partition(
       'deposits'
       ,modulus
       ,num_partitions
@@ -1400,72 +1409,72 @@ BEGIN
 -- that is right now configurable via AGGREGATOR_SHIFT option.
 
 -- FIXME: range partitioning
---    PERFORM create_table_partition(
+--    PERFORM create_range_partition(
 --      'deposits_by_ready'
 --      ,modulus
 --      ,num_partitions
 --    );
 --
---    PERFORM create_table_partition(
+--    PERFORM create_range_partition(
 --      'deposits_for_matching'
 --      ,modulus
 --      ,num_partitions
 --    );
 
-    PERFORM create_table_partition(
+    PERFORM create_hash_partition(
       'refunds'
       ,modulus
       ,num_partitions
     );
     PERFORM add_constraints_to_refunds_partition(num_partitions::varchar);
 
-    PERFORM create_table_partition(
+    PERFORM create_hash_partition(
       'wire_out'
       ,modulus
       ,num_partitions
     );
     PERFORM add_constraints_to_wire_out_partition(num_partitions::varchar);
 
-    PERFORM create_table_partition(
+    PERFORM create_hash_partition(
       'aggregation_transient'
       ,modulus
       ,num_partitions
     );
 
-    PERFORM create_table_partition(
+    PERFORM create_hash_partition(
       'aggregation_tracking'
       ,modulus
       ,num_partitions
     );
     PERFORM 
add_constraints_to_aggregation_tracking_partition(num_partitions::varchar);
 
-    PERFORM create_table_partition(
+    PERFORM create_hash_partition(
       'recoup'
       ,modulus
       ,num_partitions
     );
     PERFORM add_constraints_to_recoup_partition(num_partitions::varchar);
 
-    PERFORM create_table_partition(
+    PERFORM create_hash_partition(
       'recoup_by_reserve'
       ,modulus
       ,num_partitions
     );
 
-    PERFORM create_table_partition(
+    PERFORM create_hash_partition(
       'recoup_refresh'
       ,modulus
       ,num_partitions
     );
     PERFORM 
add_constraints_to_recoup_refresh_partition(num_partitions::varchar);
 
-    PERFORM create_table_partition(
+    PERFORM create_hash_partition(
       'prewire'
       ,modulus
       ,num_partitions
     );
 
-    PERFORM create_table_partition(
+    PERFORM create_hash_partition(
       'cs_nonce_locks'
       ,modulus
       ,num_partitions
@@ -1484,79 +1493,7 @@ $$;
 
 --------------------- Sharding ---------------------------
 
----------------------- Shards ----------------------------
-
-CREATE OR REPLACE FUNCTION setup_shard(
-  shard_suffix VARCHAR
-)
-RETURNS VOID
-LANGUAGE plpgsql
-AS $$
-BEGIN
-
-  PERFORM create_table_wire_targets(shard_suffix);
-  PERFORM add_constraints_to_wire_targets_partition(shard_suffix);
-
-  PERFORM create_table_reserves(shard_suffix);
-
-  PERFORM create_table_reserves_in(shard_suffix);
-  PERFORM add_constraints_to_reserves_in_partition(shard_suffix);
-
-  PERFORM create_table_reserves_close(shard_suffix);
-
-  PERFORM create_table_reserves_out(shard_suffix);
-
-  PERFORM create_table_reserves_out_by_reserve(shard_suffix);
-
-  PERFORM create_table_known_coins(shard_suffix);
-  PERFORM add_constraints_to_known_coins_partition(shard_suffix);
-
-  PERFORM create_table_refresh_commitments(shard_suffix);
-  PERFORM add_constraints_to_refresh_commitments_partition(shard_suffix);
- 
-  PERFORM create_table_refresh_revealed_coins(shard_suffix);
-  PERFORM add_constraints_to_refresh_revealed_coins_partition(shard_suffix);
-  
-  PERFORM create_table_refresh_transfer_keys(shard_suffix);
-  PERFORM add_constraints_to_refresh_transfer_keys_partition(shard_suffix);
-  
-  PERFORM create_table_deposits(shard_suffix);
-  PERFORM add_constraints_to_deposits_partition(shard_suffix);
-
-  PERFORM create_table_deposits_by_ready(shard_suffix);
-
-  PERFORM create_table_deposits_for_matching(shard_suffix);
-  
-  PERFORM create_table_refunds(shard_suffix);
-  PERFORM add_constraints_to_refunds_partition(shard_suffix);
-  
-  PERFORM create_table_wire_out(shard_suffix);
-  PERFORM add_constraints_to_wire_out_partition(shard_suffix);
-  
-  PERFORM create_table_aggregation_transient(shard_suffix);
-
-  PERFORM create_table_aggregation_tracking(shard_suffix);
-  PERFORM add_constraints_to_aggregation_tracking_partition(shard_suffix);
-
-  PERFORM create_table_recoup(shard_suffix);
-  PERFORM add_constraints_to_recoup_partition(shard_suffix);
-
-  PERFORM create_table_recoup_by_reserve(shard_suffix);
-
-  PERFORM create_table_recoup_refresh(shard_suffix);
-  PERFORM add_constraints_to_recoup_refresh_partition(shard_suffix);
-
-  PERFORM create_table_prewire(shard_suffix);
-
-  PERFORM create_table_cs_nonce_locks(shard_suffix);
-  PERFORM add_constraints_to_cs_nonce_locks_partition(shard_suffix);
-
-END
-$$;
-
------------------------------- Master ----------------------------------
-
-CREATE OR REPLACE FUNCTION create_foreign_table(
+CREATE OR REPLACE FUNCTION create_foreign_hash_partition(
     source_table_name VARCHAR
     ,modulus INTEGER
     ,shard_suffix VARCHAR
@@ -1591,6 +1528,18 @@ BEGIN
 END
 $$;
 
+CREATE OR REPLACE FUNCTION create_foreign_range_partition(
+  source_table_name VARCHAR
+  ,partition_num INTEGER
+)
+  RETURNS VOID
+  LANGUAGE plpgsql
+AS $$
+BEGIN
+   RAISE NOTICE 'TODO';
+END
+$$;
+
 CREATE OR REPLACE FUNCTION prepare_sharding()
 RETURNS VOID
 LANGUAGE plpgsql
@@ -1728,147 +1677,154 @@ BEGIN
     ,local_user
   );
 
-  PERFORM create_foreign_table(
+  PERFORM create_foreign_hash_partition(
     'wire_targets'
     ,total_num_shards
     ,shard_suffix
     ,current_shard_num
     ,local_user
   );
-  PERFORM create_foreign_table(
+  PERFORM create_foreign_hash_partition(
     'reserves'
     ,total_num_shards
     ,shard_suffix
     ,current_shard_num
     ,local_user
   );
-  PERFORM create_foreign_table(
+  PERFORM create_foreign_hash_partition(
     'reserves_in'
     ,total_num_shards
     ,shard_suffix
     ,current_shard_num
     ,local_user
   );
-  PERFORM create_foreign_table(
+  PERFORM create_foreign_hash_partition(
     'reserves_out'
     ,total_num_shards
     ,shard_suffix
     ,current_shard_num
     ,local_user
   );
-  PERFORM create_foreign_table(
+  PERFORM create_foreign_hash_partition(
+    'reserves_out_by_reserve'
+    ,total_num_shards
+    ,shard_suffix
+    ,current_shard_num
+    ,local_user
+  );
+  PERFORM create_foreign_hash_partition(
     'reserves_close'
     ,total_num_shards
     ,shard_suffix
     ,current_shard_num
     ,local_user
   );
-  PERFORM create_foreign_table(
+  PERFORM create_foreign_hash_partition(
     'known_coins'
     ,total_num_shards
     ,shard_suffix
     ,current_shard_num
     ,local_user
   );
-  PERFORM create_foreign_table(
+  PERFORM create_foreign_hash_partition(
     'refresh_commitments'
     ,total_num_shards
     ,shard_suffix
     ,current_shard_num
     ,local_user
   );
-  PERFORM create_foreign_table(
+  PERFORM create_foreign_hash_partition(
     'refresh_revealed_coins'
     ,total_num_shards
     ,shard_suffix
     ,current_shard_num
     ,local_user
   );
-  PERFORM create_foreign_table(
+  PERFORM create_foreign_hash_partition(
     'refresh_transfer_keys'
     ,total_num_shards
     ,shard_suffix
     ,current_shard_num
     ,local_user
   );
-  PERFORM create_foreign_table(
+  PERFORM create_foreign_hash_partition(
     'deposits'
     ,total_num_shards
     ,shard_suffix
     ,current_shard_num
     ,local_user
   );
---  PERFORM create_foreign_table(
+--  PERFORM create_foreign_range_partition(
 --    'deposits_by_ready'
 --    ,total_num_shards
 --    ,shard_suffix
 --    ,current_shard_num
 --    ,local_user
 --  );
---  PERFORM create_foreign_table(
+--  PERFORM create_foreign_range_partition(
 --    'deposits_for_matching'
 --    ,total_num_shards
 --    ,shard_suffix
 --    ,current_shard_num
 --    ,local_user
 --  );
-  PERFORM create_foreign_table(
+  PERFORM create_foreign_hash_partition(
     'refunds'
     ,total_num_shards
     ,shard_suffix
     ,current_shard_num
     ,local_user
   );
-  PERFORM create_foreign_table(
+  PERFORM create_foreign_hash_partition(
     'wire_out'
     ,total_num_shards
     ,shard_suffix
     ,current_shard_num
     ,local_user
   );
-  PERFORM create_foreign_table(
-    'aggregation_tracking'
+  PERFORM create_foreign_hash_partition(
+    'aggregation_transient'
     ,total_num_shards
     ,shard_suffix
     ,current_shard_num
     ,local_user
   );
-  PERFORM create_foreign_table(
-    'recoup'
+  PERFORM create_foreign_hash_partition(
+    'aggregation_tracking'
     ,total_num_shards
     ,shard_suffix
     ,current_shard_num
     ,local_user
   );
-  PERFORM create_foreign_table(
-    'recoup_by_reserve'
+  PERFORM create_foreign_hash_partition(
+    'recoup'
     ,total_num_shards
     ,shard_suffix
     ,current_shard_num
     ,local_user
   );
-  PERFORM create_foreign_table(
-    'reserves_out_by_reserve'
+  PERFORM create_foreign_hash_partition(
+    'recoup_by_reserve'
     ,total_num_shards
     ,shard_suffix
     ,current_shard_num
     ,local_user
   );
-  PERFORM create_foreign_table(
+  PERFORM create_foreign_hash_partition(
     'recoup_refresh'
     ,total_num_shards
     ,shard_suffix
     ,current_shard_num
     ,local_user
   );
-  PERFORM create_foreign_table(
+  PERFORM create_foreign_hash_partition(
     'prewire'
     ,total_num_shards
     ,shard_suffix
     ,current_shard_num
     ,local_user
   );
-  PERFORM create_foreign_table(
+  PERFORM create_foreign_hash_partition(
     'cs_nonce_locks'
     ,total_num_shards
     ,shard_suffix
diff --git a/src/exchangedb/drop-common.sql b/src/exchangedb/drop-common.sql
new file mode 100644
index 00000000..5c4bddfd
--- /dev/null
+++ b/src/exchangedb/drop-common.sql
@@ -0,0 +1,76 @@
+--
+-- This file is part of TALER
+-- Copyright (C) 2014--2021 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 common functions we create.
+--
+-- Unlike the other SQL files, it SHOULD be updated to reflect the
+-- latest requirements for dropping tables.
+
+
+DROP FUNCTION IF EXISTS create_table_prewire;
+DROP FUNCTION IF EXISTS create_table_recoup;
+DROP FUNCTION IF EXISTS add_constraints_to_recoup_partition;
+DROP FUNCTION IF EXISTS create_table_recoup_by_reserve;
+DROP FUNCTION IF EXISTS create_table_recoup_refresh;
+DROP FUNCTION IF EXISTS add_constraints_to_recoup_refresh_partition;
+DROP FUNCTION IF EXISTS create_table_aggregation_transient;
+DROP FUNCTION IF EXISTS create_table_aggregation_tracking;
+DROP FUNCTION IF EXISTS add_constraints_to_aggregation_tracking_partition;
+DROP FUNCTION IF EXISTS create_table_wire_out;
+DROP FUNCTION IF EXISTS add_constraints_to_wire_out_partition;
+DROP FUNCTION IF EXISTS create_table_wire_targets;
+DROP FUNCTION IF EXISTS add_constraints_to_wire_targets_partition;
+DROP FUNCTION IF EXISTS create_table_deposits;
+DROP FUNCTION IF EXISTS create_table_deposits_by_ready;
+DROP FUNCTION IF EXISTS create_table_deposits_for_matching;
+DROP FUNCTION IF EXISTS add_constraints_to_deposits_partition;
+DROP FUNCTION IF EXISTS create_table_refunds;
+DROP FUNCTION IF EXISTS add_constraints_to_refunds_partition;
+DROP FUNCTION IF EXISTS create_table_refresh_commitments;
+DROP FUNCTION IF EXISTS add_constraints_to_refresh_commitments_partition;
+DROP FUNCTION IF EXISTS create_table_refresh_revealed_coins;
+DROP FUNCTION IF EXISTS add_constraints_to_refresh_revealed_coins_partition;
+DROP FUNCTION IF EXISTS create_table_refresh_transfer_keys;
+DROP FUNCTION IF EXISTS add_constraints_to_refresh_transfer_keys_partition;
+DROP FUNCTION IF EXISTS create_table_known_coins;
+DROP FUNCTION IF EXISTS add_constraints_to_known_coins_partition;
+DROP FUNCTION IF EXISTS create_table_reserves_close;
+DROP FUNCTION IF EXISTS add_constraints_to_reserves_close_partition;
+DROP FUNCTION IF EXISTS create_table_reserves_out;
+DROP FUNCTION IF EXISTS create_table_reserves_out_by_reserve;
+DROP FUNCTION IF EXISTS add_constraints_to_reserves_out_partition;
+DROP FUNCTION IF EXISTS create_table_reserves_in;
+DROP FUNCTION IF EXISTS add_constraints_to_reserves_in_partition;
+DROP FUNCTION IF EXISTS create_table_reserves;
+DROP FUNCTION IF EXISTS create_table_cs_nonce_locks;
+DROP FUNCTION IF EXISTS add_constraints_to_cs_nonce_locks_partition;
+
+DROP FUNCTION IF EXISTS create_partitioned_table;
+DROP FUNCTION IF EXISTS create_hash_partition;
+DROP FUNCTION IF EXISTS create_range_partition;
+DROP FUNCTION IF EXISTS create_partitions;
+DROP FUNCTION IF EXISTS detach_default_partitions;
+DROP FUNCTION IF EXISTS drop_default_partitions;
+DROP FUNCTION IF EXISTS prepare_sharding;
+DROP FUNCTION IF EXISTS create_foreign_hash_partition;
+DROP FUNCTION IF EXISTS create_foreign_range_partition;
+DROP FUNCTION IF EXISTS create_foreign_servers;
+DROP FUNCTION IF EXISTS create_shard_server;
+
+COMMIT;
\ No newline at end of file
diff --git a/src/exchangedb/drop0001.sql 
b/src/exchangedb/drop0001-exchange-part.sql
similarity index 60%
rename from src/exchangedb/drop0001.sql
rename to src/exchangedb/drop0001-exchange-part.sql
index ab0e7523..a5a399eb 100644
--- a/src/exchangedb/drop0001.sql
+++ b/src/exchangedb/drop0001-exchange-part.sql
@@ -14,19 +14,13 @@
 -- 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.
---
--- Unlike the other SQL files, it SHOULD be updated to reflect the
--- latest requirements for dropping tables.
-
-
 -- Unregister patch (exchange-0001.sql)
 SELECT _v.unregister_patch('exchange-0001');
 
--- Drops for exchange-0001.sql
+
+-- Drops for exchange-0001-part.sql
 DROP TRIGGER IF EXISTS reserves_out_on_insert ON reserves_out;
 DROP TRIGGER IF EXISTS reserves_out_on_delete ON reserves_out;
 DROP TRIGGER IF EXISTS deposits_on_insert ON deposits;
@@ -43,70 +37,32 @@ DROP TABLE IF EXISTS wire_accounts CASCADE;
 DROP TABLE IF EXISTS signkey_revocations CASCADE;
 DROP TABLE IF EXISTS work_shards CASCADE;
 DROP TABLE IF EXISTS prewire CASCADE;
-DROP FUNCTION IF EXISTS create_table_prewire;
 DROP TABLE IF EXISTS recoup CASCADE;
-DROP FUNCTION IF EXISTS create_table_recoup;
-DROP FUNCTION IF EXISTS add_constraints_to_recoup_partition;
 DROP TABLE IF EXISTS recoup_refresh CASCADE;
-DROP FUNCTION IF EXISTS create_table_recoup_refresh;
-DROP FUNCTION IF EXISTS add_constraints_to_recoup_refresh_partition;
 DROP TABLE IF EXISTS aggregation_transient CASCADE;
-DROP FUNCTION IF EXISTS create_table_aggregation_transient;
 DROP TABLE IF EXISTS aggregation_tracking CASCADE;
-DROP FUNCTION IF EXISTS create_table_aggregation_tracking;
-DROP FUNCTION IF EXISTS add_constraints_to_aggregation_tracking_partition;
 DROP TABLE IF EXISTS wire_out CASCADE;
-DROP FUNCTION IF EXISTS create_table_wire_out;
-DROP FUNCTION IF EXISTS add_constraints_to_wire_out_partition;
 DROP TABLE IF EXISTS wire_targets CASCADE;
-DROP FUNCTION IF EXISTS create_table_wire_targets;
-DROP FUNCTION IF EXISTS add_constraints_to_wire_targets_partition;
 DROP TABLE IF EXISTS wire_fee CASCADE;
 DROP TABLE IF EXISTS deposits CASCADE;
-DROP FUNCTION IF EXISTS create_table_deposits;
 DROP TABLE IF EXISTS deposits_by_ready CASCADE;
-DROP FUNCTION IF EXISTS create_table_deposits_by_ready;
 DROP TABLE IF EXISTS deposits_for_matching CASCADE;
-DROP FUNCTION IF EXISTS create_table_deposits_for_matching;
-DROP FUNCTION IF EXISTS add_constraints_to_deposits_partition;
 DROP TABLE IF EXISTS extension_details CASCADE;
 DROP TABLE IF EXISTS refunds CASCADE;
-DROP FUNCTION IF EXISTS create_table_refunds;
-DROP FUNCTION IF EXISTS add_constraints_to_refunds_partition;
 DROP TABLE IF EXISTS refresh_commitments CASCADE;
-DROP FUNCTION IF EXISTS create_table_refresh_commitments;
-DROP FUNCTION IF EXISTS add_constraints_to_refresh_commitments_partition;
 DROP TABLE IF EXISTS refresh_revealed_coins CASCADE;
-DROP FUNCTION IF EXISTS create_table_refresh_revealed_coins;
-DROP FUNCTION IF EXISTS add_constraints_to_refresh_revealed_coins_partition;
 DROP TABLE IF EXISTS refresh_transfer_keys CASCADE;
-DROP FUNCTION IF EXISTS create_table_refresh_transfer_keys;
-DROP FUNCTION IF EXISTS add_constraints_to_refresh_transfer_keys_partition;
 DROP TABLE IF EXISTS known_coins CASCADE;
-DROP FUNCTION IF EXISTS create_table_known_coins;
-DROP FUNCTION IF EXISTS add_constraints_to_known_coins_partition;
 DROP TABLE IF EXISTS reserves_close CASCADE;
-DROP FUNCTION IF EXISTS create_table_reserves_close;
-DROP FUNCTION IF EXISTS add_constraints_to_reserves_close_partition;
 DROP TABLE IF EXISTS reserves_out CASCADE;
-DROP FUNCTION IF EXISTS create_table_reserves_out;
 DROP TABLE IF EXISTS reserves_out_by_reserve CASCADE;
-DROP FUNCTION IF EXISTS create_table_reserves_out_by_reserve;
-DROP FUNCTION IF EXISTS add_constraints_to_reserves_out_partition;
 DROP TABLE IF EXISTS reserves_in CASCADE;
-DROP FUNCTION IF EXISTS create_table_reserves_in;
-DROP FUNCTION IF EXISTS add_constraints_to_reserves_in_partition;
 DROP TABLE IF EXISTS reserves CASCADE;
-DROP FUNCTION IF EXISTS create_table_reserves;
 DROP TABLE IF EXISTS denomination_revocations CASCADE;
 DROP TABLE IF EXISTS denominations CASCADE;
 DROP TABLE IF EXISTS cs_nonce_locks CASCADE;
-DROP FUNCTION IF EXISTS create_table_cs_nonce_locks;
-DROP FUNCTION IF EXISTS add_constraints_to_cs_nonce_locks_partition;
-
 DROP TABLE IF EXISTS global_fee CASCADE;
 DROP TABLE IF EXISTS recoup_by_reserve CASCADE;
-DROP TABLE IF EXISTS aggregation_transient CASCADE;
 
 
 DROP TABLE IF EXISTS partners CASCADE;
@@ -144,17 +100,6 @@ DROP FUNCTION IF EXISTS exchange_do_account_merge;
 DROP FUNCTION IF EXISTS exchange_do_history_request;
 DROP FUNCTION IF EXISTS exchange_do_close_request;
 
-
-DROP FUNCTION IF EXISTS create_table_partition;
-DROP FUNCTION IF EXISTS create_partitions;
-DROP FUNCTION IF EXISTS detach_default_partitions;
-DROP FUNCTION IF EXISTS drop_default_partitions;
-DROP FUNCTION IF EXISTS prepare_sharding;
-DROP FUNCTION IF EXISTS create_foreign_table;
-DROP FUNCTION IF EXISTS create_foreign_servers;
-DROP FUNCTION IF EXISTS create_shard_server;
-
-
 -- And we're out of here...
 
 COMMIT;
diff --git a/src/exchangedb/drop0001-shard-part.sql 
b/src/exchangedb/drop0001-shard-part.sql
new file mode 100644
index 00000000..9cf3eeb3
--- /dev/null
+++ b/src/exchangedb/drop0001-shard-part.sql
@@ -0,0 +1,27 @@
+--
+-- This file is part of TALER
+-- Copyright (C) 2014--2021 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/>
+--
+
+BEGIN;
+
+-- Unregister patch (shard-0001.sql)
+SELECT _v.unregister_patch('shard-0001');
+
+-- Drops for shard-0001-part.sql
+
+DROP FUNCTION IF EXISTS drop_shard;
+DROP FUNCTION IF EXISTS setup_shard;
+
+COMMIT;
diff --git a/src/exchangedb/exchange-0001-part.sql 
b/src/exchangedb/exchange-0001-part.sql
index 359fe9f8..a478a0d1 100644
--- a/src/exchangedb/exchange-0001-part.sql
+++ b/src/exchangedb/exchange-0001-part.sql
@@ -17,6 +17,9 @@
 -- Everything in one big transaction
 BEGIN;
 
+-- Check patch versioning is in place.
+SELECT _v.register_patch('exchange-0001', NULL, NULL);
+
 -- ------------------------------ denominations 
----------------------------------------
 
 CREATE TABLE IF NOT EXISTS denominations
diff --git a/src/exchangedb/plugin_exchangedb_postgres.c 
b/src/exchangedb/plugin_exchangedb_postgres.c
index 53b84ce8..9ba37370 100644
--- a/src/exchangedb/plugin_exchangedb_postgres.c
+++ b/src/exchangedb/plugin_exchangedb_postgres.c
@@ -174,6 +174,63 @@ postgres_drop_tables (void *cls)
 }
 
 
+/**
+ * Drop all Taler shard tables.  This should only be used by testcases.
+ *
+ * @param cls the `struct PostgresClosure` with the plugin-specific state
+ * @param old_idx the index which was used when the shard database was 
initialized
+ * @return #GNUNET_OK upon success; #GNUNET_SYSERR upon failure
+ */
+static enum GNUNET_GenericReturnValue
+postgres_drop_shard_tables (void *cls,
+                            uint32_t old_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 (&old_idx),
+    GNUNET_PQ_query_param_end
+  };
+  struct GNUNET_PQ_PreparedStatement ps[] = {
+    GNUNET_PQ_make_prepare ("drop_shard_tables",
+                            "SELECT"
+                            " drop_shard"
+                            " ($1);",
+                            1),
+    GNUNET_PQ_PREPARED_STATEMENT_END
+  };
+  conn = GNUNET_PQ_connect_with_cfg (pg->cfg,
+                                     "exchangedb-postgres",
+                                     NULL,
+                                     NULL,
+                                     ps);
+  if (NULL == conn)
+    return GNUNET_SYSERR;
+  if (0 > GNUNET_PQ_eval_prepared_non_select (conn,
+                                              "drop_shard_tables",
+                                              params))
+    ret = GNUNET_SYSERR;
+  GNUNET_PQ_disconnect (conn);
+
+  conn = GNUNET_PQ_connect_with_cfg (pg->cfg,
+                                     "exchangedb-postgres",
+                                     "shard-drop",
+                                     NULL,
+                                     NULL);
+  if (NULL == conn)
+    return GNUNET_SYSERR;
+  GNUNET_PQ_disconnect (conn);
+  if (NULL != pg->conn)
+  {
+    GNUNET_PQ_disconnect (pg->conn);
+    pg->conn = NULL;
+    pg->init = false;
+  }
+  return ret;
+}
+
+
 /**
  * Create the necessary tables if they are not present
  *
@@ -13140,6 +13197,7 @@ libtaler_plugin_exchangedb_postgres_init (void *cls)
   plugin = GNUNET_new (struct TALER_EXCHANGEDB_Plugin);
   plugin->cls = pg;
   plugin->drop_tables = &postgres_drop_tables;
+  plugin->drop_shard_tables = &postgres_drop_shard_tables;
   plugin->create_tables = &postgres_create_tables;
   plugin->create_shard_tables = &postgres_create_shard_tables;
   plugin->setup_partitions = &postgres_setup_partitions;
diff --git a/src/exchangedb/shard-0001-part.sql 
b/src/exchangedb/shard-0001-part.sql
new file mode 100644
index 00000000..d971b0c7
--- /dev/null
+++ b/src/exchangedb/shard-0001-part.sql
@@ -0,0 +1,199 @@
+--
+-- This file is part of TALER
+-- Copyright (C) 2014--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/>
+--
+
+-- Everything in one big transaction
+BEGIN;
+
+-- Check patch versioning is in place.
+SELECT _v.register_patch('shard-0001', NULL, NULL);
+
+CREATE OR REPLACE FUNCTION setup_shard(
+  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);
+  PERFORM add_constraints_to_wire_targets_partition(shard_suffix);
+
+  PERFORM create_table_reserves(shard_suffix);
+
+  PERFORM create_table_reserves_in(shard_suffix);
+  PERFORM add_constraints_to_reserves_in_partition(shard_suffix);
+
+  PERFORM create_table_reserves_close(shard_suffix);
+
+  PERFORM create_table_reserves_out(shard_suffix);
+
+  PERFORM create_table_reserves_out_by_reserve(shard_suffix);
+
+  PERFORM create_table_known_coins(shard_suffix);
+  PERFORM add_constraints_to_known_coins_partition(shard_suffix);
+
+  PERFORM create_table_refresh_commitments(shard_suffix);
+  PERFORM add_constraints_to_refresh_commitments_partition(shard_suffix);
+ 
+  PERFORM create_table_refresh_revealed_coins(shard_suffix);
+  PERFORM add_constraints_to_refresh_revealed_coins_partition(shard_suffix);
+  
+  PERFORM create_table_refresh_transfer_keys(shard_suffix);
+  PERFORM add_constraints_to_refresh_transfer_keys_partition(shard_suffix);
+  
+  PERFORM create_table_deposits(shard_suffix);
+  PERFORM add_constraints_to_deposits_partition(shard_suffix);
+
+  PERFORM create_table_deposits_by_ready(shard_suffix);
+
+  PERFORM create_table_deposits_for_matching(shard_suffix);
+  
+  PERFORM create_table_refunds(shard_suffix);
+  PERFORM add_constraints_to_refunds_partition(shard_suffix);
+  
+  PERFORM create_table_wire_out(shard_suffix);
+  PERFORM add_constraints_to_wire_out_partition(shard_suffix);
+  
+  PERFORM create_table_aggregation_transient(shard_suffix);
+
+  PERFORM create_table_aggregation_tracking(shard_suffix);
+  PERFORM add_constraints_to_aggregation_tracking_partition(shard_suffix);
+
+  PERFORM create_table_recoup(shard_suffix);
+  PERFORM add_constraints_to_recoup_partition(shard_suffix);
+
+  PERFORM create_table_recoup_by_reserve(shard_suffix);
+
+  PERFORM create_table_recoup_refresh(shard_suffix);
+  PERFORM add_constraints_to_recoup_refresh_partition(shard_suffix);
+
+  PERFORM create_table_prewire(shard_suffix);
+
+  PERFORM create_table_cs_nonce_locks(shard_suffix);
+  PERFORM add_constraints_to_cs_nonce_locks_partition(shard_suffix);
+
+END
+$$;
+
+
+CREATE OR REPLACE FUNCTION drop_shard(
+  shard_idx INTEGER 
+)
+  RETURNS VOID
+  LANGUAGE plpgsql
+AS $$
+DECLARE 
+  shard_suffix VARCHAR;
+BEGIN
+ 
+  shard_suffix = shard_idx::varchar;
+
+  EXECUTE FORMAT(
+    'DROP TABLE IF EXISTS %I CASCADE'
+    ,'wire_targets_' || shard_suffix
+  );
+  EXECUTE FORMAT(
+    'DROP TABLE IF EXISTS %I CASCADE'
+    ,'reserves_' || shard_suffix
+  );
+  EXECUTE FORMAT(
+    'DROP TABLE IF EXISTS %I CASCADE'
+    ,'reserves_in_' || shard_suffix
+  );
+  EXECUTE FORMAT(
+    'DROP TABLE IF EXISTS %I CASCADE'
+    ,'reserves_out_' || shard_suffix
+  );
+  EXECUTE FORMAT(
+    'DROP TABLE IF EXISTS %I CASCADE'
+    ,'reserves_close_' || shard_suffix
+  );
+  EXECUTE FORMAT(
+    'DROP TABLE IF EXISTS %I CASCADE'
+    ,'known_coins_' || shard_suffix
+  );
+  EXECUTE FORMAT(
+    'DROP TABLE IF EXISTS %I CASCADE'
+    ,'refresh_commitments_' || shard_suffix
+  );
+  EXECUTE FORMAT(
+    'DROP TABLE IF EXISTS %I CASCADE'
+    ,'refresh_revealed_coins_' || shard_suffix
+  );
+  EXECUTE FORMAT(
+    'DROP TABLE IF EXISTS %I CASCADE'
+    ,'refresh_transfer_keys_' || shard_suffix
+  );
+  EXECUTE FORMAT(
+    'DROP TABLE IF EXISTS %I CASCADE'
+    ,'deposits_' || shard_suffix
+  );
+  EXECUTE FORMAT(
+    'DROP TABLE IF EXISTS %I CASCADE'
+    ,'deposits_by_ready_' || shard_suffix
+  );
+  EXECUTE FORMAT(
+    'DROP TABLE IF EXISTS %I CASCADE'
+    ,'deposits_for_matching_' || shard_suffix
+  );
+  EXECUTE FORMAT(
+    'DROP TABLE IF EXISTS %I CASCADE'
+    ,'refunds_' || shard_suffix
+  );
+  EXECUTE FORMAT(
+    'DROP TABLE IF EXISTS %I CASCADE'
+    ,'wire_out_' || shard_suffix
+  );
+  EXECUTE FORMAT(
+    'DROP TABLE IF EXISTS %I CASCADE'
+    ,'aggregation_transient_' || shard_suffix
+  );
+  EXECUTE FORMAT(
+    'DROP TABLE IF EXISTS %I CASCADE'
+    ,'aggregation_tracking_' || shard_suffix
+  );
+  EXECUTE FORMAT(
+    'DROP TABLE IF EXISTS %I CASCADE'
+    ,'recoup_' || shard_suffix
+  );
+  EXECUTE FORMAT(
+    'DROP TABLE IF EXISTS %I CASCADE'
+    ,'recoup_by_reserve_' || shard_suffix
+  );
+  EXECUTE FORMAT(
+    'DROP TABLE IF EXISTS %I CASCADE'
+    ,'reserves_out_by_reserve_' || shard_suffix
+  );
+  EXECUTE FORMAT(
+    'DROP TABLE IF EXISTS %I CASCADE'
+    ,'recoup_refresh_' || shard_suffix
+  );
+  EXECUTE FORMAT(
+    'DROP TABLE IF EXISTS %I CASCADE'
+    ,'prewire_' || shard_suffix
+  );
+  EXECUTE FORMAT(
+    'DROP TABLE IF EXISTS %I CASCADE'
+    ,'cs_nonce_locks_' || shard_suffix
+  );
+END
+$$;
+
+COMMIT;
diff --git a/src/include/taler_exchangedb_plugin.h 
b/src/include/taler_exchangedb_plugin.h
index 7383913a..5512d333 100644
--- a/src/include/taler_exchangedb_plugin.h
+++ b/src/include/taler_exchangedb_plugin.h
@@ -2244,6 +2244,16 @@ struct TALER_EXCHANGEDB_Plugin
   enum GNUNET_GenericReturnValue
   (*drop_tables)(void *cls);
 
+  /**
+   * Drop the Taler tables on a shard.  This should only be used in testcases.
+   *
+   * @param cls the @e cls of this struct with the plugin-specific state
+   * @param old_idx the index which was used then the database was initialized.
+   * @return #GNUNET_OK upon success; #GNUNET_SYSERR upon failure
+   */
+  enum GNUNET_GenericReturnValue
+  (*drop_shard_tables)(void *cls,
+                       uint32_t old_idx);
 
   /**
    * Create the necessary tables if they are not present

-- 
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]