From 2771288107f67c01a605d836281dcefbfcc79e5f Mon Sep 17 00:00:00 2001
From: Julien Muchembled <jm@nexedi.com>
Date: Fri, 27 Apr 2012 16:37:17 +0200
Subject: [PATCH] CMFActivity: fix possible over-reservation of messages

This often happens during reindexation of many objects:
the number of processable grouped messages often exceeds 100
and 1 extra message is reserved for nothing.

This fixes a regression caused by f02bc341c36fe2a2809328ac1cb2adfe0290891a
("CMFActivity: automatically reselect messages in 'processing=1' state").
---
 product/CMFActivity/Activity/SQLBase.py | 12 ++++++++----
 1 file changed, 8 insertions(+), 4 deletions(-)

diff --git a/product/CMFActivity/Activity/SQLBase.py b/product/CMFActivity/Activity/SQLBase.py
index 12866c4dba..353bd31f69 100644
--- a/product/CMFActivity/Activity/SQLBase.py
+++ b/product/CMFActivity/Activity/SQLBase.py
@@ -146,11 +146,15 @@ class SQLBase(Queue):
         If None (or not given) no limit apply.
     """
     select = activity_tool.SQLBase_selectReservedMessageList
-    result = not group_method_id and select(table=self.sql_table, count=limit,
-                                            processing_node=processing_node)
-    if not result:
+    if group_method_id:
+      reserve = limit - 1
+    else:
+      result = select(table=self.sql_table, count=limit,
+                      processing_node=processing_node)
+      reserve = limit - len(result)
+    if reserve:
       activity_tool.SQLBase_reserveMessageList(table=self.sql_table,
-        count=limit, processing_node=processing_node, to_date=date,
+        count=reserve, processing_node=processing_node, to_date=date,
         group_method_id=group_method_id)
       result = select(table=self.sql_table,
                       processing_node=processing_node, count=limit)
-- 
2.30.9