From e449b894a6dcd4537fe5696bab2de6326b66700d Mon Sep 17 00:00:00 2001 From: Greg Sabino Mullane Date: Fri, 24 Apr 2009 19:26:10 -0400 Subject: [PATCH] 8.4 does FSM differently: handle that. --- check_postgres.pl | 40 +++++++++++++++++++++++++++++++++++----- t/02_fsm_pages.t | 21 +++++++++++++++++---- t/02_fsm_relations.t | 20 ++++++++++++++++---- 3 files changed, 68 insertions(+), 13 deletions(-) diff --git a/check_postgres.pl b/check_postgres.pl index 94f9d522f..0fad690d6 100755 --- a/check_postgres.pl +++ b/check_postgres.pl @@ -121,7 +121,9 @@ our %msg = ( 'diskspace-nodir' => q{Could not find data directory "$1"}, 'file-noclose' => q{Could not close $1: $2}, 'fsm-page-msg' => q{fsm page slots used: $1 of $2 ($3%)}, + 'fsm-page-highver' => q{Cannot check on fsm_pages on servers version 8.4 or greater}, 'fsm-rel-msg' => q{fsm relations used: $1 of $2 ($3%)}, + 'fsm-rel-highver' => q{Cannot check on fsm_relations on servers version 8.4 or greater}, 'invalid-option' => q{Invalid option}, 'invalid-query' => q{Invalid query returned: $1}, 'listener-count' => q{ listening=$1}, ## needs leading space @@ -305,7 +307,9 @@ our %msg = ( 'diskspace-nodir' => q{N'a pas pu trouver le répertoire des données « $1 »}, 'file-noclose' => q{N'a pas pu fermer $1 : $2}, 'fsm-page-msg' => q{emplacements de pages utilisés par la FSM : $1 sur $2 ($3%)}, +'fsm-page-highver' => q{Cannot check on fsm_pages on servers version 8.4 or greater}, 'fsm-rel-msg' => q{relations tracées par la FSM : $1 sur $2 ($3%)}, +'fsm-rel-highver' => q{Cannot check on fsm_relations on servers version 8.4 or greater}, 'invalid-option' => q{Option invalide}, 'invalid-query' => q{Une requête invalide a renvoyé : $1}, 'listener-count' => q{ listening=$1}, ## needs leading space @@ -988,8 +992,8 @@ our %testaction = ( txn_idle => 'ON: stats_command_string(<8.3) VERSION: 8.0', txn_time => 'VERSION: 8.3', wal_files => 'VERSION: 8.1', - fsm_pages => 'VERSION: 8.2', - fsm_relations => 'VERSION: 8.2', + fsm_pages => 'VERSION: 8.2 MAX: 8.3', + fsm_relations => 'VERSION: 8.2 MAX: 8.3', ); if ($opt{test}) { print msgn('testmode-start'); @@ -1028,6 +1032,21 @@ if ($opt{test}) { } } + if ($limit =~ /MAX: ((\d+)\.(\d+))/) { + my ($rver,$rmaj,$rmin) = ($1,$2,$3); + for my $db (@{$info->{db}}) { + next unless exists $db->{ok}; + if ($set{$db->{pname}}{server_version} !~ /((\d+)\.(\d+))/) { + print msgn('testmode-nover', $db->{pname}); + next; + } + my ($sver,$smaj,$smin) = ($1,$2,$3); + if ($smaj > $rmaj) { + print msgn('testmode-norun', $ac, $db->{pname}, $rver, $sver); + } + } + } + while ($limit =~ /\bON: (\w+)(?:\(([<>=])(\d+\.\d+)\))?/g) { my ($setting,$op,$ver) = ($1,$2||'',$3||0); for my $db (@{$info->{db}}) { @@ -2816,10 +2835,15 @@ sub check_fsm_pages { qq{ ELSE interestingpages/16 END) AS sumrequests,\n}. qq{ COUNT(relfilenode) AS numrels, 16 AS chunkpages FROM pg_freespacemap_relations) AS foo) AS foo2,\n}. q{ (SELECT setting::NUMERIC AS maxx FROM pg_settings WHERE name = 'max_fsm_pages') AS foo3}; + my $SQLNOOP = qq{SELECT 'FAIL'}; - my $info = run_command($SQL, {regex => qr[\d+] } ); + my $info = run_command($SQL, { version => [ ">8.3 $SQLNOOP" ] } ); for $db (@{$info->{db}}) { + if ($db->{slurp} =~ /\s*FAIL/) { + add_unknown msg('fsm-page-highver'); + return; + } SLURP: while ($db->{slurp} =~ /\s*(\d*) \|\s+(\d+) \|\s+(\d*)$/gsm) { my ($pages,$max,$percent) = ($1||0,$2,$3||0); @@ -2871,10 +2895,15 @@ sub check_fsm_relations { qq{FROM (SELECT\n}. qq{ (SELECT COUNT(*) FROM pg_freespacemap_relations) AS cur,\n}. qq{ (SELECT setting::NUMERIC FROM pg_settings WHERE name='max_fsm_relations') AS maxx) x\n}; + my $SQLNOOP = qq{SELECT 'FAIL'}; - my $info = run_command($SQL, {regex => qr[\w+] } ); + my $info = run_command($SQL, { version => [ ">8.3 $SQLNOOP" ] } ); for $db (@{$info->{db}}) { + if ($db->{slurp} =~ /\s*FAIL/) { + add_unknown msg('fsm-rel-highver'); + return; + } SLURP: while ($db->{slurp} =~ /\s*(\d+) \|\s+(\d+) \|\s+(\d+)$/gsm) { my ($max,$cur,$percent) = ($1,$2,$3); @@ -6008,7 +6037,8 @@ Items not specifically attributed are by Greg Sabino Mullane. French translations (Guillaume Lelarge) Make the backends search return ok if no matches due to inclusion rules, per report by Guillaume Lelarge (Greg) - Begin adding comprehensive unit tests (Greg) + Added comprehensive unit tests (Greg, Jeff Boes, Selena Decklemann) + Make fsm_pages and fsm_relatins handle 8.4 servers smoothly. (Greg) Fix missing 'upd' field in show_dbstats (Andras Fabian) Fix incorrect regex in txn_wraparound (Greg) For txn_wraparound: consistent ordering and fix duplicates in perf output (Andras Fabian) diff --git a/t/02_fsm_pages.t b/t/02_fsm_pages.t index fd2a54253..8ad70ca14 100644 --- a/t/02_fsm_pages.t +++ b/t/02_fsm_pages.t @@ -5,7 +5,6 @@ use strict; use warnings; use Data::Dumper; -use DBI; use Test::More tests => 7; use lib 't','.'; use CP_Testing; @@ -17,6 +16,7 @@ my $cp = CP_Testing->new( {default_action => 'fsm_pages'} ); $dbh = $cp->test_database_handle(); my $S = q{Action 'fsm_pages'}; +my $label = 'POSTGRES_FSM_PAGES'; $t=qq{$S fails when called with an invalid option}; like ($cp->run('foobar=12'), qr{^\s*Usage:}, $t); @@ -57,18 +57,31 @@ CREATE TABLE $schema.pg_freespacemap_relations ( }); $dbh->commit(); +my $ver = $dbh->{pg_server_version}; +if ($ver >= 80400) { + SKIP: { + skip 'Cannot test fsm_pages completely on Postgres 8.4 or higher', 3; + } + + $t=qq{$S gives an unknown when running against a 8.4 or higher version}; + like ($cp->run('--warning=10%'), qr{^$label UNKNOWN.*Cannot check on fsm_pages}, $t); + + exit; +} + + $t=qq{$S gives normal output for empty tables}; -like ($cp->run('--warning=10%'), qr{^POSTGRES_FSM_PAGES OK: .+fsm page slots used: 0 of \d+}, $t); +like ($cp->run('--warning=10%'), qr{^$label OK: .+fsm page slots used: 0 of \d+}, $t); $dbh->do("INSERT INTO $schema.pg_freespacemap_pages VALUES (1663,16389,16911,34,764)"); $dbh->do("INSERT INTO $schema.pg_freespacemap_relations VALUES (1663,16389,16911,1077,52283,52283,37176)"); $dbh->commit(); $t=qq{$S gives normal warning output}; -like ($cp->run('--warning=10%'), qr{^POSTGRES_FSM_PAGES WARNING: .+fsm page slots used: 52288 of \d+}, $t); +like ($cp->run('--warning=10%'), qr{^$label WARNING: .+fsm page slots used: 52288 of \d+}, $t); $t=qq{$S gives normal critical output}; -like ($cp->run('--critical=5%'), qr{^POSTGRES_FSM_PAGES CRITICAL: .+fsm page slots used: 52288 of \d+}, $t); +like ($cp->run('--critical=5%'), qr{^$label CRITICAL: .+fsm page slots used: 52288 of \d+}, $t); $t=qq{$S gives normal output for MRTG}; is ($cp->run('--critical=5% --output=MRTG'), qq{34\n52288\n\n\n}, $t); diff --git a/t/02_fsm_relations.t b/t/02_fsm_relations.t index aacdaf3c7..c0afe3759 100644 --- a/t/02_fsm_relations.t +++ b/t/02_fsm_relations.t @@ -5,7 +5,6 @@ use strict; use warnings; use Data::Dumper; -use DBI; use Test::More tests => 7; use lib 't','.'; use CP_Testing; @@ -17,6 +16,7 @@ my $cp = CP_Testing->new( {default_action => 'fsm_relations'} ); $dbh = $cp->test_database_handle(); my $S = q{Action 'fsm_relations'}; +my $label = 'POSTGRES_FSM_RELATIONS'; $t=qq{$S fails when called with an invalid option}; like ($cp->run('foobar=12'), qr{^\s*Usage:}, $t); @@ -57,8 +57,20 @@ CREATE TABLE $schema.pg_freespacemap_relations ( }); $dbh->commit(); +my $ver = $dbh->{pg_server_version}; +if ($ver >= 80400) { + SKIP: { + skip 'Cannot test fsm_relations completely on Postgres 8.4 or higher', 3; + } + + $t=qq{$S gives an unknown when running against a 8.4 or higher version}; + like ($cp->run('--warning=10%'), qr{^$label UNKNOWN.*Cannot check on fsm_relations}, $t); + + exit; +} + $t=qq{$S gives normal output for empty tables}; -like ($cp->run('--warning=10%'), qr{^POSTGRES_FSM_RELATIONS OK: .+fsm relations used: 0 of \d+}, $t); +like ($cp->run('--warning=10%'), qr{^$label OK: .+fsm relations used: 0 of \d+}, $t); $dbh->do("INSERT INTO $schema.pg_freespacemap_pages VALUES (1663,16389,16911,34,764)"); my $sth = $dbh->prepare("INSERT INTO $schema.pg_freespacemap_relations VALUES (?,?,?,?,?,?,?)"); @@ -68,10 +80,10 @@ for (1..999) { $dbh->commit(); $t=qq{$S gives normal warning output}; -like ($cp->run('--warning=10%'), qr{^POSTGRES_FSM_RELATIONS WARNING: .+fsm relations used: 999 of \d+}, $t); +like ($cp->run('--warning=10%'), qr{^$label WARNING: .+fsm relations used: 999 of \d+}, $t); $t=qq{$S gives normal critical output}; -like ($cp->run('--critical=5%'), qr{^POSTGRES_FSM_RELATIONS CRITICAL: .+fsm relations used: 999 of \d+}, $t); +like ($cp->run('--critical=5%'), qr{^$label CRITICAL: .+fsm relations used: 999 of \d+}, $t); $t=qq{$S gives normal output for MRTG}; is ($cp->run('--critical=5% --output=MRTG'), qq{100\n999\n\n\n}, $t); -- 2.30.2