pgq_coop.register_subconsumer: make sure main consumer exists
authorMarko Kreen <markokr@gmail.com>
Tue, 28 Jun 2011 13:38:47 +0000 (16:38 +0300)
committerMarko Kreen <markokr@gmail.com>
Wed, 29 Jun 2011 07:11:05 +0000 (10:11 +0300)
sql/pgq_coop/functions/pgq_coop.register_subconsumer.sql
sql/pgq_coop/sql/pgq_coop_test.sql

index 422e2a517e193e4755a8206eabbb9a572a3ae444..1a2de4066d9efb22cc5c2b0f310abe5cf793acf9 100644 (file)
@@ -26,7 +26,9 @@ declare
     r record;
 begin
     _subcon_name := i_consumer_name || '.' || i_subconsumer_name;
-    -- er... shouldn't we lock the subscription table?
+
+    -- make sure main consumer exists
+    perform pgq.register_consumer(i_queue_name, i_consumer_name);
 
     -- just go and register the subconsumer as a regular consumer
     _subcon_result := pgq.register_consumer(i_queue_name, _subcon_name);
index 651e96676946b19baba33d6fb7eb865d7c7ea718..2a6ae6167ddda312deb7dc1a7b8bf465a9515dd9 100644 (file)
@@ -9,7 +9,7 @@ select pgq.create_queue('testqueue');
 update pgq.queue set queue_ticker_max_count = 1 where queue_name = 'testqueue';
 
 -- register
-select pgq.register_consumer('testqueue', 'maincons');
+select pgq_coop.register_subconsumer('testqueue', 'maincons', 'subcons1');
 select pgq_coop.register_subconsumer('testqueue', 'maincons', 'subcons1');
 select pgq_coop.register_subconsumer('testqueue', 'maincons', 'subcons1');
 select pgq_coop.register_subconsumer('testqueue', 'maincons', 'subcons2');
@@ -35,6 +35,7 @@ select pgq_coop.next_batch('testqueue', 'maincons', 'subcons2');
 select pgq_coop.finish_batch(2);
 
 -- test takeover
+select pgq_coop.next_batch('testqueue', 'maincons', 'subcons2', '1 hour');
 update pgq.subscription set sub_active = '2005-01-01' where sub_batch is not null;
 select pgq_coop.next_batch('testqueue', 'maincons', 'subcons2', '1 hour');