[sheepdog] [disscuss] Design of Libsheepdog
MORITA Kazutaka
morita.kazutaka at lab.ntt.co.jp
Thu Jun 27 05:37:24 CEST 2013
CCed sheepdog-users list since some users may be interested in the
sheepdog library.
At Wed, 26 Jun 2013 10:51:26 +0800,
Kai Zhang wrote:
>
> Hi all
>
> As we discussed in the last IRC meeting, I would like to propose an initial design
> of libsheepdog.
>
> It is just quite initial, to avoid of waisting much time on wrong things.
>
> Please feel free to raise your suggestions.
>
> (PS: the doc is in html format. if you stuck on it, I will send a plain text version)
>
> Thanks,
> Kyle
>
>
> Design of Libsheepdog
>
> Table of Contents
>
> 1. Original Intention
> 2. APIs
> 1 Original Intention
>
> Libsheepdog has been discussed for a long time. And it's time to introduce it to sheepdog project.
>
> Libsheepdog provides the ability of operating vdi and vdi snapshot. It will be used by other systems which are built on top of sheepdog or use sheepdog as a sub-module.
>
> 2 APIs
>
> typedef void *sd_t;
> typedef struct sd_inode *sd_vdi_t;
> struct string_iterator {
> void *opaqe;
> bool (*has_next)(void);
> char *(*next)(void);
> void (*destory)(void);
> };
>
> /* connection */
> int sd_init(char *addr, const sd_t *sd);
> int sd_close(sd_t *sd);
>
> /* vdi */
> int sd_vdi_create(sd_t sd, const char *name, size_t size, int copies,
> bool prealloc, const sd_vdi_t *vdi);
> int sd_vdi_clone(sd_t sd, const sd_vdi_t src_vdi, const char *dst_name,
> int copies, const sd_vdi_t *dst_vdi);
> int sd_vdi_open(sd_t sd, const char *name, const sd_vdi_t *vdi);
> int sd_vdi_close(const sd_vdi_t *vdi);
>
> int sd_vdi_read(sd_t sd, const sd_vdi_t vdi, void *data, size_t size,
> size_t offset);
> int sd_vdi_write(sd_t sd, const sd_vdi_t vdi, void *data, size_t size,
> size_t offset, bool writeback);
> int sd_vdi_resize(sd_t sd, const sd_vdi_t vdi, size_t size);
> int sd_vdi_delete(sd_t sd, const char *name);
> int sd_vdi_setattr(sd_t sd, const char *name, const char *key, void *value,
> size_t value_len);
> int sd_vdi_getattr(sd_t sd, const char *name, const char *key, void *value,
> size_t value_len);
> int sd_vdi_list(sd_t sd, string_iterator *si);
>
> /* snapshot */
> int sd_vdi_snap_create(sd_t sd, const sd_vdi_t vdi, const char *tag,
> const sd_vdi_t snap_vdi);
> int sd_vdi_snap_open(sd_t sd, const char *name, const char *tag, int idx,
> const sd_vdi_t *snap_vdi);
> int sd_vdi_snap_rollback(sd_t sd, const sd_vdi_t vdi);
> int sd_vdi_snap_read(sd_t sd, const sd_vdi_t vdi, void *data, size_t size,
> size_t offset);
> Here are some semantics behind them:
>
> sd_t and sd_vdi_t are created and destroyed explicitly by calling the APIs, but user don't need to care about the memory
> current APIs are all blocking, and no additional thread in backgroud
> TODO:
>
> asychronous APIs if needed
> cluster operations if needed
> Author: Kai Zhang
> Created: 2013-06-25 Tue 19:34
> Emacs 24.3.2 (Org mode 8.0.2)
> Validate XHTML 1.0
More information about the sheepdog
mailing list