On Thu, Mar 18, 2021 at 05:14:24PM +0900, Michael Paquier wrote: > Looking at 0001, I am not much a fan of relying on the position of the > matching pattern in the log file. Instead of relying on the logging > collector and one single file, why not just changing the generation of > the logfile and rely on the output of stderr by restarting the server? > That means less tests, no need to wait for the logging collector to do > its business, and it solves your problem. Please see the idea with > the patch attached. Thoughts?
While looking at 0003, I have noticed that the new kerberos tests
actually switch from a logic where one message pattern matches, to a
logic where multiple message patterns match, but I don't see a problem
with what I sent previously, as long as one consume once a log file
and matches all the patterns once, say like the following in
test_access():
my $first_logfile = slurp_file($node->logfile);
# Verify specified log messages are logged in the log file.
while (my $expect_log_msg = shift @expect_log_msgs)
{
like($first_logfile, qr/\Q$expect_log_msg\E/,
'found expected log file content');
}
# Rotate to a new file, for any next check.
$node->rotate_logfile;
$node->restart;
A second solution would be a logrotate, relying on the contents of
current_logfiles to know what is the current file, with an extra wait
after $node->logrotate to check if the contents of current_logfiles
have changed. That's slower for me as this requires a small sleep to
make sure that the new log file name has changed, and I find the
restart solution simpler and more elegant. Please see the attached
based on HEAD for this logrotate idea.
Jacob, what do you think?
--
Michael
diff --git a/src/test/kerberos/t/001_auth.pl b/src/test/kerberos/t/001_auth.pl
index 079321bbfc..dc0f772834 100644
--- a/src/test/kerberos/t/001_auth.pl
+++ b/src/test/kerberos/t/001_auth.pl
@@ -233,6 +233,22 @@ sub test_access
like($first_logfile, qr/\Q$expect_log_msg\E/,
'found expected log file content');
+
+ # Rotate to a new file, for any next check. Note that
+ # pg_ctl does not wait for the operation to complete
+ # so wait for the result to change first. Sleep a bit
+ # to have a new log file name.
+ sleep(2);
+ $node->logrotate;
+ my $new_current_logfiles;
+
+ # Wait until the contents of current_logfiles have changed.
+ for (my $attempts = 0; $attempts < $max_attempts; $attempts++)
+ {
+ $new_current_logfiles = slurp_file($node->data_dir . '/current_logfiles');
+ last if $new_current_logfiles ne $current_logfiles;
+ usleep(100_000);
+ }
}
return;
signature.asc
Description: PGP signature
