[sheepdog] [PATCH v4 0/3] use hyper volume to store containers and objects
Liu Yuan
namei.unix at gmail.com
Thu Dec 12 13:07:15 CET 2013
On Thu, Dec 12, 2013 at 06:15:54PM +0800, Robin Dong wrote:
> From: Robin Dong <sanbai at taobao.com>
>
> The old implemention of kv can only support small object (< 4MB), so we
> use hyper volume ( up to 16PB ) to support large number of big object and
> add lock to avoid race condition.
>
> After create a account, we will create a hyper volume vdi with the same name
> and this vdi will stores inodes of buckets:
>
> account vdi
> +-----------+---+--------------------------+---+--------------------------+--
> |name: coly |...|bucket_inode (name: jetta)|...|bucket_inode (name: volvo)|..
> +-----------+---+--------------------------+---+--------------------------+--
> | |
> / |
> bucket vdi / |
> +-----------------+-------+ <-- |
> |name: coly/jetta |.......| |
> +-----------------+-------+ /
> bucket vdi /
> +-----------------+------+ <----
> | name: coly/volvo|......|
> +-----------------+------+
>
> An account could stores number of "16PB / sizeof(struct bucket_inode)" buckets.
>
> The buckets has two vdis: one called bucket-vdi (named as bucket) and another
> called data-vdi (named as "bucket/allocator").The bucket-vdi stores inodes of
> objects and data-vdi stores the data of these objects:
>
>
> --------------------- kv_onode -----------------------
> | |
> bucket vdi v v
> +-----------------+--+---------------------------+--------------------------+
> |name: coly/fruit |..|kv_onode_hdr (name: banana)|onode_extent: start, count|
> +-----------------+--+---------------------------+--------------------------+
> /
> /
> ------------
> /
> data_vid v
> +---------------------------+---+-----------------+
> |name: coly/fruit/allocator |...| data |
> +---------------------------+---+-----------------+
>
> The total size of data for objects in one bucket could reach 16PB recently, we
> will add multi-data-vdi support for bucket in the future.
>
> TODO:
> 1. add statistics for space in bytes for account/container.
> 2. one bucket could use many hyper volumes to store data of objects.
> 3. use kv_update_object() to upload large object parallely.
I have tried the following steps:
1 create a user /yliu
2 create a container /yliu/computer
3 upload a 100M file A to /yliu/computer/test
4 update the same file A again and it succeded
Then I found 'vdi list'
yliu at ubuntu-precise:~/sheepdog$ dog/dog vdi list
Name Id Size Used Shared Creation time VDI id Copies Tag
yliu/computer/allocator 0 16 PB 204 MB 0.0 MB 2013-12-12 19:18 9ddb4 6
note that 204 MB, I think it should be 104 MB because I overwrite the A with the
same size.
5 delete the /yliu/computer/test
yliu at ubuntu-precise:~/sheepdog$ dog/dog vdi list
Name Id Size Used Shared Creation time VDI id Copies Tag
yliu/computer/allocator 0 16 PB 104 MB 0.0 MB 2013-12-12 19:18 9ddb4 6
Seems that I will have 100 MB never get released.
yliu at ubuntu-precise:~/sheepdog$ curl -X GET http://localhost/v1/yliu/computer
Says that I have no file in it!
Thanks
Yuan
More information about the sheepdog
mailing list