From a4133c69e8dd4f2eb272a960134b014ddad3a298 Mon Sep 17 00:00:00 2001 From: ywj Date: Tue, 1 Mar 2022 12:31:14 -0800 Subject: [PATCH] Build Columnar.so and make Citus depends on it (#5661) * [Columnar] Build columnar.so and let citus depends on it Co-authored-by: Yanwen Jin Co-authored-by: Ying Xu <32597660+yxu2162@users.noreply.github.com> Co-authored-by: jeff-davis --- Makefile | 14 ++++++++++---- src/backend/columnar/Makefile | 17 +++++++++++++++++ src/backend/columnar/columnar_debug.c | 1 - src/backend/columnar/mod.c | 7 ++++++- src/backend/columnar/safeclib | 1 + src/backend/distributed/Makefile | 10 ++++++---- src/backend/distributed/shared_library_init.c | 8 +++++++- src/include/columnar/mod.h | 1 + 8 files changed, 48 insertions(+), 11 deletions(-) create mode 100644 src/backend/columnar/Makefile create mode 120000 src/backend/columnar/safeclib diff --git a/Makefile b/Makefile index 7569fd6ce..22a363fbb 100644 --- a/Makefile +++ b/Makefile @@ -10,13 +10,18 @@ ifeq (,$(wildcard Makefile.global)) endif include Makefile.global - all: extension + +#build columnar only +columnar: + $(MAKE) -C src/backend/columnar all # build extension -extension: $(citus_top_builddir)/src/include/citus_version.h +extension: $(citus_top_builddir)/src/include/citus_version.h columnar $(MAKE) -C src/backend/distributed/ all -install-extension: extension +install-columnar: + $(MAKE) -C src/backend/columnar install +install-extension: extension install-columnar $(MAKE) -C src/backend/distributed/ install install-headers: extension $(MKDIR_P) '$(DESTDIR)$(includedir_server)/distributed/' @@ -27,6 +32,7 @@ install-headers: extension clean-extension: $(MAKE) -C src/backend/distributed/ clean + $(MAKE) -C src/backend/columnar/ clean clean-full: $(MAKE) -C src/backend/distributed/ clean-full .PHONY: extension install-extension clean-extension clean-full @@ -35,8 +41,8 @@ install: install-extension install-headers install-downgrades: $(MAKE) -C src/backend/distributed/ install-downgrades install-all: install-headers + $(MAKE) -C src/backend/columnar/ install-all $(MAKE) -C src/backend/distributed/ install-all - clean: clean-extension # apply or check style diff --git a/src/backend/columnar/Makefile b/src/backend/columnar/Makefile new file mode 100644 index 000000000..abda9c90d --- /dev/null +++ b/src/backend/columnar/Makefile @@ -0,0 +1,17 @@ +citus_subdir = src/backend/columnar +citus_top_builddir = ../../.. +safestringlib_srcdir = $(citus_abs_top_srcdir)/vendor/safestringlib +SUBDIRS = . safeclib +SUBDIRS += +ENSURE_SUBDIRS_EXIST := $(shell mkdir -p $(SUBDIRS)) +OBJS += \ + $(patsubst $(citus_abs_srcdir)/%.c,%.o,$(foreach dir,$(SUBDIRS), $(sort $(wildcard $(citus_abs_srcdir)/$(dir)/*.c)))) + +MODULE_big = citus_columnar + +PG_CPPFLAGS += -I$(libpq_srcdir) -I$(safestringlib_srcdir)/include + +include $(citus_top_builddir)/Makefile.global + +.PHONY: install-all +install-all: install diff --git a/src/backend/columnar/columnar_debug.c b/src/backend/columnar/columnar_debug.c index f72ec5f8f..220d259fe 100644 --- a/src/backend/columnar/columnar_debug.c +++ b/src/backend/columnar/columnar_debug.c @@ -11,7 +11,6 @@ #include "postgres.h" #include "funcapi.h" -#include "pg_config.h" #include "access/nbtree.h" #include "access/table.h" #include "catalog/pg_am.h" diff --git a/src/backend/columnar/mod.c b/src/backend/columnar/mod.c index f2679f326..c064b54c6 100644 --- a/src/backend/columnar/mod.c +++ b/src/backend/columnar/mod.c @@ -22,8 +22,13 @@ #include "columnar/columnar_tableam.h" + +PG_MODULE_MAGIC; + +void _PG_init(void); + void -columnar_init(void) +_PG_init(void) { columnar_init_gucs(); columnar_tableam_init(); diff --git a/src/backend/columnar/safeclib b/src/backend/columnar/safeclib new file mode 120000 index 000000000..c4da5b7ad --- /dev/null +++ b/src/backend/columnar/safeclib @@ -0,0 +1 @@ +../../../vendor/safestringlib/safeclib/ \ No newline at end of file diff --git a/src/backend/distributed/Makefile b/src/backend/distributed/Makefile index a2ffcc142..b88d6b77f 100644 --- a/src/backend/distributed/Makefile +++ b/src/backend/distributed/Makefile @@ -19,8 +19,6 @@ DATA_built = $(generated_sql_files) # directories with source files SUBDIRS = . commands connection ddl deparser executor metadata operations planner progress relay safeclib test transaction utils worker -# columnar modules -SUBDIRS += ../columnar # enterprise modules SUBDIRS += @@ -39,9 +37,12 @@ all: NO_PGXS = 1 SHLIB_LINK = $(libpq) - +SHLIB_LINK_INTERNAL += -L../columnar -l:citus_columnar.so +override enable_rpath = yes include $(citus_top_builddir)/Makefile.global +rpathdir := $(shell $(PG_CONFIG) --libdir):$(shell $(PG_CONFIG) --pkglibdir) + # make sure citus_version.o is recompiled whenever any change is made to the binary or any # other artifact being installed to reflect the correct gitref for every build CITUS_VERSION_INVALIDATE := $(filter-out utils/citus_version.o,$(OBJS)) @@ -84,7 +85,8 @@ endif .PHONY: clean-full install install-downgrades install-all cleanup-before-install: - rm -f $(DESTDIR)$(datadir)/$(datamoduledir)/citus* + rm -f $(DESTDIR)$(datadir)/$(datamoduledir)/citus.control + rm -f $(DESTDIR)$(datadir)/$(datamoduledir)/citus--* install: cleanup-before-install diff --git a/src/backend/distributed/shared_library_init.c b/src/backend/distributed/shared_library_init.c index 7897cbefe..5e9d01e26 100644 --- a/src/backend/distributed/shared_library_init.c +++ b/src/backend/distributed/shared_library_init.c @@ -353,7 +353,13 @@ _PG_init(void) { DoInitialCleanup(); } - columnar_init(); + + /* + * For convenience and backwards compatibility, we avoid users having to add both + * citus and columnar to shared_preload_libraries by loading citus_columnar.so as part of + * loading citus.so. + */ + load_file(COLUMNAR_LIB_NAME, false); } diff --git a/src/include/columnar/mod.h b/src/include/columnar/mod.h index 7440a9fd7..7e24b3b6e 100644 --- a/src/include/columnar/mod.h +++ b/src/include/columnar/mod.h @@ -11,6 +11,7 @@ #ifndef MOD_H #define MOD_H +#define COLUMNAR_LIB_NAME "citus_columnar" /* Function declarations for extension loading and unloading */ extern void columnar_init(void);