Re: [openstack-dev] [Cinder] Question about synchronized decoration usage in cinder-volume

2014-05-07 Thread Zhangleiqiang (Trump)
Thanks for your detailed explanation.

  2. Specific to cinder.volume.manager.VolumeManager:attach_volume, all
 operations in do_attach method are database related. As said in [1],
 operations to the database will block the main thread of a service, so another
 question I want to know is why this method is needed to be synchronized?
 Currently db operations block the main thread of the service, but hopefully 
 this
 will change in the future.

There may be another reason here which is mentioned by DuncanT in IRC a few 
days ago. Cinder-backup will also call some methods (at least the 
attach_volume) of manager, and since cinder-backup is a standalone process, 
external=True should be used here.

--
zhangleiqiang (Trump)

Best Regards


 -Original Message-
 From: Vishvananda Ishaya [mailto:vishvana...@gmail.com]
 Sent: Wednesday, May 07, 2014 12:35 AM
 To: OpenStack Development Mailing List (not for usage questions)
 Subject: Re: [openstack-dev] [Cinder] Question about synchronized decoration
 usage in cinder-volume
 
 
 On Apr 26, 2014, at 2:56 AM, Zhangleiqiang (Trump)
 zhangleiqi...@huawei.com wrote:
 
  Hi, all:
 
  I find almost all of the @utils.synchronized decoration usage in
 cinder-volume (cinder.volume.manager / cinder.volume.drivers.*) with an
 external=True param. Such as
 cinder.volume.manager.VolumeManager:attach_volume:
 
  def attach_volume(self, context, volume_id, instance_uuid,
 host_name,
   mountpoint, mode):
 Updates db to show volume is attached.
 @utils.synchronized(volume_id, external=True)
 def do_attach():
 
  However, in docstring of common.lockutils.synchronized, I find param
 external is used for multi-workers scenario:
 
  :param external: The external keyword argument denotes whether
 this lock
  should work across multiple processes. This means that if two
 different
  workers both run a a method decorated with
 @synchronized('mylock',
  external=True), only one of them will execute at a time.
 
  I have two questions about it.
  1. As far as I know, cinder-api has supported multi-worker mode and
 cinder-volume doesn't support it, does it? So I wonder why the external=True
 param is used here?
 
 Before the multibackend support in cinder-volume it was common to run more
 than one cinder-volume for different backends on the same host. This would
 require external=True
  2. Specific to cinder.volume.manager.VolumeManager:attach_volume, all
 operations in do_attach method are database related. As said in [1],
 operations to the database will block the main thread of a service, so another
 question I want to know is why this method is needed to be synchronized?
 Currently db operations block the main thread of the service, but hopefully 
 this
 will change in the future.
 
 Vish
 
 
  Thanks.
 
  [1]
 http://docs.openstack.org/developer/cinder/devref/threading.html#mysql-acc
 ess-and-eventlet
  --
  zhangleiqiang (Trump)
 
  Best Regards
 
 
 
  ___
  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


Re: [openstack-dev] [Cinder] Question about synchronized decoration usage in cinder-volume

2014-05-06 Thread Vishvananda Ishaya

On Apr 26, 2014, at 2:56 AM, Zhangleiqiang (Trump) zhangleiqi...@huawei.com 
wrote:

 Hi, all:
 
   I find almost all of the @utils.synchronized decoration usage in 
 cinder-volume (cinder.volume.manager / cinder.volume.drivers.*) with an 
 external=True param. Such as 
 cinder.volume.manager.VolumeManager:attach_volume:
 
   def attach_volume(self, context, volume_id, instance_uuid, 
 host_name,
  mountpoint, mode):
Updates db to show volume is attached.
@utils.synchronized(volume_id, external=True)
def do_attach():
 
   However, in docstring of common.lockutils.synchronized, I find param 
 external is used for multi-workers scenario:
   
   :param external: The external keyword argument denotes whether 
 this lock
   should work across multiple processes. This means that if two different
   workers both run a a method decorated with @synchronized('mylock',
   external=True), only one of them will execute at a time.
   
   I have two questions about it.
   1. As far as I know, cinder-api has supported multi-worker mode and 
 cinder-volume doesn't support it, does it? So I wonder why the 
 external=True param is used here?

Before the multibackend support in cinder-volume it was common to run more than 
one cinder-volume for different backends on the same host. This would require 
external=True
   2. Specific to cinder.volume.manager.VolumeManager:attach_volume, all 
 operations in do_attach method are database related. As said in [1], 
 operations to the database will block the main thread of a service, so 
 another question I want to know is why this method is needed to be 
 synchronized?
Currently db operations block the main thread of the service, but hopefully 
this will change in the future.

Vish

 
   Thanks.
 
 [1] 
 http://docs.openstack.org/developer/cinder/devref/threading.html#mysql-access-and-eventlet
 --
 zhangleiqiang (Trump)
 
 Best Regards
 
 
 
 ___
 OpenStack-dev mailing list
 OpenStack-dev@lists.openstack.org
 http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev



signature.asc
Description: Message signed with OpenPGP using GPGMail
___
OpenStack-dev mailing list
OpenStack-dev@lists.openstack.org
http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev


[openstack-dev] [Cinder] Question about synchronized decoration usage in cinder-volume

2014-04-26 Thread Zhangleiqiang (Trump)
Hi, all:

I find almost all of the @utils.synchronized decoration usage in 
cinder-volume (cinder.volume.manager / cinder.volume.drivers.*) with an 
external=True param. Such as 
cinder.volume.manager.VolumeManager:attach_volume:

def attach_volume(self, context, volume_id, instance_uuid, 
host_name,
  mountpoint, mode):
Updates db to show volume is attached.
@utils.synchronized(volume_id, external=True)
def do_attach():

However, in docstring of common.lockutils.synchronized, I find param 
external is used for multi-workers scenario:

:param external: The external keyword argument denotes whether 
this lock
should work across multiple processes. This means that if two different
workers both run a a method decorated with @synchronized('mylock',
external=True), only one of them will execute at a time.

I have two questions about it.
1. As far as I know, cinder-api has supported multi-worker mode and 
cinder-volume doesn't support it, does it? So I wonder why the external=True 
param is used here?
2. Specific to cinder.volume.manager.VolumeManager:attach_volume, all 
operations in do_attach method are database related. As said in [1], 
operations to the database will block the main thread of a service, so another 
question I want to know is why this method is needed to be synchronized?

Thanks.

[1] 
http://docs.openstack.org/developer/cinder/devref/threading.html#mysql-access-and-eventlet
--
zhangleiqiang (Trump)

Best Regards



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