Public bug reported:
Crons from the ir.cron are started by the method _run_jobs_multithread in the
ir_cron Module. This method creates an own postgres cursor and sets an exlusive
lock on the job row to prevent that the job is startet twice. This cursor is
than given as arg to the job thread. This would be safe if the job would not
make a commit on the cursor, cause in that case the exclusive lock on the table
row is released.
The email queue job calls the method process_email_queue wich uses the method
send to send all mails, altough it uses the method send with the arg
auto_commit=True, wich does a cursor commit() wich releases the lock on the
table.
In our case the following happens:
10:00:00 process_email_queue is startet and row is locked, email(ID 1) beginns
to send
10:00:01 email(ID 1) is sent, cr.commit, email(ID 2) is sent with a large
attachment.
10:00:02 run_event_scheduler wakes up cron, process_email_queue is startet
again as next start time has not been changed and the row isnt locked anymore,
as the process has a new cursor and email(ID 2) hasnt been sent, it is sent
again.
The solution would be to use an extra cursor if using the send method in
mail/mail_message.py with autocommit=True.
kind regards,
Nils
** Affects: openobject-addons
Importance: Undecided
Status: New
** Description changed:
- Crons from the ir.cron are started by the method _run_jobs_multithread in the
ir_cron Module.
- This method creates an own postgres cursor and sets an exlusive lock on the
job row to prevent
- that the job is startet twice. This cursor is than given as arg to the job
thread. This would be
- safe if the job would not make a commit on the cursor, cause in that case the
exclusive lock on the table
- row is released.
+ Crons from the ir.cron are started by the method _run_jobs_multithread in the
ir_cron Module. This method creates an own postgres cursor and sets an exlusive
lock on the job row to prevent that the job is startet twice. This cursor is
than given as arg to the job thread. This would be safe if the job would not
make a commit on the cursor, cause in that case the exclusive lock on the table
row is released.
The email queue job calls the method process_email_queue wich uses the method
send to send all mails, altough it uses the method send with the arg
auto_commit=True, wich does a cursor commit() wich releases the lock on the
table.
In our case the following happens:
- 10:00:00 process_email_queue is startet and row is locked, email(ID 1)
beginns to send
+ 10:00:00 process_email_queue is startet and row is locked, email(ID 1)
beginns to send
10:00:01 email(ID 1) is sent, cr.commit, email(ID 2) is sent with a large
attachment.
10:00:02 run_event_scheduler wakes up cron, process_email_queue is startet
again as next start time has not been changed and the row isnt locked anymore,
as the process has a new cursor and email(ID 2) hasnt been sent, it is sent
again.
The solution would be to use an extra cursor if using the send method in
mail/mail_message.py with autocommit=True.
kind regards,
Nils
--
You received this bug notification because you are a member of OpenERP
Indian Team, which is subscribed to OpenERP Addons.
https://bugs.launchpad.net/bugs/1231282
Title:
Email Scheduler runs twice and Mails are sent twice in OpenERP 6.1
Addons rev(7250)
Status in OpenERP Addons (modules):
New
Bug description:
Crons from the ir.cron are started by the method _run_jobs_multithread in the
ir_cron Module. This method creates an own postgres cursor and sets an exlusive
lock on the job row to prevent that the job is startet twice. This cursor is
than given as arg to the job thread. This would be safe if the job would not
make a commit on the cursor, cause in that case the exclusive lock on the table
row is released.
The email queue job calls the method process_email_queue wich uses the method
send to send all mails, altough it uses the method send with the arg
auto_commit=True, wich does a cursor commit() wich releases the lock on the
table.
In our case the following happens:
10:00:00 process_email_queue is startet and row is locked, email(ID 1)
beginns to send
10:00:01 email(ID 1) is sent, cr.commit, email(ID 2) is sent with a large
attachment.
10:00:02 run_event_scheduler wakes up cron, process_email_queue is startet
again as next start time has not been changed and the row isnt locked anymore,
as the process has a new cursor and email(ID 2) hasnt been sent, it is sent
again.
The solution would be to use an extra cursor if using the send method
in mail/mail_message.py with autocommit=True.
kind regards,
Nils
To manage notifications about this bug go to:
https://bugs.launchpad.net/openobject-addons/+bug/1231282/+subscriptions
_______________________________________________
Mailing list: https://launchpad.net/~openerp-india
Post to : [email protected]
Unsubscribe : https://launchpad.net/~openerp-india
More help : https://help.launchpad.net/ListHelp