def prepareQueueMessageList(self, activity_tool, message_list): db = activity_tool.getSQLConnection() quote = db.string_literal def insert(reset_uid): values = self._insert_separator.join(values_list) del values_list[:] for _ in xrange(UID_ALLOCATION_TRY_COUNT): if reset_uid: reset_uid = False # Overflow will result into IntegrityError. db.query("SET @uid := %s" % getrandbits(UID_SAFE_BITSIZE)) try: db.query(self._insert_template % (self.sql_table, values)) except MySQLdb.IntegrityError as e: if e.args[0] != DUP_ENTRY: raise reset_uid = True else: break else: raise ValueError( "Maximum retry for prepareQueueMessageList reached") i = 0 reset_uid = True values_list = [] max_payload = self._insert_max_payload sep_len = len(self._insert_separator) hasDependency = self._hasDependency for m in message_list: if m.is_registered: active_process_uid = m.active_process_uid date = m.activity_kw.get('at_date') row = ','.join( ('@uid+%s' % i, quote('/'.join(m.object_path)), 'NULL' if active_process_uid is None else str(active_process_uid), "UTC_TIMESTAMP(6)" if date is None else quote(render_datetime(date)), quote(m.method_id), '-1' if hasDependency(m) else '0', str(m.activity_kw.get('priority', 1)), quote(m.getGroupId()), quote(m.activity_kw.get('tag', '')), quote(m.activity_kw.get('signature', '')), quote(m.activity_kw.get('serialization_tag', '')), quote(Message.dump(m)))) i += 1 n = sep_len + len(row) max_payload -= n if max_payload < 0: if values_list: insert(reset_uid) reset_uid = False max_payload = self._insert_max_payload - n else: raise ValueError( "max_allowed_packet too small to insert message") values_list.append(row) if values_list: insert(reset_uid)
if m.is_registered: active_process_uid = m.active_process_uid date = m.activity_kw.get('at_date') row = ','.join(( '@uid+%s' % i, quote('/'.join(m.object_path)), 'NULL' if active_process_uid is None else str(active_process_uid), "UTC_TIMESTAMP(6)" if date is None else quote(render_datetime(date)), quote(m.method_id), '-1' if hasDependency(m) else '0', str(m.activity_kw.get('priority', 1)), str(m.activity_kw.get('node', 0)), quote(m.getGroupId()), quote(m.activity_kw.get('tag', '')), quote(m.activity_kw.get('serialization_tag', '')), quote(Message.dump(m)))) i += 1 n = sep_len + len(row) max_payload -= n if max_payload < 0: if values_list: insert(reset_uid) reset_uid = False max_payload = self._insert_max_payload - n else: raise ValueError("max_allowed_packet too small to insert message") values_list.append(row) if values_list: insert(reset_uid) def _getMessageList(self, db, count=1000, src__=0, **kw):