[openstack-dev] [neutron] Cross-server locking for neutron server

Clint Byrum clint at fewbar.com
Wed Jul 30 21:01:38 UTC 2014


Excerpts from Jay Pipes's message of 2014-07-30 13:53:38 -0700:
> On 07/30/2014 12:21 PM, Kevin Benton wrote:
> > Maybe I misunderstood your approach then.
> >
> > I though you were suggesting where a node performs an "UPDATE record
> > WHERE record = last_state_node_saw" query and then checks the number of
> > affected rows. That's optimistic locking by every definition I've heard
> > of it. It matches the following statement from the wiki article you
> > linked to as well:
> >
> > "The latter situation (optimistic locking) is only appropriate when
> > there is less chance of someone needing to access the record while it is
> > locked; otherwise it cannot be certain that the update will succeed
> > because the attempt to update the record will fail if another user
> > updates the record first."
> >
> > Did I misinterpret how your approach works?
> 
> The record is never "locked" in my approach, why is why I don't like to 
> think of it as optimistic locking. It's more like "optimistic read and 
> update with retry if certain conditions continue to be met..." :)
> 
> To be very precise, the record is never locked explicitly -- either 
> through the use of SELECT FOR UPDATE or some explicit file or 
> distributed lock. InnoDB won't even hold a lock on anything, as it will 
> simply add a new version to the row using its MGCC (sometimes called 
> MVCC) methods.
> 
> The technique I am showing in the patch relies on the behaviour of the 
> SQL UPDATE statement with a WHERE clause that contains certain columns 
> and values from the original view of the record. The behaviour of the 
> UPDATE statement will be a NOOP when some other thread has updated the 
> record in between the time that the first thread read the record, and 
> the time the first thread attempted to update the record. The caller of 
> UPDATE can detect this NOOP by checking the number of affected rows, and 
> retry the UPDATE if certain conditions remain kosher...
> 
> So, there's actually no locks taken in the entire process, which is why 
> I object to the term optimistic locking :) I think where the confusion 
> has been is that the initial SELECT and the following UPDATE statements 
> are *not* done in the context of a single SQL transaction...
> 

This is all true at a low level Jay. But if you're serializing something
outside the DB by using the "doing it" versus "done it" state, it still
acts like a lock.



More information about the OpenStack-dev mailing list