diff options
-rw-r--r-- | sql/pgq/Makefile | 2 | ||||
-rw-r--r-- | sql/pgq/expected/logutriga.out | 8 | ||||
-rw-r--r-- | sql/pgq/expected/pgq_core.out | 267 | ||||
-rw-r--r-- | sql/pgq/expected/pgq_init.out | 252 | ||||
-rw-r--r-- | sql/pgq/sql/pgq_core.sql | 66 | ||||
-rw-r--r-- | sql/pgq/sql/pgq_init.sql | 59 |
6 files changed, 338 insertions, 316 deletions
diff --git a/sql/pgq/Makefile b/sql/pgq/Makefile index f9094311..de1787d5 100644 --- a/sql/pgq/Makefile +++ b/sql/pgq/Makefile @@ -7,7 +7,7 @@ SRCS = $(wildcard structure/*.sql) \ $(wildcard functions/*.sql) \ $(wildcard triggers/*.sql) -REGRESS = pgq_init logutriga sqltriga +REGRESS = pgq_init pgq_core logutriga sqltriga REGRESS_OPTS = --load-language=plpythonu --load-language=plpgsql PGXS = $(shell pg_config --pgxs) diff --git a/sql/pgq/expected/logutriga.out b/sql/pgq/expected/logutriga.out index 6c7f9b14..5a0384d1 100644 --- a/sql/pgq/expected/logutriga.out +++ b/sql/pgq/expected/logutriga.out @@ -15,8 +15,8 @@ NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "udata_pkey" for create trigger utest AFTER insert or update or delete ON udata for each row execute procedure pgq.logutriga('udata_que'); insert into udata (txt) values ('text1'); -ERROR: plpython: function "logutriga" failed -DETAIL: exceptions.NameError: global name 'rowdata' is not defined +NOTICE: insert_event(udata_que, I, bin&txt=text1&id=1, public.udata) +CONTEXT: SQL statement "SELECT pgq.insert_event($1, $2, $3, $4, $5, null, null)" insert into udata (bin) values (E'bi\tn\\000bin'); -ERROR: plpython: function "logutriga" failed -DETAIL: exceptions.NameError: global name 'rowdata' is not defined +NOTICE: insert_event(udata_que, I, bin=bi%5C011n%5C000bin&txt&id=2, public.udata) +CONTEXT: SQL statement "SELECT pgq.insert_event($1, $2, $3, $4, $5, null, null)" diff --git a/sql/pgq/expected/pgq_core.out b/sql/pgq/expected/pgq_core.out new file mode 100644 index 00000000..a70ab501 --- /dev/null +++ b/sql/pgq/expected/pgq_core.out @@ -0,0 +1,267 @@ +select * from pgq.maint_tables_to_vacuum(); + maint_tables_to_vacuum +------------------------ + pgq.subscription + pgq.consumer + pgq.queue + pgq.tick + pgq.retry_queue +(5 rows) + +select * from pgq.maint_retry_events(); + maint_retry_events +-------------------- + 0 +(1 row) + +select pgq.create_queue('tmpqueue'); + create_queue +-------------- + 1 +(1 row) + +select pgq.register_consumer('tmpqueue', 'consumer'); + register_consumer +------------------- + 1 +(1 row) + +select pgq.unregister_consumer('tmpqueue', 'consumer'); + unregister_consumer +--------------------- + 1 +(1 row) + +select pgq.drop_queue('tmpqueue'); + drop_queue +------------ + 1 +(1 row) + +select pgq.create_queue('myqueue'); + create_queue +-------------- + 1 +(1 row) + +select pgq.register_consumer('myqueue', 'consumer'); + register_consumer +------------------- + 1 +(1 row) + +select pgq.next_batch('myqueue', 'consumer'); + next_batch +------------ + +(1 row) + +select pgq.next_batch('myqueue', 'consumer'); + next_batch +------------ + +(1 row) + +select pgq.ticker(); + ticker +-------- + 1 +(1 row) + +select pgq.next_batch('myqueue', 'consumer'); + next_batch +------------ + 1 +(1 row) + +select pgq.next_batch('myqueue', 'consumer'); + next_batch +------------ + 1 +(1 row) + +select queue_name, consumer_name, prev_tick_id, tick_id, lag from pgq.get_batch_info(1); + queue_name | consumer_name | prev_tick_id | tick_id | lag +------------+---------------+--------------+---------+------------- + myqueue | consumer | 1 | 2 | @ 0.00 secs +(1 row) + +select queue_name from pgq.get_queue_info() limit 0; + queue_name +------------ +(0 rows) + +select queue_name, consumer_name from pgq.get_consumer_info() limit 0; + queue_name | consumer_name +------------+--------------- +(0 rows) + +select pgq.finish_batch(1); + finish_batch +-------------- + 1 +(1 row) + +select pgq.finish_batch(1); +WARNING: finish_batch: batch 1 not found + finish_batch +-------------- + 0 +(1 row) + +select pgq.ticker(); + ticker +-------- + 1 +(1 row) + +select pgq.next_batch('myqueue', 'consumer'); + next_batch +------------ + 2 +(1 row) + +select * from pgq.batch_event_tables(2); + batch_event_tables +-------------------- + pgq.event_2_0 +(1 row) + +select * from pgq.get_batch_events(2); + ev_id | ev_time | ev_txid | ev_retry | ev_type | ev_data | ev_extra1 | ev_extra2 | ev_extra3 | ev_extra4 +-------+---------+---------+----------+---------+---------+-----------+-----------+-----------+----------- +(0 rows) + +select pgq.finish_batch(2); + finish_batch +-------------- + 1 +(1 row) + +select pgq.insert_event('myqueue', 'r1', 'data'); + insert_event +-------------- + 1 +(1 row) + +select pgq.insert_event('myqueue', 'r2', 'data'); + insert_event +-------------- + 2 +(1 row) + +select pgq.insert_event('myqueue', 'r3', 'data'); + insert_event +-------------- + 3 +(1 row) + +select pgq.current_event_table('myqueue'); + current_event_table +--------------------- + pgq.event_2_0 +(1 row) + +select pgq.ticker(); + ticker +-------- + 1 +(1 row) + +select pgq.next_batch('myqueue', 'consumer'); + next_batch +------------ + 3 +(1 row) + +select ev_id,ev_retry,ev_type,ev_data,ev_extra1,ev_extra2,ev_extra3,ev_extra4 from pgq.get_batch_events(3); + ev_id | ev_retry | ev_type | ev_data | ev_extra1 | ev_extra2 | ev_extra3 | ev_extra4 +-------+----------+---------+---------+-----------+-----------+-----------+----------- + 1 | | r1 | data | | | | + 2 | | r2 | data | | | | + 3 | | r3 | data | | | | +(3 rows) + +select * from pgq.failed_event_list('myqueue', 'consumer'); + ev_failed_reason | ev_failed_time | ev_id | ev_time | ev_txid | ev_owner | ev_retry | ev_type | ev_data | ev_extra1 | ev_extra2 | ev_extra3 | ev_extra4 +------------------+----------------+-------+---------+---------+----------+----------+---------+---------+-----------+-----------+-----------+----------- +(0 rows) + +select pgq.event_failed(3, 1, 'failure test'); + event_failed +-------------- + 1 +(1 row) + +select pgq.event_failed(3, 1, 'failure test'); + event_failed +-------------- + 0 +(1 row) + +select pgq.event_retry(3, 2, 0); + event_retry +------------- + 1 +(1 row) + +select pgq.event_retry(3, 2, 0); + event_retry +------------- + 0 +(1 row) + +select pgq.finish_batch(3); + finish_batch +-------------- + 1 +(1 row) + +select ev_failed_reason, ev_id, ev_txid, ev_retry, ev_type, ev_data + from pgq.failed_event_list('myqueue', 'consumer'); + ev_failed_reason | ev_id | ev_txid | ev_retry | ev_type | ev_data +------------------+-------+---------+----------+---------+--------- + failure test | 1 | | 0 | r1 | data +(1 row) + +select ev_failed_reason, ev_id, ev_txid, ev_retry, ev_type, ev_data + from pgq.failed_event_list('myqueue', 'consumer', 0, 1); + ev_failed_reason | ev_id | ev_txid | ev_retry | ev_type | ev_data +------------------+-------+---------+----------+---------+--------- +(0 rows) + +select * from pgq.failed_event_count('myqueue', 'consumer'); + failed_event_count +-------------------- + 1 +(1 row) + +select * from pgq.failed_event_delete('myqueue', 'consumer', 0); +ERROR: event not found +select pgq.event_retry_raw('myqueue', 'consumer', now(), 666, now(), 0, + 'rawtest', 'data', null, null, null, null); + event_retry_raw +----------------- + 666 +(1 row) + +select pgq.ticker(); + ticker +-------- + 1 +(1 row) + +-- test maint +update pgq.queue set queue_rotation_period = '0 seconds'; +select queue_name, pgq.maint_rotate_tables_step1(queue_name) from pgq.queue; + queue_name | maint_rotate_tables_step1 +------------+--------------------------- + myqueue | 1 +(1 row) + +select pgq.maint_rotate_tables_step2(); + maint_rotate_tables_step2 +--------------------------- + 1 +(1 row) + diff --git a/sql/pgq/expected/pgq_init.out b/sql/pgq/expected/pgq_init.out index 67b555ca..25fdbb1a 100644 --- a/sql/pgq/expected/pgq_init.out +++ b/sql/pgq/expected/pgq_init.out @@ -1,253 +1 @@ \set ECHO none -select * from pgq.maint_tables_to_vacuum(); - maint_tables_to_vacuum ------------------------- - pgq.subscription - pgq.queue - pgq.tick - pgq.retry_queue -(4 rows) - -select * from pgq.maint_retry_events(); - maint_retry_events --------------------- - 0 -(1 row) - -select pgq.create_queue('tmpqueue'); - create_queue --------------- - 1 -(1 row) - -select pgq.register_consumer('tmpqueue', 'consumer'); - register_consumer -------------------- - 1 -(1 row) - -select pgq.unregister_consumer('tmpqueue', 'consumer'); - unregister_consumer ---------------------- - 1 -(1 row) - -select pgq.drop_queue('tmpqueue'); - drop_queue ------------- - 1 -(1 row) - -select pgq.create_queue('myqueue'); - create_queue --------------- - 1 -(1 row) - -select pgq.register_consumer('myqueue', 'consumer'); - register_consumer -------------------- - 1 -(1 row) - -select pgq.next_batch('myqueue', 'consumer'); - next_batch ------------- - -(1 row) - -select pgq.next_batch('myqueue', 'consumer'); - next_batch ------------- - -(1 row) - -select pgq.ticker(); - ticker --------- - 1 -(1 row) - -select pgq.next_batch('myqueue', 'consumer'); - next_batch ------------- - 1 -(1 row) - -select pgq.next_batch('myqueue', 'consumer'); - next_batch ------------- - 1 -(1 row) - -select queue_name, consumer_name, prev_tick_id, tick_id, lag from pgq.get_batch_info(1); - queue_name | consumer_name | prev_tick_id | tick_id | lag -------------+---------------+--------------+---------+------------- - myqueue | consumer | 1 | 2 | @ 0.00 secs -(1 row) - -select queue_name from pgq.get_queue_info() limit 0; - queue_name ------------- -(0 rows) - -select queue_name, consumer_name from pgq.get_consumer_info() limit 0; - queue_name | consumer_name -------------+--------------- -(0 rows) - -select pgq.finish_batch(1); - finish_batch --------------- - 1 -(1 row) - -select pgq.finish_batch(1); -WARNING: finish_batch: batch 1 not found - finish_batch --------------- - 0 -(1 row) - -select pgq.ticker(); - ticker --------- - 1 -(1 row) - -select pgq.next_batch('myqueue', 'consumer'); - next_batch ------------- - 2 -(1 row) - -select * from pgq.batch_event_tables(2); - batch_event_tables --------------------- - pgq.event_2_0 -(1 row) - -select * from pgq.get_batch_events(2); - ev_id | ev_time | ev_txid | ev_retry | ev_type | ev_data | ev_extra1 | ev_extra2 | ev_extra3 | ev_extra4 --------+---------+---------+----------+---------+---------+-----------+-----------+-----------+----------- -(0 rows) - -select pgq.finish_batch(2); - finish_batch --------------- - 1 -(1 row) - -select pgq.insert_event('myqueue', 'r1', 'data'); - insert_event --------------- - 1 -(1 row) - -select pgq.insert_event('myqueue', 'r2', 'data'); - insert_event --------------- - 2 -(1 row) - -select pgq.insert_event('myqueue', 'r3', 'data'); - insert_event --------------- - 3 -(1 row) - -select pgq.current_event_table('myqueue'); - current_event_table ---------------------- - pgq.event_2_0 -(1 row) - -select pgq.ticker(); - ticker --------- - 1 -(1 row) - -select pgq.next_batch('myqueue', 'consumer'); - next_batch ------------- - 3 -(1 row) - -select ev_id,ev_retry,ev_type,ev_data,ev_extra1,ev_extra2,ev_extra3,ev_extra4 from pgq.get_batch_events(3); - ev_id | ev_retry | ev_type | ev_data | ev_extra1 | ev_extra2 | ev_extra3 | ev_extra4 --------+----------+---------+---------+-----------+-----------+-----------+----------- - 1 | | r1 | data | | | | - 2 | | r2 | data | | | | - 3 | | r3 | data | | | | -(3 rows) - -select * from pgq.failed_event_list('myqueue', 'consumer'); - ev_failed_reason | ev_failed_time | ev_id | ev_time | ev_txid | ev_owner | ev_retry | ev_type | ev_data | ev_extra1 | ev_extra2 | ev_extra3 | ev_extra4 -------------------+----------------+-------+---------+---------+----------+----------+---------+---------+-----------+-----------+-----------+----------- -(0 rows) - -select pgq.event_failed(3, 1, 'failure test'); - event_failed --------------- - 1 -(1 row) - -select pgq.event_failed(3, 1, 'failure test'); - event_failed --------------- - 0 -(1 row) - -select pgq.event_retry(3, 2, 0); - event_retry -------------- - 1 -(1 row) - -select pgq.event_retry(3, 2, 0); - event_retry -------------- - 0 -(1 row) - -select pgq.finish_batch(3); - finish_batch --------------- - 1 -(1 row) - -select ev_failed_reason, ev_id, ev_txid, ev_retry, ev_type, ev_data - from pgq.failed_event_list('myqueue', 'consumer'); - ev_failed_reason | ev_id | ev_txid | ev_retry | ev_type | ev_data -------------------+-------+---------+----------+---------+--------- - failure test | 1 | | 0 | r1 | data -(1 row) - -select ev_failed_reason, ev_id, ev_txid, ev_retry, ev_type, ev_data - from pgq.failed_event_list('myqueue', 'consumer', 0, 1); - ev_failed_reason | ev_id | ev_txid | ev_retry | ev_type | ev_data -------------------+-------+---------+----------+---------+--------- -(0 rows) - -select * from pgq.failed_event_count('myqueue', 'consumer'); - failed_event_count --------------------- - 1 -(1 row) - -select * from pgq.failed_event_delete('myqueue', 'consumer', 0); -ERROR: event not found -select pgq.event_retry_raw('myqueue', 'consumer', now(), 666, now(), 0, - 'rawtest', 'data', null, null, null, null); - event_retry_raw ------------------ - 666 -(1 row) - -select pgq.ticker(); - ticker --------- - 1 -(1 row) - diff --git a/sql/pgq/sql/pgq_core.sql b/sql/pgq/sql/pgq_core.sql new file mode 100644 index 00000000..a3f724d1 --- /dev/null +++ b/sql/pgq/sql/pgq_core.sql @@ -0,0 +1,66 @@ + +select * from pgq.maint_tables_to_vacuum(); +select * from pgq.maint_retry_events(); + +select pgq.create_queue('tmpqueue'); +select pgq.register_consumer('tmpqueue', 'consumer'); +select pgq.unregister_consumer('tmpqueue', 'consumer'); +select pgq.drop_queue('tmpqueue'); + +select pgq.create_queue('myqueue'); +select pgq.register_consumer('myqueue', 'consumer'); +select pgq.next_batch('myqueue', 'consumer'); +select pgq.next_batch('myqueue', 'consumer'); +select pgq.ticker(); +select pgq.next_batch('myqueue', 'consumer'); +select pgq.next_batch('myqueue', 'consumer'); + +select queue_name, consumer_name, prev_tick_id, tick_id, lag from pgq.get_batch_info(1); +select queue_name from pgq.get_queue_info() limit 0; +select queue_name, consumer_name from pgq.get_consumer_info() limit 0; + +select pgq.finish_batch(1); +select pgq.finish_batch(1); + +select pgq.ticker(); +select pgq.next_batch('myqueue', 'consumer'); +select * from pgq.batch_event_tables(2); +select * from pgq.get_batch_events(2); +select pgq.finish_batch(2); + +select pgq.insert_event('myqueue', 'r1', 'data'); +select pgq.insert_event('myqueue', 'r2', 'data'); +select pgq.insert_event('myqueue', 'r3', 'data'); +select pgq.current_event_table('myqueue'); +select pgq.ticker(); + +select pgq.next_batch('myqueue', 'consumer'); +select ev_id,ev_retry,ev_type,ev_data,ev_extra1,ev_extra2,ev_extra3,ev_extra4 from pgq.get_batch_events(3); + +select * from pgq.failed_event_list('myqueue', 'consumer'); + +select pgq.event_failed(3, 1, 'failure test'); +select pgq.event_failed(3, 1, 'failure test'); +select pgq.event_retry(3, 2, 0); +select pgq.event_retry(3, 2, 0); +select pgq.finish_batch(3); + +select ev_failed_reason, ev_id, ev_txid, ev_retry, ev_type, ev_data + from pgq.failed_event_list('myqueue', 'consumer'); + +select ev_failed_reason, ev_id, ev_txid, ev_retry, ev_type, ev_data + from pgq.failed_event_list('myqueue', 'consumer', 0, 1); + +select * from pgq.failed_event_count('myqueue', 'consumer'); +select * from pgq.failed_event_delete('myqueue', 'consumer', 0); + +select pgq.event_retry_raw('myqueue', 'consumer', now(), 666, now(), 0, + 'rawtest', 'data', null, null, null, null); + +select pgq.ticker(); + +-- test maint +update pgq.queue set queue_rotation_period = '0 seconds'; +select queue_name, pgq.maint_rotate_tables_step1(queue_name) from pgq.queue; +select pgq.maint_rotate_tables_step2(); + diff --git a/sql/pgq/sql/pgq_init.sql b/sql/pgq/sql/pgq_init.sql index 95f46459..565659ea 100644 --- a/sql/pgq/sql/pgq_init.sql +++ b/sql/pgq/sql/pgq_init.sql @@ -5,62 +5,3 @@ \set ECHO all -select * from pgq.maint_tables_to_vacuum(); -select * from pgq.maint_retry_events(); - -select pgq.create_queue('tmpqueue'); -select pgq.register_consumer('tmpqueue', 'consumer'); -select pgq.unregister_consumer('tmpqueue', 'consumer'); -select pgq.drop_queue('tmpqueue'); - -select pgq.create_queue('myqueue'); -select pgq.register_consumer('myqueue', 'consumer'); -select pgq.next_batch('myqueue', 'consumer'); -select pgq.next_batch('myqueue', 'consumer'); -select pgq.ticker(); -select pgq.next_batch('myqueue', 'consumer'); -select pgq.next_batch('myqueue', 'consumer'); - -select queue_name, consumer_name, prev_tick_id, tick_id, lag from pgq.get_batch_info(1); -select queue_name from pgq.get_queue_info() limit 0; -select queue_name, consumer_name from pgq.get_consumer_info() limit 0; - -select pgq.finish_batch(1); -select pgq.finish_batch(1); - -select pgq.ticker(); -select pgq.next_batch('myqueue', 'consumer'); -select * from pgq.batch_event_tables(2); -select * from pgq.get_batch_events(2); -select pgq.finish_batch(2); - -select pgq.insert_event('myqueue', 'r1', 'data'); -select pgq.insert_event('myqueue', 'r2', 'data'); -select pgq.insert_event('myqueue', 'r3', 'data'); -select pgq.current_event_table('myqueue'); -select pgq.ticker(); - -select pgq.next_batch('myqueue', 'consumer'); -select ev_id,ev_retry,ev_type,ev_data,ev_extra1,ev_extra2,ev_extra3,ev_extra4 from pgq.get_batch_events(3); - -select * from pgq.failed_event_list('myqueue', 'consumer'); - -select pgq.event_failed(3, 1, 'failure test'); -select pgq.event_failed(3, 1, 'failure test'); -select pgq.event_retry(3, 2, 0); -select pgq.event_retry(3, 2, 0); -select pgq.finish_batch(3); - -select ev_failed_reason, ev_id, ev_txid, ev_retry, ev_type, ev_data - from pgq.failed_event_list('myqueue', 'consumer'); - -select ev_failed_reason, ev_id, ev_txid, ev_retry, ev_type, ev_data - from pgq.failed_event_list('myqueue', 'consumer', 0, 1); - -select * from pgq.failed_event_count('myqueue', 'consumer'); -select * from pgq.failed_event_delete('myqueue', 'consumer', 0); - -select pgq.event_retry_raw('myqueue', 'consumer', now(), 666, now(), 0, - 'rawtest', 'data', null, null, null, null); - -select pgq.ticker(); |