Commit bfd96b7a authored by Michael Paquier's avatar Michael Paquier

Improve log pattern detection in recently-added TAP tests

ab55d742 has introduced some tests with rows found as missing in logical
replication subscriptions for partitioned tables, relying on a logic
with a lookup of the logs generated, scanning the whole file.  This
commit makes the logic more precise, by scanning the logs only from the
position before the key queries are run to the position where we check
for the logs.  This will reduce the risk of issues with log patterns
overlapping with each other if those tests get more complicated in the
future.

Per discussion with Tom Lane.

Discussion: https://postgr.es/m/YMP+Gx2S8meYYHW4@paquier.xyz
Backpatch-through: 13
parent d8e950d3
...@@ -311,13 +311,18 @@ $node_subscriber->reload; ...@@ -311,13 +311,18 @@ $node_subscriber->reload;
$node_subscriber->safe_psql('postgres', "DELETE FROM tab_full_pk"); $node_subscriber->safe_psql('postgres', "DELETE FROM tab_full_pk");
# Note that the current location of the log file is not grabbed immediately
# after reloading the configuration, but after sending one SQL command to
# the node so as we are sure that the reloading has taken effect.
my $log_location = -s $node_subscriber->logfile;
$node_publisher->safe_psql('postgres', $node_publisher->safe_psql('postgres',
"UPDATE tab_full_pk SET b = 'quux' WHERE a = 1"); "UPDATE tab_full_pk SET b = 'quux' WHERE a = 1");
$node_publisher->safe_psql('postgres', "DELETE FROM tab_full_pk WHERE a = 2"); $node_publisher->safe_psql('postgres', "DELETE FROM tab_full_pk WHERE a = 2");
$node_publisher->wait_for_catchup('tap_sub'); $node_publisher->wait_for_catchup('tap_sub');
my $logfile = slurp_file($node_subscriber->logfile()); my $logfile = slurp_file($node_subscriber->logfile, $log_location);
ok( $logfile =~ ok( $logfile =~
qr/logical replication did not find row to be updated in replication target relation "tab_full_pk"/, qr/logical replication did not find row to be updated in replication target relation "tab_full_pk"/,
'update target row is missing'); 'update target row is missing');
......
...@@ -362,6 +362,11 @@ $node_publisher->wait_for_catchup('sub2'); ...@@ -362,6 +362,11 @@ $node_publisher->wait_for_catchup('sub2');
$node_subscriber1->safe_psql('postgres', "DELETE FROM tab1"); $node_subscriber1->safe_psql('postgres', "DELETE FROM tab1");
# Note that the current location of the log file is not grabbed immediately
# after reloading the configuration, but after sending one SQL command to
# the node so as we are sure that the reloading has taken effect.
my $log_location = -s $node_subscriber1->logfile;
$node_publisher->safe_psql('postgres', $node_publisher->safe_psql('postgres',
"UPDATE tab1 SET b = 'quux' WHERE a = 4"); "UPDATE tab1 SET b = 'quux' WHERE a = 4");
$node_publisher->safe_psql('postgres', "DELETE FROM tab1"); $node_publisher->safe_psql('postgres', "DELETE FROM tab1");
...@@ -369,7 +374,7 @@ $node_publisher->safe_psql('postgres', "DELETE FROM tab1"); ...@@ -369,7 +374,7 @@ $node_publisher->safe_psql('postgres', "DELETE FROM tab1");
$node_publisher->wait_for_catchup('sub1'); $node_publisher->wait_for_catchup('sub1');
$node_publisher->wait_for_catchup('sub2'); $node_publisher->wait_for_catchup('sub2');
my $logfile = slurp_file($node_subscriber1->logfile()); my $logfile = slurp_file($node_subscriber1->logfile(), $log_location);
ok( $logfile =~ ok( $logfile =~
qr/logical replication did not find row to be updated in replication target relation's partition "tab1_2_2"/, qr/logical replication did not find row to be updated in replication target relation's partition "tab1_2_2"/,
'update target row is missing in tab1_2_2'); 'update target row is missing in tab1_2_2');
...@@ -700,6 +705,11 @@ $node_subscriber1->reload; ...@@ -700,6 +705,11 @@ $node_subscriber1->reload;
$node_subscriber1->safe_psql('postgres', "DELETE FROM tab2"); $node_subscriber1->safe_psql('postgres', "DELETE FROM tab2");
# Note that the current location of the log file is not grabbed immediately
# after reloading the configuration, but after sending one SQL command to
# the node so as we are sure that the reloading has taken effect.
$log_location = -s $node_subscriber1->logfile;
$node_publisher->safe_psql('postgres', $node_publisher->safe_psql('postgres',
"UPDATE tab2 SET b = 'quux' WHERE a = 5"); "UPDATE tab2 SET b = 'quux' WHERE a = 5");
$node_publisher->safe_psql('postgres', "DELETE FROM tab2 WHERE a = 1"); $node_publisher->safe_psql('postgres', "DELETE FROM tab2 WHERE a = 1");
...@@ -707,7 +717,7 @@ $node_publisher->safe_psql('postgres', "DELETE FROM tab2 WHERE a = 1"); ...@@ -707,7 +717,7 @@ $node_publisher->safe_psql('postgres', "DELETE FROM tab2 WHERE a = 1");
$node_publisher->wait_for_catchup('sub_viaroot'); $node_publisher->wait_for_catchup('sub_viaroot');
$node_publisher->wait_for_catchup('sub2'); $node_publisher->wait_for_catchup('sub2');
$logfile = slurp_file($node_subscriber1->logfile()); $logfile = slurp_file($node_subscriber1->logfile(), $log_location);
ok( $logfile =~ ok( $logfile =~
qr/logical replication did not find row to be updated in replication target relation's partition "tab2_1"/, qr/logical replication did not find row to be updated in replication target relation's partition "tab2_1"/,
'update target row is missing in tab2_1'); 'update target row is missing in tab2_1');
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment