On Mar 1, 2011, at 11:35, lirc201 wrote:

> I like the example on the weblink which is just using MySQL
> functionality, it is very clever.  Thanks for the help and push.  My
> code is working!  I did like the security tricks I discovered for my
> updates below to only pass a field list.
> 
> function updateInventory($id, $quantity) {
>               $inv = $this->getQuantity($id);   <- function is in the same 
> model
>               $this->data['Model']['id'] = $id;
>               $this->data['Model']['inventory'] = $inv + $quantity;
>               if($this->save($this->data, array(
>                                       'validate' => 'false',
>                                       'fieldList' => array('id', 
> 'inventory')))) {
>                 ... logic for return values ...
>               }
> }

This is not atomic. Between the line where you get the current quantity and the 
line where you save the updated quantity, someone else might have updated the 
quantity, and you'd be wiping out their change. Consider two managers 
simultaneously adding 5 to the inventory of the same item. The expected result 
would be that in the end the inventory is incremented by 10, but because of the 
race condition in your code, it might only be incremented by 5.



-- 
Our newest site for the community: CakePHP Video Tutorials 
http://tv.cakephp.org 
Check out the new CakePHP Questions site http://ask.cakephp.org and help others 
with their CakePHP related questions.


To unsubscribe from this group, send email to
[email protected] For more options, visit this group at 
http://groups.google.com/group/cake-php

Reply via email to