Hi Ketan,
I'm afraid this will be really hard to solve without the code that is
raising this exception.
Some details that could help debug the issue:
1. Are your workers multi-threaded?
2. Are you sure you are not calling functions performing manual transaction
management?
3. Is your atomic() block using the same database involved in the
select_for_update() call?
e.g. Are you using transaction.atomic() (which will use the default
database)
but have database routers that could route reads/writes to another db?
Cheers,
Simon
Le samedi 25 mars 2017 15:08:19 UTC-4, Ketan Bhatt a écrit :
>
> I have a method that updates a row in the table.
> To avoid race condition, I locked the row using `select_for_update` inside
> an `atomic` block and doing the update.
> This method is called from a celery task.
>
> This works well on my local machine. But when this gets called on my
> production server (two tasks being picked up by two workers at the same
> time and therefore trying to access the same row at once), I get:
> `TransactionManagementError('select_for_update cannot be used outside of
> a transaction.',)`
>
> I checked that to use `select_for_update`, autocommit should be False.
> Inside the atomic block `get_autocommit` returns False.
>
> Now on production this must be returning `TRUE`.
>
>
> What could be the reason?
>
--
You received this message because you are subscribed to the Google Groups
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/django-users.
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-users/91f6b088-e255-4ff9-a9c5-f033ffdf4211%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.