From b411b407d472eec81a42da8d9a6126a4d890a316 Mon Sep 17 00:00:00 2001 From: Vincent Pelletier <vincent@nexedi.com> Date: Wed, 28 Mar 2007 13:57:56 +0000 Subject: [PATCH] Use portal_ids to generate message uids instead of using MySQL AUTO_INCREMENT. This will lower deadlock probability by removing the one caused by AUTO_INCREMENT table-level lock. git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@13757 20353a03-c40f-0410-a6d1-a30d3c3de9de --- product/CMFActivity/Activity/SQLQueue.py | 8 ++++++-- .../skins/activity/SQLQueue_createMessageTable.zsql | 2 +- .../CMFActivity/skins/activity/SQLQueue_writeMessage.zsql | 4 +++- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/product/CMFActivity/Activity/SQLQueue.py b/product/CMFActivity/Activity/SQLQueue.py index 5283484b43..3b6cb86d0d 100644 --- a/product/CMFActivity/Activity/SQLQueue.py +++ b/product/CMFActivity/Activity/SQLQueue.py @@ -61,7 +61,9 @@ class SQLQueue(RAMQueue): """ def prepareQueueMessage(self, activity_tool, m): if m.is_registered: - activity_tool.SQLQueue_writeMessage(path = '/'.join(m.object_path) , + #import pdb; pdb.set_trace() + activity_tool.SQLQueue_writeMessage(uid = activity_tool.getPortalObject().portal_ids.generateNewLengthId(id_group='portal_activity_queue'), + path = '/'.join(m.object_path) , method_id = m.method_id, priority = m.activity_kw.get('priority', 1), broadcast = m.activity_kw.get('broadcast', 0), @@ -316,8 +318,10 @@ class SQLQueue(RAMQueue): # Broadcast messages must be distributed into all nodes. activity_tool.SQLQueue_assignMessage(processing_node=1, uid=uid) if node_count > 1: + uid_list = activity_tool.getPortalObject().portal_ids.generateNewLengthIdList(id_group='portal_activity_queue', id_count=node_count - 1) for node in range(2, node_count+1): - activity_tool.SQLQueue_writeMessage( path = line.path, + activity_tool.SQLQueue_writeMessage(uid = uid_list.pop(), + path = line.path, method_id = line.method_id, priority = line.priority, broadcast = 1, diff --git a/product/CMFActivity/skins/activity/SQLQueue_createMessageTable.zsql b/product/CMFActivity/skins/activity/SQLQueue_createMessageTable.zsql index 6d00582520..932146bf79 100644 --- a/product/CMFActivity/skins/activity/SQLQueue_createMessageTable.zsql +++ b/product/CMFActivity/skins/activity/SQLQueue_createMessageTable.zsql @@ -9,7 +9,7 @@ class_file: </dtml-comment> <params></params> CREATE TABLE `message_queue` ( - `uid` int(11) NOT NULL auto_increment, + `uid` int(11) NOT NULL, `date` datetime, `path` VARCHAR(255), `method_id` VARCHAR(40), diff --git a/product/CMFActivity/skins/activity/SQLQueue_writeMessage.zsql b/product/CMFActivity/skins/activity/SQLQueue_writeMessage.zsql index 56bcb9b537..900364309e 100644 --- a/product/CMFActivity/skins/activity/SQLQueue_writeMessage.zsql +++ b/product/CMFActivity/skins/activity/SQLQueue_writeMessage.zsql @@ -7,7 +7,8 @@ cache_time:0 class_name: class_file: </dtml-comment> -<params>path +<params>uid +path method_id message priority @@ -17,6 +18,7 @@ date tag</params> INSERT INTO message_queue SET + uid = <dtml-sqlvar uid type="int">, path = <dtml-sqlvar path type="string">, <dtml-if date>date = <dtml-sqlvar date type="string">, <dtml-else>date = <dtml-sqlvar "_.DateTime()" type="datetime">, </dtml-if> method_id = <dtml-sqlvar method_id type="string">, -- 2.30.9