Thread: pgsql: Add mode where contrib installcheck runs each module in a separa

pgsql: Add mode where contrib installcheck runs each module in a separa

From
Andrew Dunstan
Date:
Add mode where contrib installcheck runs each module in a separately named database.

Normally each module is tested in aq database named contrib_regression,
which is dropped and recreated at the beginhning of each pg_regress run.
This mode, enabled by adding USE_MODULE_DB=1 to the make command line,
runs most modules in a database with the module name embedded in it.

This will make testing pg_upgrade on clusters with the contrib modules
a lot easier.

Still to be done: adapt to the MSVC build system.

Backpatch to 9.0, which is the earliest version it is reasonably
possible to test upgrading from.

Branch
------
REL9_0_STABLE

Details
-------
http://git.postgresql.org/pg/commitdiff/c8f666abde2af3060af41afe4b03ced2f62d94a9

Modified Files
--------------
contrib/dblink/Makefile |    3 +++
src/Makefile.global.in  |    9 +++++++++
src/makefiles/pgxs.mk   |    6 +++++-
3 files changed, 17 insertions(+), 1 deletions(-)


Re: pgsql: Add mode where contrib installcheck runs each module in a separa

From
Alvaro Herrera
Date:
Andrew Dunstan wrote:
> Add mode where contrib installcheck runs each module in a separately named database.
>
> Normally each module is tested in aq database named contrib_regression,
> which is dropped and recreated at the beginhning of each pg_regress run.
> This mode, enabled by adding USE_MODULE_DB=1 to the make command line,
> runs most modules in a database with the module name embedded in it.

I'm seeing this when building contrib/dblink:

$ LC_ALL=C make
Makefile:15: invalid `override' directive

$ LC_ALL=C !!
LC_ALL=C make --version
GNU Make 3.81
Copyright (C) 2006  Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.

This program built for x86_64-pc-linux-gnu


It doesn't work (note the DB name in the command line):

$ LC_ALL=C make USE_MODULE_DB=q installcheck
Makefile:15: invalid `override' directive
make -C ../../src/test/regress pg_regress
make[1]: Entering directory `/home/alvherre/Code/pgsql/build/bgworker/src/test/regress'
make -C ../../../src/port all
make[2]: Entering directory `/home/alvherre/Code/pgsql/build/bgworker/src/port'
make -C ../backend submake-errcodes
make[3]: Entering directory `/home/alvherre/Code/pgsql/build/bgworker/src/backend'
make[3]: Nothing to be done for `submake-errcodes'.
make[3]: Leaving directory `/home/alvherre/Code/pgsql/build/bgworker/src/backend'
make[2]: Leaving directory `/home/alvherre/Code/pgsql/build/bgworker/src/port'
make[1]: Leaving directory `/home/alvherre/Code/pgsql/build/bgworker/src/test/regress'
../../src/test/regress/pg_regress --inputdir=/pgsql/source/bgworker/contrib/dblink
--psqldir='/pgsql/install/bgworker/bin'  --dbname=contrib_regression_dblink dblink 
(using postmaster on Unix socket, default port)
============== dropping database "contrib_regression_dblink" ==============
psql: could not connect to server: No such file or directory
        Is the server running locally and accepting
        connections on Unix domain socket "/tmp/.s.PGSQL.55440"?
command failed: "/pgsql/install/bgworker/bin/psql" -X -c "DROP DATABASE IF EXISTS \"contrib_regression_dblink\""
"postgres"
make: *** [installcheck] Error 2

--
Álvaro Herrera                http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Training & Services


Re: pgsql: Add mode where contrib installcheck runs each module in a separa

From
Andrew Dunstan
Date:
On 12/03/2012 01:45 PM, Alvaro Herrera wrote:
> Andrew Dunstan wrote:
>> Add mode where contrib installcheck runs each module in a separately named database.
>>
>> Normally each module is tested in aq database named contrib_regression,
>> which is dropped and recreated at the beginhning of each pg_regress run.
>> This mode, enabled by adding USE_MODULE_DB=1 to the make command line,
>> runs most modules in a database with the module name embedded in it.
> I'm seeing this when building contrib/dblink:
>
> $ LC_ALL=C make
> Makefile:15: invalid `override' directive
>
> $ LC_ALL=C !!
> LC_ALL=C make --version
> GNU Make 3.81
> Copyright (C) 2006  Free Software Foundation, Inc.
> This is free software; see the source for copying conditions.
> There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
> PARTICULAR PURPOSE.
>
> This program built for x86_64-pc-linux-gnu
>
>
> It doesn't work (note the DB name in the command line):
>
> $ LC_ALL=C make USE_MODULE_DB=q installcheck
> Makefile:15: invalid `override' directive
> make -C ../../src/test/regress pg_regress
> make[1]: Entering directory `/home/alvherre/Code/pgsql/build/bgworker/src/test/regress'
> make -C ../../../src/port all
> make[2]: Entering directory `/home/alvherre/Code/pgsql/build/bgworker/src/port'
> make -C ../backend submake-errcodes
> make[3]: Entering directory `/home/alvherre/Code/pgsql/build/bgworker/src/backend'
> make[3]: Nothing to be done for `submake-errcodes'.
> make[3]: Leaving directory `/home/alvherre/Code/pgsql/build/bgworker/src/backend'
> make[2]: Leaving directory `/home/alvherre/Code/pgsql/build/bgworker/src/port'
> make[1]: Leaving directory `/home/alvherre/Code/pgsql/build/bgworker/src/test/regress'
> ../../src/test/regress/pg_regress --inputdir=/pgsql/source/bgworker/contrib/dblink
--psqldir='/pgsql/install/bgworker/bin'  --dbname=contrib_regression_dblink dblink 
> (using postmaster on Unix socket, default port)
> ============== dropping database "contrib_regression_dblink" ==============
> psql: could not connect to server: No such file or directory
>          Is the server running locally and accepting
>          connections on Unix domain socket "/tmp/.s.PGSQL.55440"?
> command failed: "/pgsql/install/bgworker/bin/psql" -X -c "DROP DATABASE IF EXISTS \"contrib_regression_dblink\""
"postgres"
> make: *** [installcheck] Error 2
>


Well, you seem to have more problems than just the database name.

This seems rather odd, though. What more can you tell us about the
platform etc.? I note you have "USE_MODULE_DB=q" where I'm using
"USE_MODULE_DB=1". Do you get the same failure when you don't define
USE_MODULE_DB?

cheers

andrew


Re: pgsql: Add mode where contrib installcheck runs each module in a separa

From
Alvaro Herrera
Date:
Andrew Dunstan wrote:

> On 12/03/2012 01:45 PM, Alvaro Herrera wrote:

> >../../src/test/regress/pg_regress --inputdir=/pgsql/source/bgworker/contrib/dblink
--psqldir='/pgsql/install/bgworker/bin'  --dbname=contrib_regression_dblink dblink 
> >(using postmaster on Unix socket, default port)
> >============== dropping database "contrib_regression_dblink" ==============
> >psql: could not connect to server: No such file or directory
> >         Is the server running locally and accepting
> >         connections on Unix domain socket "/tmp/.s.PGSQL.55440"?
> >command failed: "/pgsql/install/bgworker/bin/psql" -X -c "DROP DATABASE IF EXISTS \"contrib_regression_dblink\""
"postgres"
> >make: *** [installcheck] Error 2
>
> Well, you seem to have more problems than just the database name.

Obviously I didn't have the server running at that point, but surely
that's not relevant; what I'm pointing out is that make is not taking
notice of the variable override.

> This seems rather odd, though. What more can you tell us about the
> platform etc.?

This is Debian Squeeze running on amd64.  There's nothing really odd
about it; it's my everyday platform.

> I note you have "USE_MODULE_DB=q" where I'm using
> "USE_MODULE_DB=1". Do you get the same failure when you don't define
> USE_MODULE_DB?

Yes.  I wasn't testing this patch, and I wasn't testing pg_upgrade
either; I was just running a full rebuild and noticed that message.
So initially I obviously hadn't set any variable at all.

I cleaned up everything up including autoconf cache, removed VPATH build
dir, git clean -dfx, and it's still there.

--
Álvaro Herrera                http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Training & Services


Re: pgsql: Add mode where contrib installcheck runs each module in a separa

From
Tom Lane
Date:
Andrew Dunstan <andrew@dunslane.net> writes:
> On 12/03/2012 01:45 PM, Alvaro Herrera wrote:
>> $ LC_ALL=C make
>> Makefile:15: invalid `override' directive

> Well, you seem to have more problems than just the database name.

I see this too.  Given that I want to wrap the back branches in a few
minutes, please revert at least in the back branches.  I can't wait
for you to sort this out.

            regards, tom lane


Re: pgsql: Add mode where contrib installcheck runs each module in a separa

From
Andrew Dunstan
Date:
On 12/03/2012 02:46 PM, Tom Lane wrote:
> Andrew Dunstan <andrew@dunslane.net> writes:
>> On 12/03/2012 01:45 PM, Alvaro Herrera wrote:
>>> $ LC_ALL=C make
>>> Makefile:15: invalid `override' directive
>> Well, you seem to have more problems than just the database name.
> I see this too.  Given that I want to wrap the back branches in a few
> minutes, please revert at least in the back branches.  I can't wait
> for you to sort this out.
>
>


OK. I reverted the lot.

will do.

cheers

andrew



Re: pgsql: Add mode where contrib installcheck runs each module in a separa

From
Tom Lane
Date:
Andrew Dunstan <andrew@dunslane.net> writes:
> On 12/03/2012 02:46 PM, Tom Lane wrote:
>> I see this too.  Given that I want to wrap the back branches in a few
>> minutes, please revert at least in the back branches.  I can't wait
>> for you to sort this out.

> OK. I reverted the lot.

Thanks, appreciate it.  I'll help look into the problem late tonight,
if it's not sorted by then, but I have no time right now ...

            regards, tom lane


Re: pgsql: Add mode where contrib installcheck runs each module in a separa

From
Andrew Dunstan
Date:
On 12/03/2012 03:11 PM, Tom Lane wrote:
> Andrew Dunstan <andrew@dunslane.net> writes:
>> On 12/03/2012 02:46 PM, Tom Lane wrote:
>>> I see this too.  Given that I want to wrap the back branches in a few
>>> minutes, please revert at least in the back branches.  I can't wait
>>> for you to sort this out.
>> OK. I reverted the lot.
> Thanks, appreciate it.  I'll help look into the problem late tonight,
> if it's not sorted by then, but I have no time right now ...


Looks like undefine is a new feature in gmake 3.82. I can reproduce this
on my SL6 box which has 3.81. I'll have to come up with something other
than ifdef, like

     ifneq ($(USE_MODULE_DB),)

and use the override in dblink's Makefile to set it to the empty string.


cheers

andrew