Add a regression test for contrib/pg_prewarm.
We had a little bit of coverage here thanks to e2f65f425
,
but not enough; notably, autoprewarm wasn't exercised at all.
Dong Wook Lee, with help from Julien Rouhaud and myself
Discussion: https://postgr.es/m/20220629053812.mifmdrch5iuasg2s@home-desktop
This commit is contained in:
parent
3592e0ff98
commit
2865b4060a
|
@ -0,0 +1,4 @@
|
||||||
|
# Generated subdirectories
|
||||||
|
/log/
|
||||||
|
/results/
|
||||||
|
/tmp_check/
|
|
@ -10,6 +10,8 @@ EXTENSION = pg_prewarm
|
||||||
DATA = pg_prewarm--1.1--1.2.sql pg_prewarm--1.1.sql pg_prewarm--1.0--1.1.sql
|
DATA = pg_prewarm--1.1--1.2.sql pg_prewarm--1.1.sql pg_prewarm--1.0--1.1.sql
|
||||||
PGFILEDESC = "pg_prewarm - preload relation data into system buffer cache"
|
PGFILEDESC = "pg_prewarm - preload relation data into system buffer cache"
|
||||||
|
|
||||||
|
TAP_TESTS = 1
|
||||||
|
|
||||||
ifdef USE_PGXS
|
ifdef USE_PGXS
|
||||||
PG_CONFIG = pg_config
|
PG_CONFIG = pg_config
|
||||||
PGXS := $(shell $(PG_CONFIG) --pgxs)
|
PGXS := $(shell $(PG_CONFIG) --pgxs)
|
||||||
|
|
|
@ -0,0 +1,58 @@
|
||||||
|
|
||||||
|
# Copyright (c) 2021-2022, PostgreSQL Global Development Group
|
||||||
|
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
|
||||||
|
use PostgreSQL::Test::Cluster;
|
||||||
|
use PostgreSQL::Test::Utils;
|
||||||
|
use Test::More;
|
||||||
|
|
||||||
|
|
||||||
|
my $node = PostgreSQL::Test::Cluster->new('main');
|
||||||
|
|
||||||
|
$node->init;
|
||||||
|
$node->append_conf(
|
||||||
|
'postgresql.conf',
|
||||||
|
qq{shared_preload_libraries = 'pg_prewarm'
|
||||||
|
pg_prewarm.autoprewarm = true
|
||||||
|
pg_prewarm.autoprewarm_interval = 0});
|
||||||
|
$node->start;
|
||||||
|
|
||||||
|
# setup
|
||||||
|
$node->safe_psql("postgres",
|
||||||
|
"CREATE EXTENSION pg_prewarm;\n"
|
||||||
|
. "CREATE TABLE test(c1 int);\n"
|
||||||
|
. "INSERT INTO test SELECT generate_series(1, 100);");
|
||||||
|
|
||||||
|
# test read mode
|
||||||
|
my $result =
|
||||||
|
$node->safe_psql("postgres", "SELECT pg_prewarm('test', 'read');");
|
||||||
|
like($result, qr/^[1-9][0-9]*$/, 'read mode succeeded');
|
||||||
|
|
||||||
|
# test buffer_mode
|
||||||
|
$result =
|
||||||
|
$node->safe_psql("postgres", "SELECT pg_prewarm('test', 'buffer');");
|
||||||
|
like($result, qr/^[1-9][0-9]*$/, 'buffer mode succeeded');
|
||||||
|
|
||||||
|
# prefetch mode might or might not be available
|
||||||
|
my ($cmdret, $stdout, $stderr) =
|
||||||
|
$node->psql("postgres", "SELECT pg_prewarm('test', 'prefetch');");
|
||||||
|
ok( ( $stdout =~ qr/^[1-9][0-9]*$/
|
||||||
|
or $stderr =~ qr/prefetch is not supported by this build/),
|
||||||
|
'prefetch mode succeeded');
|
||||||
|
|
||||||
|
# test autoprewarm_dump_now()
|
||||||
|
$result = $node->safe_psql("postgres", "SELECT autoprewarm_dump_now();");
|
||||||
|
like($result, qr/^[1-9][0-9]*$/, 'autoprewarm_dump_now succeeded');
|
||||||
|
|
||||||
|
# restart, to verify that auto prewarm actually works
|
||||||
|
$node->restart;
|
||||||
|
|
||||||
|
$node->wait_for_log(
|
||||||
|
"autoprewarm successfully prewarmed [1-9][0-9]* of [0-9]+ previously-loaded blocks"
|
||||||
|
);
|
||||||
|
|
||||||
|
$node->stop;
|
||||||
|
|
||||||
|
done_testing();
|
Loading…
Reference in New Issue