pgq_node: avoid concurrency in promote/demote
authorMarko Kreen <markokr@gmail.com>
Mon, 27 Oct 2014 13:51:42 +0000 (15:51 +0200)
committerMarko Kreen <markokr@gmail.com>
Mon, 27 Oct 2014 13:51:42 +0000 (15:51 +0200)
sql/pgq_node/functions/pgq_node.demote_root.sql
sql/pgq_node/functions/pgq_node.promote_branch.sql

index d3f68d03967f90f6b4eb5d5dae45ea378e44a593..a1c67aaf2711f759944632ba32c95b539c85cb6e 100644 (file)
@@ -36,7 +36,8 @@ declare
 begin
     select node_type, worker_name into n_type, w_name
         from pgq_node.node_info
-        where queue_name = i_queue_name;
+        where queue_name = i_queue_name
+        for update;
     if not found then
         select 404, 'Node not initialized for queue: ' || i_queue_name
           into ret_code, ret_note;
index 9e2c7a26edb3e942b1098008e8318b80c1be46d8..c19511a96a2fce23d9ef6ddc680447edbc6b5447 100644 (file)
@@ -26,7 +26,8 @@ declare
 begin
     select node_name, node_type, worker_name into n_name, n_type, w_name
         from pgq_node.node_info
-        where queue_name = i_queue_name;
+        where queue_name = i_queue_name
+        for update;
     if not found then
         select 404, 'Node not initialized for queue: ' || i_queue_name
           into ret_code, ret_note;