commit 45a2819fa7b252fff6ae6723a5ceb0f853ca89ef
parent a6fb529dddc757000bdc88084b0d28daa86b18ca
Author: Christian Grothoff <christian@grothoff.org>
Date: Sun, 14 Jun 2026 01:34:36 +0200
re-add check to refuse to start if schema is not current
Diffstat:
3 files changed, 47 insertions(+), 5 deletions(-)
diff --git a/src/challengerdb/challenger-dbinit.c b/src/challengerdb/challenger-dbinit.c
@@ -63,7 +63,7 @@ run (void *cls,
(void) args;
(void) cfgfile;
if (NULL ==
- (db = CHALLENGERDB_connect (cfg)))
+ (db = CHALLENGERDB_connect_admin (cfg)))
{
fprintf (stderr,
"Failed to initialize database connection.\n");
diff --git a/src/challengerdb/pg.c b/src/challengerdb/pg.c
@@ -103,8 +103,9 @@ internal_setup (struct CHALLENGERDB_PostgresContext *pg)
}
-struct CHALLENGERDB_PostgresContext *
-CHALLENGERDB_connect (const struct GNUNET_CONFIGURATION_Handle *cfg)
+static struct CHALLENGERDB_PostgresContext *
+do_connect (const struct GNUNET_CONFIGURATION_Handle *cfg,
+ bool check_current)
{
struct CHALLENGERDB_PostgresContext *pg;
@@ -125,15 +126,43 @@ CHALLENGERDB_connect (const struct GNUNET_CONFIGURATION_Handle *cfg)
if (GNUNET_OK !=
internal_setup (pg))
{
- CHALLENGERDB_disconnect (pg);
GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
"Failed to ensure DB is initialized\n");
+ CHALLENGERDB_disconnect (pg);
+ return NULL;
+ }
+ if (check_current &&
+ (GNUNET_OK !=
+ GNUNET_PQ_check_current (pg->conn,
+ "challenger-")) )
+ {
+ GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+ "Database schema is not up-to-date. Try running challenger-dbinit or challenger-dbconfig!\n");
+ CHALLENGERDB_disconnect (pg);
return NULL;
}
return pg;
}
+struct CHALLENGERDB_PostgresContext *
+CHALLENGERDB_connect (
+ const struct GNUNET_CONFIGURATION_Handle *cfg)
+{
+ return do_connect (cfg,
+ true);
+}
+
+
+struct CHALLENGERDB_PostgresContext *
+CHALLENGERDB_connect_admin (
+ const struct GNUNET_CONFIGURATION_Handle *cfg)
+{
+ return do_connect (cfg,
+ false);
+}
+
+
void
CHALLENGERDB_disconnect (struct CHALLENGERDB_PostgresContext *pg)
{
diff --git a/src/include/challenger_database_lib.h b/src/include/challenger_database_lib.h
@@ -32,7 +32,20 @@ struct CHALLENGERDB_PostgresContext;
* @return NULL on failure
*/
struct CHALLENGERDB_PostgresContext *
-CHALLENGERDB_connect (const struct GNUNET_CONFIGURATION_Handle *cfg);
+CHALLENGERDB_connect (
+ const struct GNUNET_CONFIGURATION_Handle *cfg);
+
+
+/**
+ * Connect to the challenger database for administration.
+ * Disables the check that the database schema is current.
+ *
+ * @param cfg configuration to use
+ * @return NULL on failure
+ */
+struct CHALLENGERDB_PostgresContext *
+CHALLENGERDB_connect_admin (
+ const struct GNUNET_CONFIGURATION_Handle *cfg);
/**