[sheepdog] [PATCH v8 00/10] replace structure of inode->data_vdi_id[] from array to b-tree

Robin Dong robin.k.dong at gmail.com
Wed Nov 20 07:04:37 CET 2013


Hi all,

   The size of vdi can only reach 4TB beacause the inode->data_vdi_id[] can only
   support 1 million objects. But 4TB is too small for storage application
   such as NAS and cloud-disk therefore we need to change the array of 'data_vdi_id' to
   b-tree.

   This patchset add B-tree structure into sd_inode. It support just two levels
   (one root-node and many leaf-nodes) and after this the size of vdi could reach about
   (4MB / sizeof(sd_extent_header) * (4MB / sizeof(sd_extent)) * 4MB which is about 680PB
    in theory.

   Currently the vdi size can raise to 16PB because the size of oid is just 32-bits, but
   it is certainly enough for many storage requirement.

   v6 --> v7 changes:
   	1. add support for erasure-code
	2. change help information for hyper volume
	3. modify idx_to_oid() to support object-cache correctly
	4. add comment for test-case of hyper volume

   v5 --> v6 changes:
   	1. add delete_one() support for hyper volume
	2. add fill_object_tree() support for hyper volume

   v4 --> v5 changes:
	1. object_cache works for hyper volume now
	2. put 'btree_counter' after 'data_vdi_id[]' in sd_inode
	3. add vdi_clone support for hyper volume

   v3 --> v4 changes:
	1. let hyper volume work with object cache
	2. let hyper volume work with vdi_list vdi_check
	3. let all test case pass
	4. add new test case for hyper volume

   v2 --> v3 changes:
	1. move "btree_counter" after inode->child_vdi_id[]
	2. add new interface to write inode meta data
	3. change the names of some MACRO

   v1 --> v2 changes:
	1. fix the problem of create 16PB vdi and mkfs.xfs
	2. add comment and illustration to explain how B-tree works

Robin Dong (10):
  sheep: change accessing of inode->data_vdi_id[] to function
  sheep: replace structure of inode->data_vdi_id[] from array to btree
  sheep: modify interface to write inode meta data
  sheep: extend MAX number of objects
  sheep: upgrade 'idx' in object_cache from 32bit to 64bit
  sheep: add traverse_btree() to list and check vdi
  sheep: use callback to implement fill_object_tree() and delete_one()
    for hyper volume
  sheep: copy middle-node when vdi_clone() for hyper volume
  sheep: support erasure code
  sheep: add functional test case for hyper volume

 dog/cluster.c            |   36 ++-
 dog/common.c             |   15 +-
 dog/dog.h                |   13 +-
 dog/farm/farm.c          |   12 +-
 dog/vdi.c                |  260 +++++++++++++-----
 include/sheepdog_proto.h |   97 ++++++-
 lib/Makefile.am          |    2 +-
 lib/option.c             |    7 +-
 lib/sd_inode.c           |  698 ++++++++++++++++++++++++++++++++++++++++++++++
 sheep/gateway.c          |    6 +-
 sheep/object_cache.c     |   99 ++++---
 sheep/ops.c              |   28 ++-
 sheep/sheep_priv.h       |   12 +
 sheep/vdi.c              |   97 +++++--
 sheepfs/volume.c         |   64 ++++-
 tests/functional/079     |   55 ++++
 tests/functional/079.out |   11 +
 tests/functional/group   |    1 +
 18 files changed, 1317 insertions(+), 196 deletions(-)
 create mode 100644 lib/sd_inode.c
 mode change 100644 => 100755 tests/functional/077
 create mode 100755 tests/functional/079
 create mode 100644 tests/functional/079.out




More information about the sheepdog mailing list