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

  1. import curvefs
  2. # 获取一个与后端集群交互的CBDClient对象,不同的CBDClient对象可以与不同的集群建立连接
  3. cbd1 = curvefs.CBDClient()
  4. cbd2 = curvefs.CBDClient()

初始化CBDClient

  1. import curvefs
  2. cbd = curvefs.CBDClient()
  3. # 参数:curve-client配置文件的绝对路径
  4. # 返回值:返回0表示初始化成功,-1表示初始化失败
  5. 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. # 查看文件信息
  12. cbd.StatFile("/curve", user, finfo)
  13. print finfo.filetype
  14. print finfo.length
  15. print finfo.ctime
  16. # FileInfo定义如下
  17. typedef struct FileInfo {
  18. uint64_t id;
  19. uint64_t parentid;
  20. int filetype; # 卷类型
  21. uint64_t length; # 卷大小
  22. uint64_t ctime; # 卷创建时间
  23. char filename[256]; # 卷名
  24. char owner[256]; # 卷所属用户
  25. int fileStatus; # 卷状态
  26. } FileInfo_t;
  27. # 文件状态
  28. #define CURVE_FILE_CREATED 0
  29. #define CURVE_FILE_DELETING 1
  30. #define CURVE_FILE_CLONING 2
  31. #define CURVE_FILE_CLONEMETAINSTALLED 3
  32. #define CURVE_FILE_CLONED 4
  33. #define CURVE_FILE_BEINGCLONED 5

扩容文件

  1. # 参数:三个参数分别为
  2. # 文件名
  3. # 用户信息
  4. # 扩容后文件大小
  5. # 返回值:返回0表示扩容成功,否则返回错误码
  6. # 构造user信息
  7. user = curvefs.UserInfo_t()
  8. user.owner = "curve"
  9. # 扩容
  10. cbd.Extend("/curve", user, 20*1024*1024*1024)
  11. # 查看扩容后的文件信息
  12. finfo = curvefs.FileInfo_t()
  13. cbd.StatFile("/curve", user, finfo)
  14. print finfo.length

打开/关闭文件

  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. # 写文件(目前读写都需要4k对齐)
  14. cbd.Write(fd, "aaaaaaaa"*512, 0, 4096)
  15. cbd.Write(fd, "bbbbbbbb"*512, 4096, 4096)
  16. # 读文件
  17. # 参数:四个参数分别为
  18. # 文件fd
  19. # 空字符串
  20. # 偏移量
  21. # 读取数据长度
  22. # 返回值:读取成功返回读取数据,否则返回错误码
  23. # 读取的内容通过返回值返回,buf在此没有意义,可以传入一个空串
  24. cbd.Read(fd"", 0, 4096)
  25. # 关闭文件
  26. cbd.Close(fd)

备注:当前python api接口,不支持异步读写

删除文件

  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. # 新文件名
  5. # 返回值:成功返回0,否则返回错误码
  6. # 构造user信息
  7. user = curvefs.UserInfo_t()
  8. user.owner = "curve"
  9. # 重命名
  10. cbd.Rename(user, "/curve", "/curve-new")

创建目录

  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

  1. # 通过返回值判断是否获取成功
  2. # 成功返回集群id字符串
  3. # 失败返回空字符串
  4. clusterId = cbd.GetClusterId()
  5. print clusterId
  6. # c355675a-f4d2-4729-b80a-5a7bcc749d1c

清理CBDClient对象

  1. cbd.UnInit()

错误码

Code Message 描述
0 OK 操作成功
-1 EXISTS 文件或目录已存存在
-2 FAILED 操作失败
-3 DISABLEDIO 禁止IO
-4 AUTHFAIL 认证失败
-5 DELETING 正在删除
-6 NOTEXIST 文件不存在
-7 UNDER_SNAPSHOT 快照中
-8 NOT_UNDERSNAPSHOT 非快照状态
-9 DELETE_ERROR 删除错误
-10 NOT_ALLOCATE Segment未分配
-11 NOT_SUPPORT 操作不支持
-12 NOT_EMPTY 目录非空
-13 NO_SHRINK_BIGGER_FILE 禁止缩容
-14 SESSION_NOTEXISTS Session不存在
-15 FILE_OCCUPIED 文件被占用
-16 PARAM_ERROR 参数错误
-17 INTERNAL_ERROR 内部错误
-18 CRC_ERROR CRC检查错误
-19 INVALID_REQUEST 请求参数存在异常
-20 DISK_FAIL 磁盘异常
-21 NO_SPACE 空间不足
-22 NOT_ALIGNED IO未对齐
-23 BAD_FD 文件正在被关闭,fd不可用
-24 LENGTH_NOT_SUPPORT 文件长度不满足要求
-25 SESSION_NOT_EXIST Session不存在(与-14重复)
-26 STATUS_NOT_MATCH 状态异常
-27 DELETE_BEING_CLONED 删除文件正在被克隆
-28 CLIENT_NOT_SUPPORT_SNAPSHOT Client版本不支持快照
-29 SNAPSHOT_FROZEN Snapshot功能禁用中
-100 UNKNOWN 未知错误