pgsql: Use annotations to reduce instability of isolation-test results.

Поиск
Список
Период
Сортировка
От Tom Lane
Тема pgsql: Use annotations to reduce instability of isolation-test results.
Дата
Msg-id E1lvrvb-0005Ci-2S@gemulon.postgresql.org
обсуждение исходный текст
Список pgsql-committers
Use annotations to reduce instability of isolation-test results.

We've long contended with isolation test results that aren't entirely
stable.  Some test scripts insert long delays to try to force stable
results, which is not terribly desirable; but other erratic failure
modes remain, causing unrepeatable buildfarm failures.  I've spent a
fair amount of time trying to solve this by improving the server-side
support code, without much success: that way is fundamentally unable
to cope with diffs that stem from chance ordering of arrival of
messages from different server processes.

We can improve matters on the client side, however, by annotating
the test scripts themselves to show the desired reporting order
of events that might occur in different orders.  This patch adds
three types of annotations to deal with (a) test steps that might or
might not complete their waits before the isolationtester can see them
waiting; (b) test steps in different sessions that can legitimately
complete in either order; and (c) NOTIFY messages that might arrive
before or after the completion of a step in another session.  We might
need more annotation types later, but this seems to be enough to deal
with the instabilities we've seen in the buildfarm.  It also lets us
get rid of all the long delays that were previously used, cutting more
than a minute off the runtime of the isolation tests.

Back-patch to all supported branches, because the buildfarm
instabilities affect all the branches, and because it seems desirable
to keep isolationtester's capabilities the same across all branches
to simplify possible future back-patching of tests.

Discussion: https://postgr.es/m/327948.1623725828@sss.pgh.pa.us

Branch
------
REL_11_STABLE

Details
-------
https://git.postgresql.org/pg/commitdiff/a1417e4378b9a3a4e896766331eb45a1f4de0cfd

Modified Files
--------------
.../test_decoding/expected/concurrent_ddl_dml.out  |   2 +-
src/test/isolation/README                          |  85 ++-
src/test/isolation/expected/alter-table-3.out      |  32 +-
src/test/isolation/expected/alter-table-4.out      |   2 +-
src/test/isolation/expected/deadlock-hard.out      |   2 +-
src/test/isolation/expected/deadlock-simple.out    |   2 +-
.../isolation/expected/eval-plan-qual-trigger.out  |   6 +-
src/test/isolation/expected/fk-deadlock2_1.out     |  12 +-
src/test/isolation/expected/fk-deadlock2_2.out     |  12 +-
src/test/isolation/expected/fk-deadlock_1.out      |  12 +-
.../expected/insert-conflict-do-nothing-2.out      |   8 +-
.../expected/lock-committed-keyupdate.out          |  24 +-
.../isolation/expected/lock-update-delete_1.out    |  12 +-
src/test/isolation/expected/multiple-cic.out       |   3 +-
src/test/isolation/expected/multiple-cic_1.out     |  20 -
.../isolation/expected/multixact-no-forget_1.out   |   4 +-
src/test/isolation/expected/nowait-4.out           |   2 +-
src/test/isolation/expected/nowait-4_1.out         |   2 +-
src/test/isolation/expected/nowait-5.out           |   2 +-
.../isolation/expected/partition-key-update-1.out  |  12 +-
.../isolation/expected/partition-key-update-3.out  |  12 +-
.../isolation/expected/propagate-lock-delete.out   |  16 +-
.../isolation/expected/read-write-unique-2.out     |   2 +-
.../isolation/expected/read-write-unique-3.out     |   2 +-
.../isolation/expected/read-write-unique-4.out     |   6 +-
src/test/isolation/expected/read-write-unique.out  |   2 +-
src/test/isolation/expected/sequence-ddl.out       |   2 +-
src/test/isolation/expected/skip-locked-4_1.out    |   2 +-
src/test/isolation/expected/timeouts.out           |  16 +-
src/test/isolation/expected/tuplelock-update.out   |  21 +-
src/test/isolation/isolationtester.c               | 782 +++++++++++++--------
src/test/isolation/isolationtester.h               |  47 +-
src/test/isolation/specparse.y                     |  87 ++-
src/test/isolation/specs/deadlock-hard.spec        |  12 +-
src/test/isolation/specs/deadlock-soft-2.spec      |  15 +-
src/test/isolation/specs/multiple-cic.spec         |   5 +-
src/test/isolation/specs/timeouts.spec             |  28 +-
src/test/isolation/specs/tuplelock-update.spec     |   9 +-
src/test/isolation/specscanner.l                   |  12 +
39 files changed, 852 insertions(+), 482 deletions(-)


В списке pgsql-committers по дате отправления:

Предыдущее
От: Tom Lane
Дата:
Сообщение: pgsql: Restore the portal-level snapshot for simple expressions, too.
Следующее
От: Alvaro Herrera
Дата:
Сообщение: pgsql: Add test case for obsoleting slot with active walsender, take 2