diefenbach / django-lfs

An online-shop based on Django
http://www.getlfs.com
BSD 3-Clause "New" or "Revised" License
622 stars 222 forks source link

Concurrent checkouts leads to incorrect value for product stock #203

Closed TWarszawski closed 7 years ago

TWarszawski commented 8 years ago

When two customers check out concurrently for the same product, only one of the checkouts may be reflected in the final value for product stock.

Steps to reproduce:

  1. Start demo site, create two customers, create/pick test product.
  2. Both customers add the product their cart and Perform a checkout concurrently, making sure both customers finish checkout (click the Submit Order button) as close to the same time as possible.

We have reproduced this behavior on a single machine, by performing the above steps with one customer in one browser window and another customer in a second browser window with a short communication delay (100 ms) between the database and application. If connecting to the database using unix sockets, the following script can act as a proxy that delays packets: https://gist.github.com/TWarszawski/a0d8dd8aea9eb5b774d64c9f826de6db

Expected Result: The final product stock value is original - 2.

Actual Result: The final product stock value is original - 1, or the application crashes. See log: stacktrace.txt

diefenbach commented 7 years ago

Should be fixed in dev. Please reopen if it's not the case.

https://github.com/diefenbach/django-lfs/pull/205/commits/5c53fc82126b7a227b1b31d312589e29dd77a910