From 3483bb99eb1329f4ac90bcb8b8a04ec1a7ab6045 Mon Sep 17 00:00:00 2001 From: Andres Freund Date: Sun, 11 Jun 2017 18:22:29 -0700 Subject: [PATCH] Minimal infrastructure for per-backend citus initialization. --- src/backend/distributed/shared_library_init.c | 17 ++++++++++++++++- src/backend/distributed/utils/metadata_cache.c | 8 ++++++++ src/include/distributed/shared_library_init.h | 16 ++++++++++++++++ 3 files changed, 40 insertions(+), 1 deletion(-) create mode 100644 src/include/distributed/shared_library_init.h diff --git a/src/backend/distributed/shared_library_init.c b/src/backend/distributed/shared_library_init.c index 181242e8b..f6a03702b 100644 --- a/src/backend/distributed/shared_library_init.c +++ b/src/backend/distributed/shared_library_init.c @@ -1,7 +1,7 @@ /*------------------------------------------------------------------------- * * shared_library_init.c - * Initialize Citus extension + * Functionality related to the initialization of the Citus extension. * * Copyright (c) 2012-2016, Citus Data, Inc. *------------------------------------------------------------------------- @@ -36,6 +36,7 @@ #include "distributed/pg_dist_partition.h" #include "distributed/placement_connection.h" #include "distributed/remote_commands.h" +#include "distributed/shared_library_init.h" #include "distributed/task_tracker.h" #include "distributed/transaction_management.h" #include "distributed/worker_manager.h" @@ -177,6 +178,20 @@ _PG_init(void) } +/* + * StartupCitusBackend initializes per-backend infrastructure, and is called + * the first time citus is used in a database. + * + * NB: All code here has to be able to cope with this routine being called + * multiple times in the same backend. This will e.g. happen when the + * extension is created or upgraded. + */ +void +StartupCitusBackend(void) +{ +} + + /* * CreateRequiredDirectories - Create directories required for Citus to * function. diff --git a/src/backend/distributed/utils/metadata_cache.c b/src/backend/distributed/utils/metadata_cache.c index d0ec677bf..9dd62087e 100644 --- a/src/backend/distributed/utils/metadata_cache.c +++ b/src/backend/distributed/utils/metadata_cache.c @@ -35,6 +35,7 @@ #include "distributed/pg_dist_partition.h" #include "distributed/pg_dist_shard.h" #include "distributed/pg_dist_shard_placement.h" +#include "distributed/shared_library_init.h" #include "distributed/shardinterval_utils.h" #include "distributed/worker_manager.h" #include "distributed/worker_protocol.h" @@ -1118,6 +1119,13 @@ CitusHasBeenLoaded(void) { extensionScriptExecuted = false; } + + /* + * Whenever the extension exists, even when currently creating it, + * we need the infrastructure to run citus in this database to be + * ready. + */ + StartupCitusBackend(); } /* we disable extension features during pg_upgrade */ diff --git a/src/include/distributed/shared_library_init.h b/src/include/distributed/shared_library_init.h new file mode 100644 index 000000000..35f3d0e16 --- /dev/null +++ b/src/include/distributed/shared_library_init.h @@ -0,0 +1,16 @@ +/*------------------------------------------------------------------------- + * + * shared_library_init.h + * Functionality related to the initialization of the Citus extension. + * + * Copyright (c) 2017, Citus Data, Inc. + * + *------------------------------------------------------------------------- + */ + +#ifndef SHARED_LIBRARY_INIT_H +#define SHARED_LIBRARY_INIT_H + +extern void StartupCitusBackend(void); + +#endif /* SHARED_LIBRARY_INIT_H */