From: Andres Freund Date: Fri, 26 Sep 2014 11:31:16 +0000 (+0200) Subject: bdr: Rework build/test infrastructure to better work as a out of tree module X-Git-Tag: bdr-plugin/dynconf-before-global-add~125 X-Git-Url: http://git.postgresql.org/gitweb/static/connections.php?a=commitdiff_plain;h=316922837012599c785979954b789d7fab1ca061;p=2ndquadrant_bdr.git bdr: Rework build/test infrastructure to better work as a out of tree module We now implicitly build using pgxs and have our own wrapper around pg_*regress to run make check without a sourcetree around. Also tests are based on a commonly included config file instead of duplicating things over and over. --- diff --git a/Makefile b/Makefile index 64bab5d53a..176fd3f371 100644 --- a/Makefile +++ b/Makefile @@ -12,7 +12,7 @@ SCRIPTS = scripts/bdr_initial_load bdr_init_copy PG_CPPFLAGS = -I$(libpq_srcdir) SHLIB_LINK = $(libpq) -SHLIB_PREREQS = submake-libpq + OBJS = \ bdr.o \ bdr_apply.o \ @@ -29,16 +29,12 @@ OBJS = \ bdr_relcache.o \ bdr_seq.o -ifndef USE_PGXS -subdir = contrib/bdr -top_builddir = ../.. -include $(top_builddir)/src/Makefile.global -include $(top_srcdir)/contrib/contrib-global.mk -else +# Can only be built using pgxs +USE_PGXS=1 + PG_CONFIG = pg_config PGXS := $(shell $(PG_CONFIG) --pgxs) include $(PGXS) -endif DATE=$(shell date "+%Y-%m-%d") GITHASH=$(shell if [ -e .distgitrev ]; then cat .distgitrev; else git rev-parse --short HEAD; fi) @@ -49,7 +45,7 @@ bdr_version.h: bdr_version.h.in bdr.o: bdr_version.h -bdr_init_copy: bdr_init_copy.o | submake-libpq submake-libpgport +bdr_init_copy: bdr_init_copy.o $(CC) $(CFLAGS) $^ $(LDFLAGS) $(LDFLAGS_EX) $(libpq_pgport) $(LIBS) -o $@$(X) scripts/bdr_initial_load: scripts/bdr_initial_load.in @@ -68,44 +64,12 @@ additional-clean: # typical installcheck users do not have (e.g. buildfarm clients). installcheck: ; -check: all | submake-regress submake-btree_gist submake-pg_trgm submake-cube submake-hstore regresscheck isolationcheck - -ifndef USE_PGXS -submake-regress: - $(MAKE) -C $(top_builddir)/src/test/regress - -submake-isolation: | submake-regress - $(MAKE) -C $(top_builddir)/src/test/isolation - -submake-btree_gist: - $(MAKE) -C $(top_builddir)/contrib/btree_gist - -submake-pg_trgm: - $(MAKE) -C $(top_builddir)/contrib/pg_trgm - -submake-cube: - $(MAKE) -C $(top_builddir)/contrib/cube - -submake-hstore: - $(MAKE) -C $(top_builddir)/contrib/hstore +check: regresscheck isolationcheck REGRESSCHECKS=init \ ddl/create ddl/alter_table ddl/extension ddl/function ddl/grant ddl/namespace ddl/sequence ddl/view \ dml/basic dml/contrib dml/delete_pk dml/extended dml/missing_pk dml/mixed dml/toasted -regresscheck: - [ -e pg_hba.conf ] || ln -s $(top_srcdir)/contrib/bdr/pg_hba.conf . - mkdir -p results/ddl - mkdir -p results/dml - $(pg_regress_check) \ - --temp-config $(top_srcdir)/contrib/bdr/bdr_ddlregress.conf \ - --temp-install=./tmp_check \ - --extra-install=contrib/btree_gist \ - --extra-install=contrib/bdr \ - --extra-install=contrib/pg_trgm \ - --extra-install=contrib/cube \ - --extra-install=contrib/hstore \ - $(REGRESSCHECKS) ISOLATIONCHECKS=\ isolation/waitforstart \ @@ -119,17 +83,27 @@ ISOLATIONCHECKS=\ # this test demonstrates a divergent conflict, so deactivate for now # isolation/update_pk_change_conflict -isolationcheck: all | submake-isolation submake-btree_gist +# XXX: Add a check that these are installed +REQUIRED_EXTENSIONS="btree_gist" +REQUIRED_TEST_EXTENSIONS="pg_trgm cube hstore" + +regresscheck: all install [ -e pg_hba.conf ] || ln -s $(top_srcdir)/contrib/bdr/pg_hba.conf . + + mkdir -p results/ddl + mkdir -p results/dml + + ./run_tests --config bdr_regress.conf \ + --testbinary src/test/regress/pg_regress \ + $(REGRESSCHECKS) + +isolationcheck: all install mkdir -p results/isolation - $(pg_isolation_regress_check) \ - --dbname node1,node2,node3 \ - --temp-config $(top_srcdir)/contrib/bdr/bdr_isolationregress.conf \ - --temp-install=./tmp_check \ - --extra-install=contrib/btree_gist \ - --extra-install=contrib/bdr \ - $(ISOLATIONCHECKS) + ./run_tests --config bdr_isolationregress.conf \ + --testbinary src/test/isolation/pg_isolation_regress \ + --dbname node1,node2,node3 \ + $(ISOLATIONCHECKS) bdr_pgbench_check: bdr_pgbench_check.sh sed -e 's,@bindir@,$(bindir),g' \ @@ -142,31 +116,6 @@ bdr_pgbench_check: bdr_pgbench_check.sh pgbenchcheck: bdr_pgbench_check ./bdr_pgbench_check -else #USE_PGXS - -error-pgxs: - @echo "Regression checks require an in-tree build in contrib/bdr" - @echo "You cannot run \"make check\" using pgxs" - exit 1 - -submake-regress: ; - -submake-btree_gist: ; - -submake-pg_trgm: ; - -submake-cube: ; - -submake-hstore: ; - -bdr_pgbench_check: error-pgxs - ; - -regresscheck: error-pgxs - ; - -endif #USE_PGXS - distdir = bdr-$(BDR_VERSION) git-dist: clean @@ -185,4 +134,4 @@ PHONY: submake-regress # phony target... -.PHONY: all check +.PHONY: all check regresscheck isolationcheck diff --git a/bdr_common_regress.conf b/bdr_common_regress.conf new file mode 100644 index 0000000000..fc672cb234 --- /dev/null +++ b/bdr_common_regress.conf @@ -0,0 +1,16 @@ +max_connections = 20 +max_wal_senders = 10 +max_replication_slots = 10 + +shared_preload_libraries = 'bdr' + +track_commit_timestamp = on + +wal_level = 'logical' +hba_file = 'pg_hba.conf' + +DateStyle = 'ISO, DMY' + +log_line_prefix='[%m] [%p] [%d] ' + +fsync=off diff --git a/bdr_ddlregress.conf b/bdr_ddlregress.conf deleted file mode 100644 index c39c6a8fd1..0000000000 --- a/bdr_ddlregress.conf +++ /dev/null @@ -1,25 +0,0 @@ -listen_addresses = '*' -max_connections = 20 - -shared_preload_libraries = 'bdr' -bdr.connections = 'node1, node2' - -bdr.node1_dsn = 'dbname=postgres' -bdr.node1_local_dbname = 'regression' - -bdr.node2_dsn = 'dbname=regression' -bdr.node2_local_dbname = 'postgres' - -bdr.permit_unsafe_ddl_commands = false - -track_commit_timestamp = on - -max_wal_senders = 10 -max_replication_slots = 10 - -wal_level = 'logical' -wal_keep_segments = 625 # roughly 9GB max - -hba_file = 'pg_hba.conf' - -DateStyle = 'ISO, DMY' diff --git a/bdr_isolationregress.conf b/bdr_isolationregress.conf index e5a6a29cc7..5aee77cc40 100644 --- a/bdr_isolationregress.conf +++ b/bdr_isolationregress.conf @@ -1,7 +1,5 @@ -listen_addresses = '*' -max_connections = 20 +include = 'bdr_common_regress.conf' -shared_preload_libraries = 'bdr' bdr.connections = 'node1to2,node1to3,node2to3,node2to1,node3to1,node3to2' bdr.node1to2_dsn = 'dbname=node2' @@ -23,22 +21,11 @@ bdr.node3to1_local_dbname = 'node3' bdr.node3to2_dsn = 'dbname=node2' bdr.node3to2_local_dbname = 'node3' -bdr.permit_unsafe_ddl_commands = false - bdr.log_conflicts_to_table = True bdr.default_apply_delay = 100 -track_commit_timestamp = on - -max_wal_senders = 10 -max_replication_slots = 10 - -wal_level = 'logical' - -hba_file = 'pg_hba.conf' - -log_min_messages = 'debug4' -log_line_prefix = 'd=%d p=%p a=%a%q ' +#log_min_messages = 'debug4' +#log_line_prefix = 'd=%d p=%p a=%a%q ' log_statement = 'all' max_worker_processes = 18 diff --git a/bdr_pgbench.conf b/bdr_pgbench.conf index 0a5885ab7c..67cfc57039 100644 --- a/bdr_pgbench.conf +++ b/bdr_pgbench.conf @@ -21,4 +21,3 @@ max_replication_slots = 10 checkpoint_segments = 50 wal_level = 'logical' -wal_keep_segments = 25 diff --git a/bdr_regress.conf b/bdr_regress.conf new file mode 100644 index 0000000000..845899fa75 --- /dev/null +++ b/bdr_regress.conf @@ -0,0 +1,9 @@ +include = 'bdr_common_regress.conf' +shared_preload_libraries = 'bdr' +bdr.connections = 'node1, node2' + +bdr.node1_dsn = 'dbname=postgres' +bdr.node1_local_dbname = 'regression' + +bdr.node2_dsn = 'dbname=regression' +bdr.node2_local_dbname = 'postgres' diff --git a/run_tests b/run_tests new file mode 100755 index 0000000000..0a762cc1ee --- /dev/null +++ b/run_tests @@ -0,0 +1,65 @@ +#!/bin/bash + +set -e +#set -x + +BINDIR=$(pg_config --bindir) +REGRESS_BASE=$(pg_config --libdir)/pgxs/ +DBNAME=regression + +mkdir -p tmp_check +rm -rf tmp_check/data +rm -rf tmp_check/postmaster.log +rm -rf tmp_check/initdb.log +mkdir tmp_check/data + +PARSEOPTS=$(getopt \ + --longoptions testbinary: \ + --longoptions dbname: \ + --longoptions config: \ + -o 'h' -- "$@") + +eval set -- "$PARSEOPTS" + + +usage() { + echo "run_tests -h --testbinary binary LIST OF TESTS" + exit 1 +} + +while true ; do + case "$1" in + -h) usage; shift;; + --testbinary) TESTBINARY="$2"; shift;shift;; + --dbname) DBNAME="$2"; shift;shift;; + --config) CONFIGFILE="$2"; shift;shift;; + --) shift ; break ;; + *) echo "unknown option $1"; exit 1;; + esac +done + +SOCKET=$(pwd)/tmp_check +PORT=5440 +OPTIONS="-c config_file=${CONFIGFILE}" +OPTIONS="$OPTIONS -c unix_socket_directories=$SOCKET" +OPTIONS="$OPTIONS -c listen_addresses=''" + +PGHOST=$SOCKET +PGPORT=$PORT + +# create new data directory +$BINDIR/initdb --nosync tmp_check/data > tmp_check/initdb.log 2>&1 + +# install trap to shutdown server at failure/exit +trap "$BINDIR/pg_ctl stop -w -D tmp_check/data" INT QUIT TERM EXIT + +#start server +$BINDIR/pg_ctl start -w -D tmp_check/data -o "$OPTIONS" -l tmp_check/postmaster.log + +$REGRESS_BASE/$TESTBINARY \ + --host $SOCKET \ + --port $PORT \ + --dbname $DBNAME \ + "$@" + +exit 0