diff options
author | martinko | 2014-08-05 12:16:41 +0000 |
---|---|---|
committer | martinko | 2014-08-05 12:16:41 +0000 |
commit | 0466144c87e5c8bf1e64c23156ce7d989d579498 (patch) | |
tree | 153fd47f825820ba730410f9c5e2843a7a3fa517 | |
parent | 16a1376beebdf1b238c119695b843ea32ccfc7ce (diff) |
pgq: clean up pgq.consumer when consumer is unregistered
The goal is to leave no "garbage" that accumulates over time.
-rw-r--r-- | sql/pgq/functions/pgq.register_consumer.sql | 5 | ||||
-rw-r--r-- | sql/pgq/functions/pgq.unregister_consumer.sql | 12 |
2 files changed, 10 insertions, 7 deletions
diff --git a/sql/pgq/functions/pgq.register_consumer.sql b/sql/pgq/functions/pgq.register_consumer.sql index 55b38ead..9f42d9bc 100644 --- a/sql/pgq/functions/pgq.register_consumer.sql +++ b/sql/pgq/functions/pgq.register_consumer.sql @@ -55,7 +55,7 @@ returns integer as $$ declare tmp text; last_tick bigint; - x_queue_id integer; + x_queue_id integer; x_consumer_id integer; queue integer; sub record; @@ -68,7 +68,8 @@ begin -- get consumer and create if new select co_id into x_consumer_id from pgq.consumer - where co_name = x_consumer_name; + where co_name = x_consumer_name + for update; if not found then insert into pgq.consumer (co_name) values (x_consumer_name); x_consumer_id := currval('pgq.consumer_co_id_seq'); diff --git a/sql/pgq/functions/pgq.unregister_consumer.sql b/sql/pgq/functions/pgq.unregister_consumer.sql index d495c88e..eeb2524f 100644 --- a/sql/pgq/functions/pgq.unregister_consumer.sql +++ b/sql/pgq/functions/pgq.unregister_consumer.sql @@ -6,8 +6,8 @@ returns integer as $$ -- ---------------------------------------------------------------------- -- Function: pgq.unregister_consumer(2) -- --- Unsubscriber consumer from the queue. Also consumer's --- retry events are deleted. +-- Unsubscribe consumer from the queue. +-- Also consumer's retry events are deleted. -- -- Parameters: -- x_queue_name - Name of the queue @@ -36,7 +36,7 @@ begin and s.sub_consumer = c.co_id and q.queue_name = x_queue_name and c.co_name = x_consumer_name - for update of s; + for update of s, c; if not found then return 0; end if; @@ -51,7 +51,6 @@ begin delete from pgq.subscription where sub_id = x_sub_id and sub_consumer = _consumer_id; - return 1; else -- delete main consumer (including possible subconsumers) @@ -63,7 +62,10 @@ begin -- this will drop subconsumers too delete from pgq.subscription where sub_id = x_sub_id; - + + delete from pgq.consumer + where co_id = _consumer_id; + return _sub_id_cnt; end if; |