Re: [openstack-dev] [swift]Questions on concurrent operations on the same object

2014-11-10 Thread Clay Gerrard
Did you find out anything more on this?

There's lots on places in Swift organized around concurrent access to
objects - so I think it's probably good that you have that 423 response;
your clients will probably see it...

When you have multiple replicas the proxy's PUT will return shortly after
it has a quorum of successful responses - so in that sense it's possible
for a client to receive success while at least one node has their reference
to that object in hand.  But I'm guessing that's not really your setup?

Are you *sure* ssbench will never perform concurrent operations to the same
file?  Depending on the configuration - processes, total concurrency,
number of objects, etc. - it can be a non-trivial problem to coordinate all
of that.  ssbench may be doing best effort with no guarantee.

-Clay


On Fri, Oct 31, 2014 at 6:32 PM, jordan pittier jordan.pitt...@scality.com
wrote:

 Hi guys,

 We are currently benchmarking our Scality object server backend for Swift.
 We basically created a new DiskFile class that is used in a new
 ObjectController that inherits from the native server.ObjectController.
 It's pretty similar to how Ceph can be used as a backend for Swift objects.
 Our DiskFile is used to make HTTP request to the Scality Ring which
 supports GET/PUT/Delete on objects.

 Scality implementation is here :
 https://github.com/scality/ScalitySproxydSwift/blob/master/swift/obj/scality_sproxyd_diskfile.py

 We are using SSBench to benchmark and when the concurrency is high, we see
 somehow interleaved operations on the same object. For example, our
 DiskFile will be asked to DELETE an object while the object is currently
 being PUT by another client. The Scality ring doesnt support multi writers
 on the same object. So a lot of ssbench operations fail with a HTTP
 response '423 - Object is locked'.

 We dive into ssbench code and saw that it should not do interleaved
 operations. By adding some logging in our DiskFile class, we kinda of guess
 that the Object server doesn't wait for the put() method of the
 DiskFileWriter to finish before returning HTTP 200 to the Swift Proxy. Is
 this explanation correct ? Our put() method in the DiskFileWriter could
 take some time to complete, thus this would explain that the PUT on the
 object is being finalized while a DELETE arrives.

 Some questions :
 1) Is it possible that the put() method of the DiskFileWriter is somehow
 non blocking ? (or that the result of put() is not awaited?). If not, how
 could ssbench thinks that an object is completely PUT and that ssbench is
 allowed to delete it ?
 2) If someone could explain me in a few words (or more :)) how Swift deals
 with multiple writers on the same object, that will be very much
 appreciated.

 Thanks a lot,
 Jordan


 ___
 OpenStack-dev mailing list
 OpenStack-dev@lists.openstack.org
 http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev

___
OpenStack-dev mailing list
OpenStack-dev@lists.openstack.org
http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev


[openstack-dev] [swift]Questions on concurrent operations on the same object

2014-10-31 Thread jordan pittier
Hi guys,

We are currently benchmarking our Scality object server backend for Swift. We 
basically created a new DiskFile class that is used in a new ObjectController 
that inherits from the native server.ObjectController. It's pretty similar to 
how Ceph can be used as a backend for Swift objects. Our DiskFile is used to 
make HTTP request to the Scality Ring which supports GET/PUT/Delete on 
objects. 

Scality implementation is here : 
https://github.com/scality/ScalitySproxydSwift/blob/master/swift/obj/scality_sproxyd_diskfile.py

We are using SSBench to benchmark and when the concurrency is high, we see 
somehow interleaved operations on the same object. For example, our DiskFile 
will be asked to DELETE an object while the object is currently being PUT by 
another client. The Scality ring doesnt support multi writers on the same 
object. So a lot of ssbench operations fail with a HTTP response '423 - Object 
is locked'.

We dive into ssbench code and saw that it should not do interleaved operations. 
By adding some logging in our DiskFile class, we kinda of guess that the Object 
server doesn't wait for the put() method of the DiskFileWriter to finish before 
returning HTTP 200 to the Swift Proxy. Is this explanation correct ? Our put() 
method in the DiskFileWriter could take some time to complete, thus this would 
explain that the PUT on the object is being finalized while a DELETE arrives. 

Some questions :
1) Is it possible that the put() method of the DiskFileWriter is somehow non 
blocking ? (or that the result of put() is not awaited?). If not, how could 
ssbench thinks that an object is completely PUT and that ssbench is allowed to 
delete it ?
2) If someone could explain me in a few words (or more :)) how Swift deals with 
multiple writers on the same object, that will be very much appreciated.

Thanks a lot,
Jordan


___
OpenStack-dev mailing list
OpenStack-dev@lists.openstack.org
http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev