summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormartinko2014-08-05 12:16:41 +0000
committermartinko2014-08-05 12:16:41 +0000
commit0466144c87e5c8bf1e64c23156ce7d989d579498 (patch)
tree153fd47f825820ba730410f9c5e2843a7a3fa517
parent16a1376beebdf1b238c119695b843ea32ccfc7ce (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.sql5
-rw-r--r--sql/pgq/functions/pgq.unregister_consumer.sql12
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;