diff options
Diffstat (limited to 'src/stasis/anastasis-dbinit.c')
-rw-r--r-- | src/stasis/anastasis-dbinit.c | 46 |
1 files changed, 41 insertions, 5 deletions
diff --git a/src/stasis/anastasis-dbinit.c b/src/stasis/anastasis-dbinit.c index 17b3c56..a0e17db 100644 --- a/src/stasis/anastasis-dbinit.c +++ b/src/stasis/anastasis-dbinit.c @@ -34,6 +34,11 @@ static int global_ret; static int reset_db; /** + * -g option: do garbate collection + */ +static int gc_db; + +/** * Main function that will be run. * * @param cls closure @@ -54,21 +59,49 @@ run (void *cls, { fprintf (stderr, "Failed to initialize database plugin.\n"); - global_ret = EXIT_FAILURE; + global_ret = EXIT_NOTINSTALLED; return; } if (reset_db) { - (void) plugin->drop_tables (plugin->cls); - ANASTASIS_DB_plugin_unload (plugin); - plugin = ANASTASIS_DB_plugin_load (cfg); + 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 (GNUNET_OK != plugin->create_tables (plugin->cls)) { global_ret = EXIT_FAILURE; + ANASTASIS_DB_plugin_unload (plugin); return; } + if (gc_db) + { + struct GNUNET_TIME_Absolute expire_backups; + struct GNUNET_TIME_Absolute expire_payments; + struct GNUNET_TIME_Absolute now; + + now = GNUNET_TIME_absolute_get (); + expire_backups = GNUNET_TIME_absolute_subtract ( + now, + GNUNET_TIME_relative_multiply ( + GNUNET_TIME_UNIT_MONTHS, + 6)); + expire_payments = GNUNET_TIME_absolute_subtract ( + now, + GNUNET_TIME_relative_multiply ( + GNUNET_TIME_UNIT_YEARS, + 10)); + if (0 > plugin->gc (plugin->cls, + expire_backups, + expire_payments)) + { + fprintf (stderr, + "Garbage collection failed!\n"); + } + } ANASTASIS_DB_plugin_unload (plugin); } @@ -86,7 +119,10 @@ main (int argc, char *const *argv) { struct GNUNET_GETOPT_CommandLineOption options[] = { - + GNUNET_GETOPT_option_flag ('g', + "garbagecollect", + "remove state data from database", + &gc_db), GNUNET_GETOPT_option_flag ('r', "reset", "reset database (DANGEROUS: all existing data is lost!)", |