>In a multi-writer galera cluster both SELECT FOR UPDATE and CAS won't fail 
>until commit time

Good point, I did not consider multi-writer. But anyway, my point was that 
opt.2 is no worse than opt.1.


> On 13 May 2016, at 12:04, Kevin Benton <ke...@benton.pub> wrote:
> 
> >While opt.2 only prevents the conflicting changes, but does not guarantee 
> >that the object does not change while within the context,
> 
> I'm not sure what you mean here. In a multi-writer galera cluster both SELECT 
> FOR UPDATE and CAS won't fail until commit time if someone writes to another 
> server.
> So the DB lock only provides the conflicting change guarantee in a 
> single-writer mysql setup.
> 
> On Thu, May 12, 2016 at 11:26 AM, Ilya Chukhnakov <ichukhna...@mirantis.com 
> <mailto:ichukhna...@mirantis.com>> wrote:
> Hi everyone.
> 
> I’ve recently found that straightforward use of NeutronDbObject is prone to
> concurrency-related problems.
> 
> I’ve submitted a patch set [3] with some tests to show that without special
> treatment using NeutronDbObject could lead to unexpected results.
> 
> Further patch sets will provide acquire_object/acquire_objects contextmanager
> methods to the NeutronDbObject class. These methods are to be used in place of
> get_object/get_objects whenever the user intends to make changes to the 
> object.
> These methods would start an autonested_transaction.
> 
> There are (at least) two potential options for the implementation:
> 
> 1. Based on the DB locks (e.g. SELECT FOR UPDATE/SqlAlchemy with_for_update).
> 
>    pros:
>      - the object is guaranteed to not be changed while within the context
> 
>    cons:
>      - prone to deadlocks ([1] and potentially when locking multiple objects)
> 
> 2. Lock-free CAS based on object version counter. Can use SqlAlchemy version
>    counter [2] or add our own. If conflicting changes are detected upon 
> exiting
>    the context (i.e. version counter held differs from the one in the DB), 
> will
>    raise OSLO RetryRequest exception.
> 
>    pros:
>      - does not require locking
> 
>    cons:
>      - require an additional field in the models
> 
> While opt.2 only prevents the conflicting changes, but does not guarantee that
> the object does not change while within the context, opt.1 may seem
> preferential. But even with opt.1 the user should not expect that the changes
> made to the object while within the context will get to the database as the
> autonested_transaction could fail on flush/commit.
> 
> So I’d like to hear others’ opinion on the problem and which of the two
> implementation options would be preferred? Or maybe someone has a better idea.
> 
> [1] 
> https://wiki.openstack.org/wiki/OpenStack_and_SQLAlchemy#MySQLdb_.2B_eventlet_.3D_sad
>  
> <https://wiki.openstack.org/wiki/OpenStack_and_SQLAlchemy#MySQLdb_.2B_eventlet_.3D_sad>
> [2] http://docs.sqlalchemy.org/en/rel_0_9/orm/versioning.html 
> <http://docs.sqlalchemy.org/en/rel_0_9/orm/versioning.html>
> 
> [3] https://review.openstack.org/#/c/315705/ 
> <https://review.openstack.org/#/c/315705/>
> 
> --
> Thanks,
> Ilya
> __________________________________________________________________________
> OpenStack Development Mailing List (not for usage questions)
> Unsubscribe: openstack-dev-requ...@lists.openstack.org?subject:unsubscribe 
> <http://openstack-dev-requ...@lists.openstack.org/?subject:unsubscribe>
> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev 
> <http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev>
> 
> __________________________________________________________________________
> OpenStack Development Mailing List (not for usage questions)
> Unsubscribe: openstack-dev-requ...@lists.openstack.org?subject:unsubscribe
> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev

__________________________________________________________________________
OpenStack Development Mailing List (not for usage questions)
Unsubscribe: openstack-dev-requ...@lists.openstack.org?subject:unsubscribe
http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev

Reply via email to