mirror of https://github.com/postgres/postgres
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
pull/97/head
parent
3592e0ff98
commit
2865b4060a
@ -0,0 +1,4 @@ |
|||||||
|
# Generated subdirectories |
||||||
|
/log/ |
||||||
|
/results/ |
||||||
|
/tmp_check/ |
||||||
@ -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