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:
Start demo site, create two customers, create/pick test product.
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
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:
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