[sheepdog] [PATCH 1/4] sheep: fix typo in help information

Liu Yuan namei.unix at gmail.com
Mon Nov 25 10:02:06 CET 2013


On Mon, Nov 25, 2013 at 05:43:19PM +0900, MORITA Kazutaka wrote:
> At Mon, 25 Nov 2013 15:03:46 +0800,
> Robin Dong wrote:
> > 
> > The present implementation of http/swift is not perfect, it can't create
> > too much containers or objects. So we want to store all objects in one
> > hyper volume vdi and use new structure 'obj-inode' to identify its offset
> > and length in this vdi, just like some local file system. To achieve this,
> > we need distributed locks to ensure that only one thread can create a new
> > 'obj-inode' (or delete) in this vdi at a same time.
> > 
> > This patch set is a try to implement the distributed lock.
> > 
> > If we add code in sheep/cluster/zookeeper.c and use the framework of
> > cluster to implement this distributed lock, then we have to add
> > implementation for corosync、local and shepherd. That's too complicated. So
> > what we need is adding lock.c in sheep/http/ and only use it in http
> > interface.
> 
> If possible, I don't like to see zookeeper specific codes out side of
> sheep/cluster/zookeeper.c.  Can we use a SD_OP_TYPE_CLUSTER operation
> for your purpose?  It works like a cluster-wide distributed lock.
> 
> For example, vdi creation works like as follows.
> 
>  1. When sheep receives a SD_OP_NEW_VDI operation, sheep calls
>     cdrv->block() to block all the other cluster operations.
> 
>  2. Sheep calls cluster_new_vdi() in sd_block_handler().  It is
>     ensured that no other sheep call sd_block_handler() at the same
>     time.  This is necessary here because sheepdog doesn't allow
>     concurrent vdi creation requests.
> 
>  3. All the sheep in the cluster call post_cluster_new_vdi() in
>     sd_notify_handler().  It is usually used for notification or
>     cleanups.
> 

I don't think this approach is effecient though it is simpler because we can
make use of exsiting mechanism, since:

- it can't scale, meaning there is only one lock in the cluster.
  And every object creations from different containers will try to compete for
  this lock.

- can be affected by operations even not related to http operations. For example,
  'vdi create' will block the cluster, it means before it unblocks the cluster,
  we can't create/delete objects|container at all.

I think a lock per operation is really needed. E.g, every container has a lock
to achieve concurence of creating objects and won't interfere with other
containers.

Thanks
Yuan



More information about the sheepdog mailing list