Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit 96f3661

Browse files
committed
Detect unused steps in isolation specs and do some cleanup
This is useful for developers to find out if an isolation spec is over-engineered or if it needs more work by warning at the end of a test run if a step is not used, generating a failure with extra diffs. While on it, clean up all the specs which include steps not used in any permutations to simplify them. This is a backpatch of 989d23b and 06fdc4e, as it is becoming useful to make all the branches consistent for an upcoming patch that will improve the output generated by isolationtester. Author: Michael Paquier Reviewed-by: Asim Praveen, Melanie Plageman Discussion: https://postgr.es/m/20190819080820.GG18166@paquier.xyz Discussion: https://postgr.es/m/794820.1623872009@sss.pgh.pa.us Backpatch-through: 9.6
1 parent a8f6879 commit 96f3661

13 files changed

+40
-41
lines changed

contrib/test_decoding/specs/concurrent_ddl_dml.spec

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ setup { SET synchronous_commit=on; }
1919
step "s1_init" { SELECT 'init' FROM pg_create_logical_replication_slot('isolation_slot', 'test_decoding'); }
2020
step "s1_begin" { BEGIN; }
2121
step "s1_insert_tbl1" { INSERT INTO tbl1 (val1, val2) VALUES (1, 1); }
22-
step "s1_insert_tbl1_3col" { INSERT INTO tbl1 (val1, val2, val3) VALUES (1, 1, 1); }
2322
step "s1_insert_tbl2" { INSERT INTO tbl2 (val1, val2) VALUES (1, 1); }
2423
step "s1_insert_tbl2_3col" { INSERT INTO tbl2 (val1, val2, val3) VALUES (1, 1, 1); }
2524
step "s1_commit" { COMMIT; }
@@ -29,15 +28,8 @@ setup { SET synchronous_commit=on; }
2928

3029
step "s2_alter_tbl1_float" { ALTER TABLE tbl1 ALTER COLUMN val2 TYPE float; }
3130
step "s2_alter_tbl1_char" { ALTER TABLE tbl1 ALTER COLUMN val2 TYPE character varying; }
32-
step "s2_alter_tbl1_text" { ALTER TABLE tbl1 ALTER COLUMN val2 TYPE text; }
3331
step "s2_alter_tbl1_boolean" { ALTER TABLE tbl1 ALTER COLUMN val2 TYPE boolean; }
3432

35-
step "s2_alter_tbl1_add_int" { ALTER TABLE tbl1 ADD COLUMN val3 INTEGER; }
36-
step "s2_alter_tbl1_add_float" { ALTER TABLE tbl1 ADD COLUMN val3 FLOAT; }
37-
step "s2_alter_tbl1_add_char" { ALTER TABLE tbl1 ADD COLUMN val3 character varying; }
38-
step "s2_alter_tbl1_add_boolean" { ALTER TABLE tbl1 ADD COLUMN val3 BOOLEAN; }
39-
step "s2_alter_tbl1_add_text" { ALTER TABLE tbl1 ADD COLUMN val3 TEXT; }
40-
4133
step "s2_alter_tbl2_float" { ALTER TABLE tbl2 ALTER COLUMN val2 TYPE float; }
4234
step "s2_alter_tbl2_char" { ALTER TABLE tbl2 ALTER COLUMN val2 TYPE character varying; }
4335
step "s2_alter_tbl2_text" { ALTER TABLE tbl2 ALTER COLUMN val2 TYPE text; }
@@ -46,7 +38,6 @@ step "s2_alter_tbl2_boolean" { ALTER TABLE tbl2 ALTER COLUMN val2 TYPE boolean;
4638
step "s2_alter_tbl2_add_int" { ALTER TABLE tbl2 ADD COLUMN val3 INTEGER; }
4739
step "s2_alter_tbl2_add_float" { ALTER TABLE tbl2 ADD COLUMN val3 FLOAT; }
4840
step "s2_alter_tbl2_add_char" { ALTER TABLE tbl2 ADD COLUMN val3 character varying; }
49-
step "s2_alter_tbl2_add_boolean" { ALTER TABLE tbl2 ADD COLUMN val3 BOOLEAN; }
5041
step "s2_alter_tbl2_add_text" { ALTER TABLE tbl2 ADD COLUMN val3 TEXT; }
5142
step "s2_alter_tbl2_drop_3rd_col" { ALTER TABLE tbl2 DROP COLUMN val3; }
5243
step "s2_alter_tbl2_3rd_char" { ALTER TABLE tbl2 ALTER COLUMN val3 TYPE character varying; }

contrib/test_decoding/specs/snapshot_transfer.spec

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ step "s0_sub_get_base_snap" { INSERT INTO dummy VALUES (0); }
2626
step "s0_insert" { INSERT INTO harvest VALUES (1, 2, 3); }
2727
step "s0_end_sub0" { RELEASE SAVEPOINT s0; }
2828
step "s0_end_sub1" { RELEASE SAVEPOINT s1; }
29-
step "s0_insert2" { INSERT INTO harvest VALUES (1, 2, 3, 4); }
3029
step "s0_commit" { COMMIT; }
3130
step "s0_get_changes" { SELECT data FROM pg_logical_slot_get_changes('isolation_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1'); }
3231

src/test/isolation/expected/eval-plan-qual-trigger.out

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
Parsed test spec with 4 sessions
1+
Parsed test spec with 3 sessions
22

33
starting permutation: s1_trig_rep_b_u s1_trig_rep_a_u s1_ins_a s1_ins_b s1_b_rc s2_b_rc s1_upd_a_data s1_c s2_upd_a_data s2_c s0_rep
44
step s1_trig_rep_b_u: CREATE TRIGGER rep_b_u BEFORE UPDATE ON trigtest FOR EACH ROW EXECUTE PROCEDURE trig_report();

src/test/isolation/isolationtester.c

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ main(int argc, char **argv)
8686
puts("isolationtester (PostgreSQL) " PG_VERSION);
8787
exit(0);
8888
default:
89-
fprintf(stderr, "Usage: isolationtester [-n] [CONNINFO]\n");
89+
fprintf(stderr, "Usage: isolationtester [CONNINFO]\n");
9090
return EXIT_FAILURE;
9191
}
9292
}
@@ -248,10 +248,23 @@ static int *piles;
248248
static void
249249
run_testspec(TestSpec *testspec)
250250
{
251+
int i;
252+
251253
if (testspec->permutations)
252254
run_named_permutations(testspec);
253255
else
254256
run_all_permutations(testspec);
257+
258+
/*
259+
* Verify that all steps have been used, complaining about anything
260+
* defined but not used.
261+
*/
262+
for (i = 0; i < testspec->nallsteps; i++)
263+
{
264+
if (!testspec->allsteps[i]->used)
265+
fprintf(stderr, "unused step name: %s\n",
266+
testspec->allsteps[i]->name);
267+
}
255268
}
256269

257270
/*
@@ -451,7 +464,11 @@ run_permutation(TestSpec *testspec, int nsteps, Step **steps)
451464

452465
printf("\nstarting permutation:");
453466
for (i = 0; i < nsteps; i++)
467+
{
468+
/* Track the permutation as in-use */
469+
steps[i]->used = true;
454470
printf(" %s", steps[i]->name);
471+
}
455472
printf("\n");
456473

457474
/* Perform setup */

src/test/isolation/isolationtester.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ struct Session
2929
struct Step
3030
{
3131
int session;
32+
bool used;
3233
char *name;
3334
char *sql;
3435
char *errormsg;

src/test/isolation/specparse.y

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,7 @@ step:
145145
$$ = pg_malloc(sizeof(Step));
146146
$$->name = $2;
147147
$$->sql = $3;
148+
$$->used = false;
148149
$$->errormsg = NULL;
149150
}
150151
;

src/test/isolation/specs/eval-plan-qual-trigger.spec

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ session "s2"
113113
step "s2_b_rc" { BEGIN ISOLATION LEVEL READ COMMITTED; SELECT 1; }
114114
step "s2_b_rr" { BEGIN ISOLATION LEVEL REPEATABLE READ; SELECT 1; }
115115
step "s2_c" { COMMIT; }
116-
step "s2_r" { ROLLBACK; }
116+
#step "s2_r" { ROLLBACK; }
117117
step "s2_ins_a" { INSERT INTO trigtest VALUES ('key-a', 'val-a-s2') RETURNING *; }
118118
step "s2_del_a" {
119119
DELETE FROM trigtest
@@ -153,25 +153,25 @@ step "s2_upsert_a_data" {
153153
RETURNING *;
154154
}
155155

156-
session "s3"
156+
#session "s3"
157157
#setup { }
158-
step "s3_b_rc" { BEGIN ISOLATION LEVEL READ COMMITTED; SELECT 1; }
159-
step "s3_c" { COMMIT; }
160-
step "s3_r" { ROLLBACK; }
161-
step "s3_del_a" {
162-
DELETE FROM trigtest
163-
WHERE
164-
noisy_oper('upd', key, '=', 'key-a') AND
165-
noisy_oper('upk', data, '<>', 'mismatch')
166-
RETURNING *
167-
}
168-
step "s3_upd_a_data" {
169-
UPDATE trigtest SET data = data || '-ups3'
170-
WHERE
171-
noisy_oper('upd', key, '=', 'key-a') AND
172-
noisy_oper('upk', data, '<>', 'mismatch')
173-
RETURNING *;
174-
}
158+
#step "s3_b_rc" { BEGIN ISOLATION LEVEL READ COMMITTED; SELECT 1; }
159+
#step "s3_c" { COMMIT; }
160+
#step "s3_r" { ROLLBACK; }
161+
#step "s3_del_a" {
162+
# DELETE FROM trigtest
163+
# WHERE
164+
# noisy_oper('upd', key, '=', 'key-a') AND
165+
# noisy_oper('upk', data, '<>', 'mismatch')
166+
# RETURNING *
167+
#}
168+
#step "s3_upd_a_data" {
169+
# UPDATE trigtest SET data = data || '-ups3'
170+
# WHERE
171+
# noisy_oper('upd', key, '=', 'key-a') AND
172+
# noisy_oper('upk', data, '<>', 'mismatch')
173+
# RETURNING *;
174+
#}
175175

176176
### base case verifying that triggers see performed modifications
177177
# s1 updates, s1 commits, s2 updates

src/test/isolation/specs/freeze-the-dead.spec

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ session "s1"
1919
step "s1_begin" { BEGIN; }
2020
step "s1_update" { UPDATE tab_freeze SET x = x + 1 WHERE id = 3; }
2121
step "s1_commit" { COMMIT; }
22-
step "s1_vacuum" { VACUUM FREEZE tab_freeze; }
2322
step "s1_selectone" {
2423
BEGIN;
2524
SET LOCAL enable_seqscan = false;
@@ -28,7 +27,6 @@ step "s1_selectone" {
2827
COMMIT;
2928
}
3029
step "s1_selectall" { SELECT * FROM tab_freeze ORDER BY name, id; }
31-
step "s1_reindex" { REINDEX TABLE tab_freeze; }
3230

3331
session "s2"
3432
step "s2_begin" { BEGIN; }
@@ -40,7 +38,6 @@ session "s3"
4038
step "s3_begin" { BEGIN; }
4139
step "s3_key_share" { SELECT id FROM tab_freeze WHERE id = 3 FOR KEY SHARE; }
4240
step "s3_commit" { COMMIT; }
43-
step "s3_vacuum" { VACUUM FREEZE tab_freeze; }
4441

4542
# This permutation verfies that a previous bug
4643
# https://postgr.es/m/E5711E62-8FDF-4DCA-A888-C200BF6B5742@amazon.com

src/test/isolation/specs/insert-conflict-do-nothing.spec

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@ setup
3333
step "donothing2" { INSERT INTO ints(key, val) VALUES(1, 'donothing2') ON CONFLICT DO NOTHING; }
3434
step "select2" { SELECT * FROM ints; }
3535
step "c2" { COMMIT; }
36-
step "a2" { ABORT; }
3736

3837
# Regular case where one session block-waits on another to determine if it
3938
# should proceed with an insert or do nothing.

src/test/isolation/specs/insert-conflict-do-update-2.spec

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@ setup
3232
step "insert2" { INSERT INTO upsert(key, payload) VALUES('FOOFOO', 'insert2') ON CONFLICT (lower(key)) DO UPDATE set key = EXCLUDED.key, payload = upsert.payload || ' updated by insert2'; }
3333
step "select2" { SELECT * FROM upsert; }
3434
step "c2" { COMMIT; }
35-
step "a2" { ABORT; }
3635

3736
# One session (session 2) block-waits on another (session 1) to determine if it
3837
# should proceed with an insert or update. The user can still usefully UPDATE

src/test/isolation/specs/insert-conflict-do-update.spec

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@ setup
3030
step "insert2" { INSERT INTO upsert(key, val) VALUES(1, 'insert2') ON CONFLICT (key) DO UPDATE set val = upsert.val || ' updated by insert2'; }
3131
step "select2" { SELECT * FROM upsert; }
3232
step "c2" { COMMIT; }
33-
step "a2" { ABORT; }
3433

3534
# One session (session 2) block-waits on another (session 1) to determine if it
3635
# should proceed with an insert or update. Notably, this entails updating a

src/test/isolation/specs/sequence-ddl.spec

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ setup { BEGIN; }
1515
step "s1alter" { ALTER SEQUENCE seq1 MAXVALUE 10; }
1616
step "s1alter2" { ALTER SEQUENCE seq1 MAXVALUE 20; }
1717
step "s1restart" { ALTER SEQUENCE seq1 RESTART WITH 5; }
18-
step "s1setval" { SELECT setval('seq1', 5); }
1918
step "s1commit" { COMMIT; }
2019

2120
session "s2"

src/test/isolation/specs/tuplelock-upgrade-no-deadlock.spec

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ teardown
1919
session "s0"
2020
step "s0_begin" { begin; }
2121
step "s0_keyshare" { select id from tlu_job where id = 1 for key share;}
22-
step "s0_share" { select id from tlu_job where id = 1 for share;}
2322
step "s0_rollback" { rollback; }
2423

2524
session "s1"
@@ -28,7 +27,6 @@ step "s1_keyshare" { select id from tlu_job where id = 1 for key share;}
2827
step "s1_share" { select id from tlu_job where id = 1 for share; }
2928
step "s1_fornokeyupd" { select id from tlu_job where id = 1 for no key update; }
3029
step "s1_update" { update tlu_job set name = 'b' where id = 1; }
31-
step "s1_delete" { delete from tlu_job where id = 1; }
3230
step "s1_savept_e" { savepoint s1_e; }
3331
step "s1_savept_f" { savepoint s1_f; }
3432
step "s1_rollback_e" { rollback to s1_e; }
@@ -44,7 +42,6 @@ step "s2_for_update" { select id from tlu_job where id = 1 for update; }
4442
step "s2_update" { update tlu_job set name = 'b' where id = 1; }
4543
step "s2_delete" { delete from tlu_job where id = 1; }
4644
step "s2_rollback" { rollback; }
47-
step "s2_commit" { commit; }
4845

4946
session "s3"
5047
setup { begin; }

0 commit comments

Comments
 (0)