Re: multi-install PostgresNode
От | Andrew Dunstan |
---|---|
Тема | Re: multi-install PostgresNode |
Дата | |
Msg-id | b45a6f32-29d3-afe8-e4de-3e13bad884ad@dunslane.net обсуждение исходный текст |
Ответ на | Re: multi-install PostgresNode (Andrew Dunstan <andrew@dunslane.net>) |
Ответы |
Re: multi-install PostgresNode
|
Список | pgsql-hackers |
On 3/23/21 7:09 PM, Andrew Dunstan wrote: > On 3/23/21 6:36 PM, Michael Paquier wrote: >> On Thu, Jan 28, 2021 at 10:19:57AM -0500, Andrew Dunstan wrote: >>> +BEGIN >>> +{ >>> + >>> + # putting this in a BEGIN block means it's run and checked by perl -c >>> + >>> + >>> + # everything other than info and get_new_node that we need to override. >>> + # they are all instance methods, so we can use the same template for all. >>> + my @instance_overrides = qw(init backup start kill9 stop reload restart >>> + promote logrotate safe_psql psql background_psql >>> + interactive_psql poll_query_until command_ok >>> + command_fails command_like command_checks_all >>> + issues_sql_like run_log pg_recvlogical_upto >>> + ); >> No actual objections here, but it would be easy to miss the addition >> of a new routine. Would an exclusion filter be more adapted, aka >> override everything except get_new_node() and info()? > > > Actually, following a brief offline discussion today I've thought of a > way that doesn't require subclassing. Will post that probably tomorrow. > And here it is. No subclass, no eval, no magic :-) Some of my colleagues are a lot happier ;-) The downside is that we need to litter PostgresNode with a bunch of lines like: local %ENV = %ENV; _set_install_env($self); The upside is that there's no longer a possibility that someone will add a new routine to PostgresNode and forget to update the subclass. Here is my simple test program: #!/usr/bin/perl use lib '/home/andrew/pgl/pg_head/src/test/perl'; # PostgresNode (via TestLib) hijacks stdout, so make a dup before it gets a chance use vars qw($out); BEGIN { open ($out, ">&STDOUT"); } use PostgresNode; my $node = PostgresNode->get_new_node('v12', install_path => '/home/andrew/pgl/inst.12.5711'); $ENV{PG_REGRESS} = '/bin/true'; # stupid but necessary $node->init(); $node->start(); my $version = $node->safe_psql('postgres', 'select version()'); $node->stop(); print $out "Version: $version\n"; print $out $node->info(); cheers andrew -- Andrew Dunstan EDB: https://www.enterprisedb.com
Вложения
В списке pgsql-hackers по дате отправления: