PostgresNode: Add names to nodes
This makes the log files easier to follow when investigating a test failure. Author: Michael Paquier Review: Noah Misch
This commit is contained in:
parent
216d568432
commit
c8642d909f
|
@ -12,7 +12,7 @@ program_options_handling_ok('pg_basebackup');
|
||||||
|
|
||||||
my $tempdir = TestLib::tempdir;
|
my $tempdir = TestLib::tempdir;
|
||||||
|
|
||||||
my $node = get_new_node();
|
my $node = get_new_node('main');
|
||||||
|
|
||||||
# Initialize node without replication settings
|
# Initialize node without replication settings
|
||||||
$node->init(hba_permit_replication => 0);
|
$node->init(hba_permit_replication => 0);
|
||||||
|
|
|
@ -11,7 +11,7 @@ command_fails(['pg_controldata'], 'pg_controldata without arguments fails');
|
||||||
command_fails([ 'pg_controldata', 'nonexistent' ],
|
command_fails([ 'pg_controldata', 'nonexistent' ],
|
||||||
'pg_controldata with nonexistent directory fails');
|
'pg_controldata with nonexistent directory fails');
|
||||||
|
|
||||||
my $node = get_new_node();
|
my $node = get_new_node('main');
|
||||||
$node->init;
|
$node->init;
|
||||||
|
|
||||||
command_like([ 'pg_controldata', $node->data_dir ],
|
command_like([ 'pg_controldata', $node->data_dir ],
|
||||||
|
|
|
@ -11,7 +11,7 @@ my $tempdir_short = TestLib::tempdir_short;
|
||||||
command_exit_is([ 'pg_ctl', 'status', '-D', "$tempdir/nonexistent" ],
|
command_exit_is([ 'pg_ctl', 'status', '-D', "$tempdir/nonexistent" ],
|
||||||
4, 'pg_ctl status with nonexistent directory');
|
4, 'pg_ctl status with nonexistent directory');
|
||||||
|
|
||||||
my $node = get_new_node();
|
my $node = get_new_node('main');
|
||||||
$node->init;
|
$node->init;
|
||||||
|
|
||||||
command_exit_is([ 'pg_ctl', 'status', '-D', $node->data_dir ],
|
command_exit_is([ 'pg_ctl', 'status', '-D', $node->data_dir ],
|
||||||
|
|
|
@ -116,7 +116,7 @@ sub setup_cluster
|
||||||
{
|
{
|
||||||
|
|
||||||
# Initialize master, data checksums are mandatory
|
# Initialize master, data checksums are mandatory
|
||||||
$node_master = get_new_node();
|
$node_master = get_new_node('master');
|
||||||
$node_master->init;
|
$node_master->init;
|
||||||
|
|
||||||
# Custom parameters for master's postgresql.conf
|
# Custom parameters for master's postgresql.conf
|
||||||
|
@ -144,7 +144,7 @@ sub start_master
|
||||||
|
|
||||||
sub create_standby
|
sub create_standby
|
||||||
{
|
{
|
||||||
$node_standby = get_new_node();
|
$node_standby = get_new_node('standby');
|
||||||
$node_master->backup('my_backup');
|
$node_master->backup('my_backup');
|
||||||
$node_standby->init_from_backup($node_master, 'my_backup');
|
$node_standby->init_from_backup($node_master, 'my_backup');
|
||||||
my $connstr_master = $node_master->connstr('postgres');
|
my $connstr_master = $node_master->connstr('postgres');
|
||||||
|
|
|
@ -9,7 +9,7 @@ program_help_ok('clusterdb');
|
||||||
program_version_ok('clusterdb');
|
program_version_ok('clusterdb');
|
||||||
program_options_handling_ok('clusterdb');
|
program_options_handling_ok('clusterdb');
|
||||||
|
|
||||||
my $node = get_new_node();
|
my $node = get_new_node('main');
|
||||||
$node->init;
|
$node->init;
|
||||||
$node->start;
|
$node->start;
|
||||||
|
|
||||||
|
|
|
@ -5,7 +5,7 @@ use PostgresNode;
|
||||||
use TestLib;
|
use TestLib;
|
||||||
use Test::More tests => 2;
|
use Test::More tests => 2;
|
||||||
|
|
||||||
my $node = get_new_node();
|
my $node = get_new_node('main');
|
||||||
$node->init;
|
$node->init;
|
||||||
$node->start;
|
$node->start;
|
||||||
|
|
||||||
|
|
|
@ -9,7 +9,7 @@ program_help_ok('createdb');
|
||||||
program_version_ok('createdb');
|
program_version_ok('createdb');
|
||||||
program_options_handling_ok('createdb');
|
program_options_handling_ok('createdb');
|
||||||
|
|
||||||
my $node = get_new_node();
|
my $node = get_new_node('main');
|
||||||
$node->init;
|
$node->init;
|
||||||
$node->start;
|
$node->start;
|
||||||
|
|
||||||
|
|
|
@ -9,7 +9,7 @@ program_help_ok('createlang');
|
||||||
program_version_ok('createlang');
|
program_version_ok('createlang');
|
||||||
program_options_handling_ok('createlang');
|
program_options_handling_ok('createlang');
|
||||||
|
|
||||||
my $node = get_new_node();
|
my $node = get_new_node('main');
|
||||||
$node->init;
|
$node->init;
|
||||||
$node->start;
|
$node->start;
|
||||||
|
|
||||||
|
|
|
@ -9,7 +9,7 @@ program_help_ok('createuser');
|
||||||
program_version_ok('createuser');
|
program_version_ok('createuser');
|
||||||
program_options_handling_ok('createuser');
|
program_options_handling_ok('createuser');
|
||||||
|
|
||||||
my $node = get_new_node();
|
my $node = get_new_node('main');
|
||||||
$node->init;
|
$node->init;
|
||||||
$node->start;
|
$node->start;
|
||||||
|
|
||||||
|
|
|
@ -9,7 +9,7 @@ program_help_ok('dropdb');
|
||||||
program_version_ok('dropdb');
|
program_version_ok('dropdb');
|
||||||
program_options_handling_ok('dropdb');
|
program_options_handling_ok('dropdb');
|
||||||
|
|
||||||
my $node = get_new_node();
|
my $node = get_new_node('main');
|
||||||
$node->init;
|
$node->init;
|
||||||
$node->start;
|
$node->start;
|
||||||
|
|
||||||
|
|
|
@ -9,7 +9,7 @@ program_help_ok('droplang');
|
||||||
program_version_ok('droplang');
|
program_version_ok('droplang');
|
||||||
program_options_handling_ok('droplang');
|
program_options_handling_ok('droplang');
|
||||||
|
|
||||||
my $node = get_new_node();
|
my $node = get_new_node('main');
|
||||||
$node->init;
|
$node->init;
|
||||||
$node->start;
|
$node->start;
|
||||||
|
|
||||||
|
|
|
@ -9,7 +9,7 @@ program_help_ok('dropuser');
|
||||||
program_version_ok('dropuser');
|
program_version_ok('dropuser');
|
||||||
program_options_handling_ok('dropuser');
|
program_options_handling_ok('dropuser');
|
||||||
|
|
||||||
my $node = get_new_node();
|
my $node = get_new_node('main');
|
||||||
$node->init;
|
$node->init;
|
||||||
$node->start;
|
$node->start;
|
||||||
|
|
||||||
|
|
|
@ -11,7 +11,7 @@ program_options_handling_ok('pg_isready');
|
||||||
|
|
||||||
command_fails(['pg_isready'], 'fails with no server running');
|
command_fails(['pg_isready'], 'fails with no server running');
|
||||||
|
|
||||||
my $node = get_new_node();
|
my $node = get_new_node('main');
|
||||||
$node->init;
|
$node->init;
|
||||||
$node->start;
|
$node->start;
|
||||||
|
|
||||||
|
|
|
@ -9,7 +9,7 @@ program_help_ok('reindexdb');
|
||||||
program_version_ok('reindexdb');
|
program_version_ok('reindexdb');
|
||||||
program_options_handling_ok('reindexdb');
|
program_options_handling_ok('reindexdb');
|
||||||
|
|
||||||
my $node = get_new_node();
|
my $node = get_new_node('main');
|
||||||
$node->init;
|
$node->init;
|
||||||
$node->start;
|
$node->start;
|
||||||
|
|
||||||
|
|
|
@ -4,7 +4,7 @@ use warnings;
|
||||||
use PostgresNode;
|
use PostgresNode;
|
||||||
use Test::More tests => 2;
|
use Test::More tests => 2;
|
||||||
|
|
||||||
my $node = get_new_node();
|
my $node = get_new_node('main');
|
||||||
$node->init;
|
$node->init;
|
||||||
$node->start;
|
$node->start;
|
||||||
|
|
||||||
|
|
|
@ -9,7 +9,7 @@ program_help_ok('vacuumdb');
|
||||||
program_version_ok('vacuumdb');
|
program_version_ok('vacuumdb');
|
||||||
program_options_handling_ok('vacuumdb');
|
program_options_handling_ok('vacuumdb');
|
||||||
|
|
||||||
my $node = get_new_node();
|
my $node = get_new_node('main');
|
||||||
$node->init;
|
$node->init;
|
||||||
$node->start;
|
$node->start;
|
||||||
|
|
||||||
|
|
|
@ -4,7 +4,7 @@ use warnings;
|
||||||
use PostgresNode;
|
use PostgresNode;
|
||||||
use Test::More tests => 2;
|
use Test::More tests => 2;
|
||||||
|
|
||||||
my $node = get_new_node();
|
my $node = get_new_node('main');
|
||||||
$node->init;
|
$node->init;
|
||||||
$node->start;
|
$node->start;
|
||||||
|
|
||||||
|
|
|
@ -4,7 +4,7 @@ use warnings;
|
||||||
use PostgresNode;
|
use PostgresNode;
|
||||||
use Test::More tests => 4;
|
use Test::More tests => 4;
|
||||||
|
|
||||||
my $node = get_new_node();
|
my $node = get_new_node('main');
|
||||||
$node->init;
|
$node->init;
|
||||||
$node->start;
|
$node->start;
|
||||||
|
|
||||||
|
|
|
@ -43,6 +43,7 @@ INIT
|
||||||
sub new
|
sub new
|
||||||
{
|
{
|
||||||
my $class = shift;
|
my $class = shift;
|
||||||
|
my $name = shift;
|
||||||
my $pghost = shift;
|
my $pghost = shift;
|
||||||
my $pgport = shift;
|
my $pgport = shift;
|
||||||
my $testname = basename($0);
|
my $testname = basename($0);
|
||||||
|
@ -51,8 +52,8 @@ sub new
|
||||||
_port => $pgport,
|
_port => $pgport,
|
||||||
_host => $pghost,
|
_host => $pghost,
|
||||||
_basedir => TestLib::tempdir,
|
_basedir => TestLib::tempdir,
|
||||||
_applname => "node_$pgport",
|
_name => $name,
|
||||||
_logfile => "$TestLib::log_path/${testname}_node_${pgport}.log" };
|
_logfile => "$TestLib::log_path/${testname}_${name}.log" };
|
||||||
|
|
||||||
bless $self, $class;
|
bless $self, $class;
|
||||||
$self->dump_info;
|
$self->dump_info;
|
||||||
|
@ -78,10 +79,10 @@ sub basedir
|
||||||
return $self->{_basedir};
|
return $self->{_basedir};
|
||||||
}
|
}
|
||||||
|
|
||||||
sub applname
|
sub name
|
||||||
{
|
{
|
||||||
my ($self) = @_;
|
my ($self) = @_;
|
||||||
return $self->{_applname};
|
return $self->{_name};
|
||||||
}
|
}
|
||||||
|
|
||||||
sub logfile
|
sub logfile
|
||||||
|
@ -127,11 +128,11 @@ sub backup_dir
|
||||||
sub dump_info
|
sub dump_info
|
||||||
{
|
{
|
||||||
my ($self) = @_;
|
my ($self) = @_;
|
||||||
|
print "Name: " . $self->name . "\n";
|
||||||
print "Data directory: " . $self->data_dir . "\n";
|
print "Data directory: " . $self->data_dir . "\n";
|
||||||
print "Backup directory: " . $self->backup_dir . "\n";
|
print "Backup directory: " . $self->backup_dir . "\n";
|
||||||
print "Archive directory: " . $self->archive_dir . "\n";
|
print "Archive directory: " . $self->archive_dir . "\n";
|
||||||
print "Connection string: " . $self->connstr . "\n";
|
print "Connection string: " . $self->connstr . "\n";
|
||||||
print "Application name: " . $self->applname . "\n";
|
|
||||||
print "Log file: " . $self->logfile . "\n";
|
print "Log file: " . $self->logfile . "\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -178,7 +179,7 @@ sub init
|
||||||
TestLib::system_or_bail($ENV{PG_REGRESS}, '--config-auth', $pgdata);
|
TestLib::system_or_bail($ENV{PG_REGRESS}, '--config-auth', $pgdata);
|
||||||
|
|
||||||
open my $conf, ">>$pgdata/postgresql.conf";
|
open my $conf, ">>$pgdata/postgresql.conf";
|
||||||
print $conf "\n# Added by PostgresNode.pm)\n";
|
print $conf "\n# Added by PostgresNode.pm\n";
|
||||||
print $conf "fsync = off\n";
|
print $conf "fsync = off\n";
|
||||||
print $conf "log_statement = all\n";
|
print $conf "log_statement = all\n";
|
||||||
print $conf "port = $port\n";
|
print $conf "port = $port\n";
|
||||||
|
@ -210,8 +211,9 @@ sub backup
|
||||||
my ($self, $backup_name) = @_;
|
my ($self, $backup_name) = @_;
|
||||||
my $backup_path = $self->backup_dir . '/' . $backup_name;
|
my $backup_path = $self->backup_dir . '/' . $backup_name;
|
||||||
my $port = $self->port;
|
my $port = $self->port;
|
||||||
|
my $name = $self->name;
|
||||||
|
|
||||||
print "# Taking backup $backup_name from node with port $port\n";
|
print "# Taking backup $backup_name from node \"$name\"\n";
|
||||||
TestLib::system_or_bail("pg_basebackup -D $backup_path -p $port -x");
|
TestLib::system_or_bail("pg_basebackup -D $backup_path -p $port -x");
|
||||||
print "# Backup finished\n";
|
print "# Backup finished\n";
|
||||||
}
|
}
|
||||||
|
@ -221,11 +223,13 @@ sub init_from_backup
|
||||||
my ($self, $root_node, $backup_name) = @_;
|
my ($self, $root_node, $backup_name) = @_;
|
||||||
my $backup_path = $root_node->backup_dir . '/' . $backup_name;
|
my $backup_path = $root_node->backup_dir . '/' . $backup_name;
|
||||||
my $port = $self->port;
|
my $port = $self->port;
|
||||||
my $root_port = $root_node->port;
|
my $node_name = $self->name;
|
||||||
|
my $root_name = $root_node->name;
|
||||||
|
|
||||||
print
|
print
|
||||||
"Initializing node $port from backup \"$backup_name\" of node $root_port\n";
|
"# Initializing node \"$node_name\" from backup \"$backup_name\" of node \"$root_name\"\n";
|
||||||
die "Backup $backup_path does not exist" unless -d $backup_path;
|
die "Backup \"$backup_name\" does not exist at $backup_path"
|
||||||
|
unless -d $backup_path;
|
||||||
|
|
||||||
mkdir $self->backup_dir;
|
mkdir $self->backup_dir;
|
||||||
mkdir $self->archive_dir;
|
mkdir $self->archive_dir;
|
||||||
|
@ -249,7 +253,8 @@ sub start
|
||||||
my ($self) = @_;
|
my ($self) = @_;
|
||||||
my $port = $self->port;
|
my $port = $self->port;
|
||||||
my $pgdata = $self->data_dir;
|
my $pgdata = $self->data_dir;
|
||||||
print("### Starting test server in $pgdata\n");
|
my $name = $self->name;
|
||||||
|
print("### Starting node \"$name\"\n");
|
||||||
my $ret = TestLib::system_log('pg_ctl', '-w', '-D', $self->data_dir, '-l',
|
my $ret = TestLib::system_log('pg_ctl', '-w', '-D', $self->data_dir, '-l',
|
||||||
$self->logfile, 'start');
|
$self->logfile, 'start');
|
||||||
|
|
||||||
|
@ -261,7 +266,6 @@ sub start
|
||||||
}
|
}
|
||||||
|
|
||||||
$self->_update_pid;
|
$self->_update_pid;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sub stop
|
sub stop
|
||||||
|
@ -269,8 +273,9 @@ sub stop
|
||||||
my ($self, $mode) = @_;
|
my ($self, $mode) = @_;
|
||||||
my $port = $self->port;
|
my $port = $self->port;
|
||||||
my $pgdata = $self->data_dir;
|
my $pgdata = $self->data_dir;
|
||||||
|
my $name = $self->name;
|
||||||
$mode = 'fast' if (!defined($mode));
|
$mode = 'fast' if (!defined($mode));
|
||||||
print "### Stopping node in $pgdata with port $port using mode $mode\n";
|
print "### Stopping node \"$name\" using mode $mode\n";
|
||||||
TestLib::system_log('pg_ctl', '-D', $pgdata, '-m', $mode, 'stop');
|
TestLib::system_log('pg_ctl', '-D', $pgdata, '-m', $mode, 'stop');
|
||||||
$self->{_pid} = undef;
|
$self->{_pid} = undef;
|
||||||
$self->_update_pid;
|
$self->_update_pid;
|
||||||
|
@ -282,6 +287,8 @@ sub restart
|
||||||
my $port = $self->port;
|
my $port = $self->port;
|
||||||
my $pgdata = $self->data_dir;
|
my $pgdata = $self->data_dir;
|
||||||
my $logfile = $self->logfile;
|
my $logfile = $self->logfile;
|
||||||
|
my $name = $self->name;
|
||||||
|
print "### Restarting node \"$name\"\n";
|
||||||
TestLib::system_log('pg_ctl', '-D', $pgdata, '-w', '-l', $logfile,
|
TestLib::system_log('pg_ctl', '-D', $pgdata, '-w', '-l', $logfile,
|
||||||
'restart');
|
'restart');
|
||||||
$self->_update_pid;
|
$self->_update_pid;
|
||||||
|
@ -290,6 +297,7 @@ sub restart
|
||||||
sub _update_pid
|
sub _update_pid
|
||||||
{
|
{
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
my $name = $self->name;
|
||||||
|
|
||||||
# If we can open the PID file, read its first line and that's the PID we
|
# If we can open the PID file, read its first line and that's the PID we
|
||||||
# want. If the file cannot be opened, presumably the server is not
|
# want. If the file cannot be opened, presumably the server is not
|
||||||
|
@ -297,7 +305,7 @@ sub _update_pid
|
||||||
if (open my $pidfile, $self->data_dir . "/postmaster.pid")
|
if (open my $pidfile, $self->data_dir . "/postmaster.pid")
|
||||||
{
|
{
|
||||||
chomp($self->{_pid} = <$pidfile>);
|
chomp($self->{_pid} = <$pidfile>);
|
||||||
print "# Postmaster PID is $self->{_pid}\n";
|
print "# Postmaster PID for node \"$name\" is $self->{_pid}\n";
|
||||||
close $pidfile;
|
close $pidfile;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -316,6 +324,7 @@ sub _update_pid
|
||||||
# for another node even when this one is not active.
|
# for another node even when this one is not active.
|
||||||
sub get_new_node
|
sub get_new_node
|
||||||
{
|
{
|
||||||
|
my $name = shift;
|
||||||
my $found = 0;
|
my $found = 0;
|
||||||
my $port = $last_port_assigned;
|
my $port = $last_port_assigned;
|
||||||
|
|
||||||
|
@ -340,7 +349,7 @@ sub get_new_node
|
||||||
print "# Found free port $port\n";
|
print "# Found free port $port\n";
|
||||||
|
|
||||||
# Lock port number found by creating a new node
|
# Lock port number found by creating a new node
|
||||||
my $node = new PostgresNode($test_pghost, $port);
|
my $node = new PostgresNode($name, $test_pghost, $port);
|
||||||
|
|
||||||
# Add node to list of nodes
|
# Add node to list of nodes
|
||||||
push(@all_nodes, $node);
|
push(@all_nodes, $node);
|
||||||
|
@ -354,8 +363,9 @@ sub get_new_node
|
||||||
sub DESTROY
|
sub DESTROY
|
||||||
{
|
{
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
my $name = $self->name;
|
||||||
return if not defined $self->{_pid};
|
return if not defined $self->{_pid};
|
||||||
print "# signalling QUIT to $self->{_pid}\n";
|
print "### Signalling QUIT to $self->{_pid} for node \"$name\"\n";
|
||||||
TestLib::system_log('pg_ctl', 'kill', 'QUIT', $self->{_pid});
|
TestLib::system_log('pg_ctl', 'kill', 'QUIT', $self->{_pid});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -371,7 +381,8 @@ sub psql
|
||||||
my ($self, $dbname, $sql) = @_;
|
my ($self, $dbname, $sql) = @_;
|
||||||
|
|
||||||
my ($stdout, $stderr);
|
my ($stdout, $stderr);
|
||||||
print("# Running SQL command: $sql\n");
|
my $name = $self->name;
|
||||||
|
print("### Running SQL command on node \"$name\": $sql\n");
|
||||||
|
|
||||||
IPC::Run::run [ 'psql', '-XAtq', '-d', $self->connstr($dbname), '-f',
|
IPC::Run::run [ 'psql', '-XAtq', '-d', $self->connstr($dbname), '-f',
|
||||||
'-' ], '<', \$sql, '>', \$stdout, '2>', \$stderr
|
'-' ], '<', \$sql, '>', \$stdout, '2>', \$stderr
|
||||||
|
|
|
@ -74,7 +74,7 @@ chmod 0600, "ssl/client.key";
|
||||||
#### Part 0. Set up the server.
|
#### Part 0. Set up the server.
|
||||||
|
|
||||||
diag "setting up data directory...";
|
diag "setting up data directory...";
|
||||||
my $node = get_new_node();
|
my $node = get_new_node('master');
|
||||||
$node->init;
|
$node->init;
|
||||||
|
|
||||||
# PGHOST is enforced here to set up the node, subsequent connections
|
# PGHOST is enforced here to set up the node, subsequent connections
|
||||||
|
|
Loading…
Reference in New Issue