tests: Cope with WARNINGs during failed CREATE DB on windows
authorAndres Freund <andres@anarazel.de>
Wed, 2 Apr 2025 11:08:10 +0000 (07:08 -0400)
committerAndres Freund <andres@anarazel.de>
Wed, 2 Apr 2025 11:51:48 +0000 (07:51 -0400)
The test added in 93bc3d75d8e sometimes fails on windows, due to warnings like
WARNING:  some useless files may be left behind in old database directory "base/16514"

The reason for that is createdb_failure_callback() does not ensure that there
are no open file descriptors for files in the partially created,
to-be-dropped, database. We do take care in dropdb(), but that involves
waiting for checkpoints and a ProcSignalBarrier, which we probably don't want
to do in an error callback.  This should probably be fixed one day, but for
now 001_aio.pl needs to cope.

Per buildfarm animals fairywren and drongo.

Discussion: https://postgr.es/m/uc62i6vi5gd4bi6wtjj5poadqxolgy55e7ihkmf3mthjegb6zl@zqo7xez7sc2r

src/test/modules/test_aio/t/001_aio.pl

index e8d064ecd8db65628702c75c4f771e783938e110..ff5f2219d0acb2bf732bd871a41fe453f0e81004 100644 (file)
@@ -1279,6 +1279,11 @@ STRATEGY wal_log;
 
    # Verify that CREATE DATABASE of an invalid database fails and is
    # accounted for accurately.
+   #
+   # Note: On windows additional WARNING messages might be printed, due to
+   # "some useless files may be left behind" warnings. While we probably
+   # should prevent those from occurring, they're independent of AIO, so we
+   # shouldn't fail because of them here.
    my ($cs_count_before, $cs_ts_before) =
      checksum_failures($psql, 'regression_createdb_source');
    psql_like(
@@ -1287,7 +1292,7 @@ STRATEGY wal_log;
        "create database w/ wal strategy, invalid source",
        $createdb_sql,
        qr/^$/,
-       qr/^psql:<stdin>:\d+: ERROR:  invalid page in block 1 of relation base\/\d+\/\d+$/
+       qr/psql:<stdin>:\d+: ERROR:  invalid page in block 1 of relation base\/\d+\/\d+$/
    );
    my ($cs_count_after, $cs_ts_after) =
      checksum_failures($psql, 'regression_createdb_source');