获取一个与curve集群交互的CBDClient对象

初始化CBDClient

  1. cbd = curvefs.CBDClient()
  2. # 参数:curve-client配置文件的绝对路径
  3. # 返回值:返回0表示初始化成功,-1表示初始化失败
  4. cbd.Init("/etc/curve/client.conf")

创建文件

  1. import curvefs
  2. cbd = curvefs.CBDClient()
  3. cbd.Init("/etc/curve/client.conf") # 后续示例省略初始化过程
  4. # 参数:三个参数分别为
  5. # 文件全路径
  6. # 文件所属用户信息
  7. # 文件大小
  8. # 返回值:返回0表示创建成功,否则返回错误码
  9. # 首先初始化user信息(curvefs的控制面接口都有用户信息验证,都需要传入用户信息)
  10. user = curvefs.UserInfo_t()
  11. user.owner = "curve"
  12. user.password = "" # 密码为空时,可以省略
  13. # 调用Create接口创建文件
  14. cbd.Create("/curve", user, 10*1024*1024*1024)
  15. # UserInfo定义如下
  16. typedef struct UserInfo {
  17. char owner[256]; # 用户名
  18. char password[256]; # 用户密码
  19. } UserInfo_t;

查看文件信息

  1. # 参数:三个参数分别为
  2. # 文件名
  3. # 用户信息
  4. # 文件信息[出参]
  5. # 返回值:返回0表示获取成功,否则返回错误码
  6. # 构造user信息
  7. user = curvefs.UserInfo_t()
  8. user.owner = "curve"
  9. # 构造file信息
  10. finfo = curvefs.FileInfo_t()
  11. cbd.StatFile("/curve", user, finfo)
  12. print finfo.filetype
  13. print finfo.length
  14. print finfo.ctime
  15. # FileInfo定义如下
  16. typedef struct FileInfo {
  17. uint64_t id;
  18. uint64_t parentid;
  19. uint64_t length; # 卷大小
  20. uint64_t ctime; # 卷创建时间
  21. char filename[256]; # 卷名
  22. char owner[256]; # 卷所属用户
  23. int fileStatus; # 卷状态
  24. } FileInfo_t;
  25. # 文件状态
  26. #define CURVE_FILE_CREATED 0
  27. #define CURVE_FILE_DELETING 1
  28. #define CURVE_FILE_CLONING 2
  29. #define CURVE_FILE_CLONEMETAINSTALLED 3
  30. #define CURVE_FILE_CLONED 4
  31. #define CURVE_FILE_BEINGCLONED 5

扩容文件

打开/关闭文件

  1. # 打开文件
  2. # 参数:两个参数分别为
  3. # 文件名
  4. # 用户信息
  5. # 返回值:打开成功返回文件fd,否则返回错误码
  6. # 构造user信息
  7. user = curvefs.UserInfo_t()
  8. user.owner = "user1"
  9. # 打开文件,返回fd
  10. fd = cbd.Open("/tmp1", user)
  11. # 关闭文件
  12. # 参数:打开文件时返回的fd
  13. # 返回值:关闭成功返回0,否则返回错误码
  14. cbd.Close(fd)

读写文件

  1. # 写文件
  2. # 参数:四个参数分别为
  3. # 文件fd
  4. # 待写入数据
  5. # 偏移量
  6. # 写入数据长度
  7. # 返回值:写入成功返回写入字节数,否则返回错误码
  8. # 构造user信息
  9. user = curvefs.UserInfo_t()
  10. user.owner = "user1"
  11. # 打开文件,返回fd
  12. fd = cbd.Open("/tmp1", user)
  13. cbd.Write(fd, "aaaaaaaa"*512, 0, 4096)
  14. cbd.Write(fd, "bbbbbbbb"*512, 4096, 4096)
  15. # 读文件
  16. # 文件fd
  17. # 空字符串
  18. # 偏移量
  19. # 读取数据长度
  20. # 返回值:读取成功返回读取数据,否则返回错误码
  21. # 读取的内容通过返回值返回,buf在此没有意义,可以传入一个空串
  22. cbd.Read(fd"", 0, 4096)
  23. # 关闭文件
  24. cbd.Close(fd)

删除文件

  1. # 参数:两个参数分别为
  2. # 文件名
  3. # 用户信息
  4. # 返回值:删除成功返回0,否则返回错误码
  5. # 构造user信息
  6. user = curvefs.UserInfo_t()
  7. user.owner = "curve"
  8. # 删除文件
  9. cbd.Unlink("/curve", user)

重命名文件

创建目录

  1. # 参数:两个参数分别为
  2. # 目录路径
  3. # 用户信息
  4. # 返回值:成功返回0,否则返回错误码
  5. # 构造user信息
  6. user = curvefs.UserInfo_t()
  7. user.owner = "curve"
  8. # 创建目录
  9. cbd.Mkdir("/curvedir", user)

删除目录

  1. # 参数:两个参数分别为
  2. # 目录路径
  3. # 用户信息
  4. # 返回值:成功返回0,否则返回错误码
  5. # 构造user信息
  6. user = curvefs.UserInfo_t()
  7. user.owner = "curve"
  8. # 删除目录
  9. cbd.Rmdir("/curvedir", user)

获取目录下的文件

  1. # 参数:两个参数分别为
  2. # 目录路径
  3. # 用户信息
  4. # 返回值:当前目录下的文件列表(只包括文件名)
  5. files = cbd.Listdir("/test", user)
  6. for f in files:
  7. print f

获取集群ID

清理CBDClient对象

  1. cbd.UnInit()