summaryrefslogtreecommitdiff
path: root/src/exchange-tools/taler-exchange-dbinit.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/exchange-tools/taler-exchange-dbinit.c')
-rw-r--r--src/exchange-tools/taler-exchange-dbinit.c134
1 files changed, 33 insertions, 101 deletions
diff --git a/src/exchange-tools/taler-exchange-dbinit.c b/src/exchange-tools/taler-exchange-dbinit.c
index c2d8964d6..41ff2ab24 100644
--- a/src/exchange-tools/taler-exchange-dbinit.c
+++ b/src/exchange-tools/taler-exchange-dbinit.c
@@ -1,6 +1,6 @@
/*
This file is part of TALER
- Copyright (C) 2014-2021 Taler Systems SA
+ Copyright (C) 2014-2024 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
@@ -30,6 +30,11 @@
static int global_ret;
/**
+ * -a option: inject auditor triggers
+ */
+static int inject_auditor;
+
+/**
* -r option: do full DB reset
*/
static int reset_db;
@@ -50,19 +55,9 @@ static int gc_db;
static uint32_t num_partitions;
/**
- * -F option: setup a sharded database, i.e. create foreign tables/server
- */
-static uint32_t num_foreign_servers;
-
-/**
- * -S option: setup a database on a shard server, creates tables with suffix shard_idx
- */
-static uint32_t shard_idx;
-
-/**
- * -R option: do full shard DB reset
+ * -f option: force partitions to be created when there is only one
*/
-static uint32_t reset_shard_db;
+static int force_create_partitions;
/**
* Main function that will be run.
@@ -83,6 +78,7 @@ run (void *cls,
(void) cls;
(void) args;
(void) cfgfile;
+
if (NULL ==
(plugin = TALER_EXCHANGEDB_plugin_load (cfg)))
{
@@ -93,43 +89,17 @@ run (void *cls,
}
if (reset_db)
{
- if (GNUNET_OK != plugin->drop_tables (plugin->cls))
+ if (GNUNET_OK !=
+ plugin->drop_tables (plugin->cls))
{
GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
"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 <
- 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))
- {
- 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))
+ plugin->create_tables (plugin->cls,
+ force_create_partitions || num_partitions > 0,
+ num_partitions))
{
fprintf (stderr,
"Failed to initialize database.\n");
@@ -138,46 +108,6 @@ run (void *cls,
global_ret = EXIT_NOPERMISSION;
return;
}
- if (1 <
- num_partitions)
- {
- if (GNUNET_OK !=
- plugin->setup_partitions (plugin->cls,
- num_partitions))
- {
- GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
- "Could not setup partitions. Dropping default ones again\n");
- if (GNUNET_OK != plugin->drop_tables (plugin->cls))
- {
- GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
- "Could not drop tables after failed partitioning, please delete the DB manually\n");
- }
- TALER_EXCHANGEDB_plugin_unload (plugin);
- plugin = NULL;
- global_ret = EXIT_NOTINSTALLED;
- return;
- }
- }
- else if (1 <
- num_foreign_servers)
- {
- if (GNUNET_OK !=
- plugin->setup_foreign_servers (plugin->cls,
- num_foreign_servers))
- {
- GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
- "Could not setup shards. Aborting\n");
- if (GNUNET_OK != plugin->drop_tables (plugin->cls))
- {
- GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
- "Could not drop tables after failed shard setup, please delete the DB manually\n");
- }
- TALER_EXCHANGEDB_plugin_unload (plugin);
- plugin = NULL;
- global_ret = EXIT_NOTINSTALLED;
- return;
- }
- }
if (gc_db || clear_shards)
{
if (GNUNET_OK !=
@@ -192,7 +122,7 @@ run (void *cls,
}
if (clear_shards)
{
- if (0 >
+ if (GNUNET_OK !=
plugin->delete_shard_locks (plugin->cls))
{
fprintf (stderr,
@@ -208,6 +138,15 @@ run (void *cls,
}
}
}
+ if (inject_auditor)
+ {
+ if (GNUNET_SYSERR == plugin->inject_auditor_triggers (plugin->cls))
+ {
+ fprintf (stderr,
+ "Injecting auditor triggers failed!\n");
+ global_ret = EXIT_FAILURE;
+ }
+ }
TALER_EXCHANGEDB_plugin_unload (plugin);
plugin = NULL;
}
@@ -226,6 +165,10 @@ main (int argc,
char *const *argv)
{
const struct GNUNET_GETOPT_CommandLineOption options[] = {
+ GNUNET_GETOPT_option_flag ('a',
+ "inject-auditor",
+ "inject auditor triggers",
+ &inject_auditor),
GNUNET_GETOPT_option_flag ('g',
"gc",
"garbage collect database",
@@ -241,23 +184,12 @@ 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: this is different from 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_uint ('F',
- "foreign",
- "NUMBER",
- "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_flag ('f',
+ "force",
+ "Force partitions to be created if there is only one partition",
+ &force_create_partitions),
GNUNET_GETOPT_OPTION_END
};
enum GNUNET_GenericReturnValue ret;