[Dbix-class] Optimistic locking

Steven Mackenzie dbix at aptile.co.uk
Tue Aug 8 11:31:04 CEST 2006


Dan Horne wrote:

>>On Behalf Of Zbigniew Lukasiak
>>
>>Hi,
>>
>>There will be race conditions - is that acceptable for you?  See following
>>    
>>
>scenario:
>  
>
>>Person A wants to save new record values
>>Person B wants to save new record values
>>A fetches the record to compute the hash
>>B fetches the record to compute the hash
>>The record has not been changed yet so both A and B are ready to save
>>    
>>
>their new values
>  
>
>>A saves her new values
>>B saves her new values
>>
>>The result is that the values saved by A are overwritten by B without any
>>    
>>
>warning.
>  
>
>>It would be safe if we could do a
>>
>>UPDATE rec ... WHERE (id = our_id AND hash = the_old_hash_val)
>>
>>This would be a real optimistic locking using the database mechanisms to
>>    
>>
>eliminate the race conditions.
>  
>
>>--
>>Zbyszek
>>
>>    
>>
>Yes, I've been thinking about this in the meantime and have decided to add a
>version column to each table and do something similar to what you suggested
>
>UPDATE rec set col1 = <col1>, col2 = <col2> ... version = version + 1 ...
>WHERE conditions and version = old_version_value
>
>Dan
>
>  
>
Why do you need the version column? Doing it exactly as Zbigniew
Lukasiak suggested solves the problem without having to add columns to
my DB schema to support optimistic locking. I think that would be much
neater. It would allow two users to write the SAME data to the DB after
one another, but what's the problem with that?

It is also how the optimistic locking in ADO.Net DataSets work.

>
>_______________________________________________
>List: http://lists.rawmode.org/cgi-bin/mailman/listinfo/dbix-class
>Wiki: http://dbix-class.shadowcatsystems.co.uk/
>IRC: irc.perl.org#dbix-class
>SVN: http://dev.catalyst.perl.org/repos/bast/trunk/DBIx-Class/
>Searchable Archive: http://www.mail-archive.com/dbix-class@lists.rawmode.org/
>
>
>  
>




More information about the Dbix-class mailing list