Parsed test spec with 3 sessions starting permutation: s1_flood s2_flood s3_sample s1_check s2_check pg_stat_ch_reset ---------------- (1 row) step s1_flood: -- Generate many events quickly DO $$ BEGIN FOR i IN 1..200 LOOP PERFORM i; END LOOP; END $$; step s2_flood: -- Generate many events quickly DO $$ BEGIN FOR i IN 1..200 LOOP PERFORM i; END LOOP; END $$; step s3_sample: -- Sample stats to verify invariants mid-operation SELECT enqueued_events >= 0 AS enqueued_valid, dropped_events >= 0 AS dropped_valid, queue_size >= 0 AS size_valid, queue_size <= queue_capacity AS bounded FROM pg_stat_ch_stats(); enqueued_valid|dropped_valid|size_valid|bounded --------------+-------------+----------+------- t |t |t |t (1 row) step s1_check: SELECT enqueued_events > 0 AS has_events, queue_size <= queue_capacity AS bounded FROM pg_stat_ch_stats(); has_events|bounded ----------+------- t |t (1 row) step s2_check: SELECT enqueued_events > 0 AS has_events, queue_size <= queue_capacity AS bounded FROM pg_stat_ch_stats(); has_events|bounded ----------+------- t |t (1 row) enqueued_valid|dropped_valid|exported_valid|size_valid|size_bounded|capacity_valid --------------+-------------+--------------+----------+------------+-------------- t |t |t |t |t |t (1 row) starting permutation: s1_flood s3_sample s2_flood s3_sample s1_check pg_stat_ch_reset ---------------- (1 row) step s1_flood: -- Generate many events quickly DO $$ BEGIN FOR i IN 1..200 LOOP PERFORM i; END LOOP; END $$; step s3_sample: -- Sample stats to verify invariants mid-operation SELECT enqueued_events >= 0 AS enqueued_valid, dropped_events >= 0 AS dropped_valid, queue_size >= 0 AS size_valid, queue_size <= queue_capacity AS bounded FROM pg_stat_ch_stats(); enqueued_valid|dropped_valid|size_valid|bounded --------------+-------------+----------+------- t |t |t |t (1 row) step s2_flood: -- Generate many events quickly DO $$ BEGIN FOR i IN 1..200 LOOP PERFORM i; END LOOP; END $$; step s3_sample: -- Sample stats to verify invariants mid-operation SELECT enqueued_events >= 0 AS enqueued_valid, dropped_events >= 0 AS dropped_valid, queue_size >= 0 AS size_valid, queue_size <= queue_capacity AS bounded FROM pg_stat_ch_stats(); enqueued_valid|dropped_valid|size_valid|bounded --------------+-------------+----------+------- t |t |t |t (1 row) step s1_check: SELECT enqueued_events > 0 AS has_events, queue_size <= queue_capacity AS bounded FROM pg_stat_ch_stats(); has_events|bounded ----------+------- t |t (1 row) enqueued_valid|dropped_valid|exported_valid|size_valid|size_bounded|capacity_valid --------------+-------------+--------------+----------+------------+-------------- t |t |t |t |t |t (1 row) starting permutation: s1_flood s3_reset s2_flood s1_check s3_sample pg_stat_ch_reset ---------------- (1 row) step s1_flood: -- Generate many events quickly DO $$ BEGIN FOR i IN 1..200 LOOP PERFORM i; END LOOP; END $$; step s3_reset: SELECT pg_stat_ch_reset(); pg_stat_ch_reset ---------------- (1 row) step s2_flood: -- Generate many events quickly DO $$ BEGIN FOR i IN 1..200 LOOP PERFORM i; END LOOP; END $$; step s1_check: SELECT enqueued_events > 0 AS has_events, queue_size <= queue_capacity AS bounded FROM pg_stat_ch_stats(); has_events|bounded ----------+------- t |t (1 row) step s3_sample: -- Sample stats to verify invariants mid-operation SELECT enqueued_events >= 0 AS enqueued_valid, dropped_events >= 0 AS dropped_valid, queue_size >= 0 AS size_valid, queue_size <= queue_capacity AS bounded FROM pg_stat_ch_stats(); enqueued_valid|dropped_valid|size_valid|bounded --------------+-------------+----------+------- t |t |t |t (1 row) enqueued_valid|dropped_valid|exported_valid|size_valid|size_bounded|capacity_valid --------------+-------------+--------------+----------+------------+-------------- t |t |t |t |t |t (1 row) starting permutation: s3_reset s1_flood s3_reset s2_flood s3_sample pg_stat_ch_reset ---------------- (1 row) step s3_reset: SELECT pg_stat_ch_reset(); pg_stat_ch_reset ---------------- (1 row) step s1_flood: -- Generate many events quickly DO $$ BEGIN FOR i IN 1..200 LOOP PERFORM i; END LOOP; END $$; step s3_reset: SELECT pg_stat_ch_reset(); pg_stat_ch_reset ---------------- (1 row) step s2_flood: -- Generate many events quickly DO $$ BEGIN FOR i IN 1..200 LOOP PERFORM i; END LOOP; END $$; step s3_sample: -- Sample stats to verify invariants mid-operation SELECT enqueued_events >= 0 AS enqueued_valid, dropped_events >= 0 AS dropped_valid, queue_size >= 0 AS size_valid, queue_size <= queue_capacity AS bounded FROM pg_stat_ch_stats(); enqueued_valid|dropped_valid|size_valid|bounded --------------+-------------+----------+------- t |t |t |t (1 row) enqueued_valid|dropped_valid|exported_valid|size_valid|size_bounded|capacity_valid --------------+-------------+--------------+----------+------------+-------------- t |t |t |t |t |t (1 row) starting permutation: s1_flood s2_flood s3_reset s3_verify_reset pg_stat_ch_reset ---------------- (1 row) step s1_flood: -- Generate many events quickly DO $$ BEGIN FOR i IN 1..200 LOOP PERFORM i; END LOOP; END $$; step s2_flood: -- Generate many events quickly DO $$ BEGIN FOR i IN 1..200 LOOP PERFORM i; END LOOP; END $$; step s3_reset: SELECT pg_stat_ch_reset(); pg_stat_ch_reset ---------------- (1 row) step s3_verify_reset: -- After reset, counters should be at baseline SELECT dropped_events = 0 AS drops_cleared FROM pg_stat_ch_stats(); drops_cleared ------------- t (1 row) enqueued_valid|dropped_valid|exported_valid|size_valid|size_bounded|capacity_valid --------------+-------------+--------------+----------+------------+-------------- t |t |t |t |t |t (1 row) starting permutation: s1_flood s1_check s2_flood s2_check s3_sample pg_stat_ch_reset ---------------- (1 row) step s1_flood: -- Generate many events quickly DO $$ BEGIN FOR i IN 1..200 LOOP PERFORM i; END LOOP; END $$; step s1_check: SELECT enqueued_events > 0 AS has_events, queue_size <= queue_capacity AS bounded FROM pg_stat_ch_stats(); has_events|bounded ----------+------- t |t (1 row) step s2_flood: -- Generate many events quickly DO $$ BEGIN FOR i IN 1..200 LOOP PERFORM i; END LOOP; END $$; step s2_check: SELECT enqueued_events > 0 AS has_events, queue_size <= queue_capacity AS bounded FROM pg_stat_ch_stats(); has_events|bounded ----------+------- t |t (1 row) step s3_sample: -- Sample stats to verify invariants mid-operation SELECT enqueued_events >= 0 AS enqueued_valid, dropped_events >= 0 AS dropped_valid, queue_size >= 0 AS size_valid, queue_size <= queue_capacity AS bounded FROM pg_stat_ch_stats(); enqueued_valid|dropped_valid|size_valid|bounded --------------+-------------+----------+------- t |t |t |t (1 row) enqueued_valid|dropped_valid|exported_valid|size_valid|size_bounded|capacity_valid --------------+-------------+--------------+----------+------------+-------------- t |t |t |t |t |t (1 row) starting permutation: s3_sample s1_flood s3_sample s2_flood s3_sample pg_stat_ch_reset ---------------- (1 row) step s3_sample: -- Sample stats to verify invariants mid-operation SELECT enqueued_events >= 0 AS enqueued_valid, dropped_events >= 0 AS dropped_valid, queue_size >= 0 AS size_valid, queue_size <= queue_capacity AS bounded FROM pg_stat_ch_stats(); enqueued_valid|dropped_valid|size_valid|bounded --------------+-------------+----------+------- t |t |t |t (1 row) step s1_flood: -- Generate many events quickly DO $$ BEGIN FOR i IN 1..200 LOOP PERFORM i; END LOOP; END $$; step s3_sample: -- Sample stats to verify invariants mid-operation SELECT enqueued_events >= 0 AS enqueued_valid, dropped_events >= 0 AS dropped_valid, queue_size >= 0 AS size_valid, queue_size <= queue_capacity AS bounded FROM pg_stat_ch_stats(); enqueued_valid|dropped_valid|size_valid|bounded --------------+-------------+----------+------- t |t |t |t (1 row) step s2_flood: -- Generate many events quickly DO $$ BEGIN FOR i IN 1..200 LOOP PERFORM i; END LOOP; END $$; step s3_sample: -- Sample stats to verify invariants mid-operation SELECT enqueued_events >= 0 AS enqueued_valid, dropped_events >= 0 AS dropped_valid, queue_size >= 0 AS size_valid, queue_size <= queue_capacity AS bounded FROM pg_stat_ch_stats(); enqueued_valid|dropped_valid|size_valid|bounded --------------+-------------+----------+------- t |t |t |t (1 row) enqueued_valid|dropped_valid|exported_valid|size_valid|size_bounded|capacity_valid --------------+-------------+--------------+----------+------------+-------------- t |t |t |t |t |t (1 row)