|
1 | 1 | # Simple checks
|
2 |
| -#use Data::Dumper; |
3 | 2 | use strict;
|
4 | 3 | use warnings;
|
5 | 4 |
|
@@ -50,69 +49,80 @@ ( $$ )
|
50 | 49 | $node_master->safe_psql('postgres',
|
51 | 50 | "select pg_make_snapshot();");
|
52 | 51 |
|
53 |
| -replay_wait( $node_master, $node_standby ); |
54 |
| - |
55 |
| -# Check for pg_control_snapshot() results |
56 |
| -my ( $master_out, $standby_out ); |
57 |
| -$master_out = $node_master->safe_psql( 'postgres', "select * from pg_control_snapshot()" ); |
58 |
| -$standby_out = $node_standby->safe_psql( 'postgres', "select * from pg_control_snapshot()" ); |
59 |
| - |
60 |
| -ok( $master_out eq '1|2|0', 'pg_control_snapshot() on master' ); |
61 |
| -ok( $standby_out eq '1|1|0', 'pg_control_snapshot() on standby' ); |
62 |
| - |
63 | 52 | # Make third snapshot
|
64 | 53 | $node_master->safe_psql('postgres',
|
65 | 54 | "select pg_make_snapshot();");
|
66 | 55 |
|
67 | 56 | replay_wait( $node_master, $node_standby );
|
68 | 57 |
|
69 |
| -# Check for pg_control_snapshot() results another one |
70 |
| -$master_out = $node_master->safe_psql( 'postgres', "select * from pg_control_snapshot()" ); |
71 |
| -$standby_out = $node_standby->safe_psql( 'postgres', "select * from pg_control_snapshot()" ); |
72 |
| - |
73 |
| -ok( $master_out eq '1|3|0', 'pg_control_snapshot() on master 2' ); |
74 |
| -ok( $standby_out eq '1|2|0', 'pg_control_snapshot() on standby 2' ); |
| 58 | +# Check for pg_control_snapshot() results |
| 59 | +my $master_out = $node_master->safe_psql( 'postgres', "select * from pg_control_snapshot()" ); |
| 60 | +my $standby_out = $node_standby->safe_psql( 'postgres', "select * from pg_control_snapshot()" ); |
75 | 61 |
|
76 |
| -# Standby checks |
77 |
| -( $ret, $stdout, $stderr ) = $node_standby->psql( 'postgres', "select pg_recover_to_snapshot( 3 );" ); |
78 |
| -like( $stderr, '/ERROR: Operation is not possible at replica/', 'pg_recover_to_snapshot() is prohibited on replica' ); |
| 62 | +ok( $master_out eq '1|3|0', 'pg_control_snapshot() on master' ); |
| 63 | +ok( $standby_out eq '1|2|0', 'pg_control_snapshot() on standby' ); |
79 | 64 |
|
| 65 | +# Standby simple checks |
80 | 66 | ( $ret, $stdout, $stderr ) = $node_standby->psql( 'postgres', "select pg_make_snapshot();" );
|
81 |
| -like( $stderr, '/ERROR: Operation is not possible at replica/', 'pg_make_snapshot() is prohibited on replica' ); |
| 67 | +like( $stderr, '/ERROR: Operation is not possible at replica/', 'pg_make_snapshot() is prohibited on standby' ); |
| 68 | + |
| 69 | +( $ret, $stdout, $stderr ) = $node_standby->psql( 'postgres', "select pg_recover_to_snapshot( 3 );" ); |
| 70 | +like( $stderr, '/ERROR: Operation is not possible at replica/', 'pg_recover_to_snapshot() is prohibited on standby' ); |
82 | 71 |
|
83 | 72 | ( $ret, $stdout, $stderr ) = $node_standby->psql( 'postgres', "select pg_switch_to_snapshot( 2 );" );
|
84 |
| -like( $stderr, '/ERROR: Operation is not possible at replica/', 'pg_switch_to_snapshot() is prohibited on replica' ); |
| 73 | +like( $stderr, '/ERROR: Operation is not possible at replica/', 'pg_recover_to_snapshot() is prohibited on standby' ); |
85 | 74 |
|
86 | 75 | ( $ret, $stdout, $stderr ) = $node_standby->psql( 'postgres', "select pg_set_backend_snapshot( 3 );" );
|
87 | 76 | like( $stderr, '/ERROR: Invalid snapshot/', 'Invalid snapshot number passed to pg_set_backend_snapshot() on standby' );
|
88 | 77 |
|
89 |
| -( $ret, $stdout, $stderr ) = $node_standby->psql( 'postgres', "select pg_set_backend_snapshot( 2 );" ); |
90 |
| -is( $ret, 0, 'Standby pg_set_backend_snapshot()' ); |
| 78 | +( $ret, $stdout, $stderr ) = $node_standby->psql( 'postgres', "select * from pg_set_backend_snapshot( 2 ); select * from pg_get_backend_snapshot(); select * from pg_set_backend_snapshot( 0 );" ); |
| 79 | +$stdout =~ s/\s//g; |
| 80 | +is( $stdout, 2, 'pg_get_backend_snapshot() on standby' ); |
91 | 81 |
|
92 |
| -( $ret, $stdout, $stderr ) = $node_standby->psql( 'postgres', "select pg_set_backend_snapshot( 2 ); select pg_get_backend_snapshot();" ); |
| 82 | +my $snapshot_size = $node_standby->safe_psql( 'postgres', "select pg_get_snapshot_size( 1 ) > 0" ); |
| 83 | +ok( $snapshot_size eq 't', 'Snapshot size is greater than 0 on standby' ); |
93 | 84 |
|
94 |
| -$stdout =~ s/\s//; |
| 85 | +my $snapshot_timestamp = $node_standby->safe_psql( 'postgres', "select ( now() - pg_get_snapshot_timestamp( 1 ) ) > interval '0 seconds'" ); |
| 86 | +ok( $snapshot_size eq 't', 'Snapshot age is greater than 0 on standby' ); |
| 87 | +$snapshot_timestamp = $node_standby->safe_psql( 'postgres', "select ( now() - pg_get_snapshot_timestamp( 1 ) ) < interval '180 seconds'" ); |
| 88 | +ok( $snapshot_size eq 't', 'Snapshot age is less than 180 seconds on standby' ); |
95 | 89 |
|
96 |
| -is( $stdout, 2, 'Standby pg_get_backend_snapshot()' ); |
| 90 | +( $ret, $stdout, $stderr ) = $node_standby->psql( 'postgres', "select coalesce( pg_get_snapshot_timestamp( generate_series ), now() ) = coalesce( pg_get_snapshot_timestamp, now() ) and pg_size_pretty( pg_get_snapshot_size( generate_series ) ) = pg_size_pretty from snapfs_snapshots;" ); |
| 91 | +$ret = () = $stdout =~ /t/g; |
| 92 | +is( $ret, 2, 'snapfs_snapshots view check on standby' ); |
97 | 93 |
|
98 |
| -# Master checks |
99 | 94 |
|
100 |
| -( $ret, $stdout, $stderr ) = $node_standby->psql( 'postgres', "select pg_set_backend_snapshot( 3 );" ); |
| 95 | +# Master simple checks |
| 96 | +( $ret, $stdout, $stderr ) = $node_master->psql( 'postgres', "select pg_set_backend_snapshot( 4 );" ); |
101 | 97 | like( $stderr, '/ERROR: Invalid snapshot/', 'Invalid snapshot number passed to pg_set_backend_snapshot() on master' );
|
102 | 98 |
|
103 |
| -( $ret, $stdout, $stderr ) = $node_master->psql( 'postgres', "select pg_set_backend_snapshot( 2 );" ); |
104 |
| -is( $ret, 0, 'Master pg_set_backend_snapshot()' ); |
| 99 | +( $ret, $stdout, $stderr ) = $node_master->psql( 'postgres', "select * from pg_set_backend_snapshot( 2 ); select * from pg_get_backend_snapshot(); select * from pg_set_backend_snapshot( 0 );" ); |
| 100 | +$stdout =~ s/\s//g; |
| 101 | +is( $stdout, 2, 'pg_get_backend_snapshot() on master' ); |
| 102 | + |
| 103 | +$snapshot_size = $node_master->safe_psql( 'postgres', "select pg_get_snapshot_size( 1 ) > 0" ); |
| 104 | +ok( $snapshot_size eq 't', 'Snapshot size is greater than 0 on master' ); |
105 | 105 |
|
106 |
| -( $ret, $stdout, $stderr ) = $node_master->psql( 'postgres', "select pg_set_backend_snapshot( 2 ); select pg_get_backend_snapshot();" ); |
| 106 | +$snapshot_timestamp = $node_master->safe_psql( 'postgres', "select ( now() - pg_get_snapshot_timestamp( 1 ) ) > interval '0 seconds'" ); |
| 107 | +ok( $snapshot_size eq 't', 'Snapshot age is greater than 0 on master' ); |
| 108 | +$snapshot_timestamp = $node_master->safe_psql( 'postgres', "select ( now() - pg_get_snapshot_timestamp( 1 ) ) < interval '180 seconds'" ); |
| 109 | +ok( $snapshot_size eq 't', 'Snapshot age is less than 180 seconds on master' ); |
107 | 110 |
|
108 |
| -$stdout =~ s/\s//; |
| 111 | +( $ret, $stdout, $stderr ) = $node_master->psql( 'postgres', "select coalesce( pg_get_snapshot_timestamp( generate_series ), now() ) = coalesce( pg_get_snapshot_timestamp, now() ) and pg_size_pretty( pg_get_snapshot_size( generate_series ) ) = pg_size_pretty from snapfs_snapshots;" ); |
| 112 | +$ret = () = $stdout =~ /t/g; |
| 113 | +is( $ret, 3, 'snapfs_snapshots view check on master' ); |
109 | 114 |
|
110 |
| -is( $stdout, 2, 'Master pg_get_backend_snapshot()' ); |
| 115 | +( $ret, $stdout, $stderr ) = $node_master->psql( 'postgres', "select pg_switch_to_snapshot( 4 );" ); |
| 116 | +like( $stderr, '/ERROR: Invalid snapshot \d+, existed snapshots/', 'Invalid snapshot number passed to pg_recover_to_snapshot() on master' ); |
111 | 117 |
|
| 118 | +( $ret, $stdout, $stderr ) = $node_master->psql( 'postgres', "select pg_switch_to_snapshot( 2 );" ); |
| 119 | +ok( $ret eq 0, 'pg_switch_to_snapshot() on master' ); |
112 | 120 |
|
113 |
| -#print Dumper( $ret ); |
114 |
| -#print Dumper( $stdout ); |
115 |
| -#print Dumper( $stderr ); |
| 121 | +( $ret, $stdout, $stderr ) = $node_master->psql( 'postgres', "select pg_recover_to_snapshot( 2 );" ); |
| 122 | +like( $stderr, '/ERROR: Can not perform operation inside snapshot/', 'pg_recover_to_snapshot() is prohibited in snapshot on master' ); |
116 | 123 |
|
| 124 | +( $ret, $stdout, $stderr ) = $node_master->psql( 'postgres', "select pg_switch_to_snapshot( 0 );" ); |
| 125 | +$ret = $node_master->safe_psql( 'postgres', "select pg_recover_to_snapshot( 2 );" ); |
| 126 | +ok( $ret eq '', 'pg_recover_to_snapshot() on master' ); |
117 | 127 |
|
118 | 128 | done_testing();
|
0 commit comments