curve-client-python-api.md

March 12, 2021 · View on GitHub

English version

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

import curvefs

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

初始化CBDClient

import curvefs
cbd = curvefs.CBDClient()

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

创建文件

import curvefs
cbd = curvefs.CBDClient()
cbd.Init("/etc/curve/client.conf")  # 后续示例省略初始化过程

# 参数:三个参数分别为
#      文件全路径
#      文件所属用户信息
#      文件大小
# 返回值:返回0表示创建成功,否则返回错误码

# 首先初始化user信息(curvefs的控制面接口都有用户信息验证,都需要传入用户信息)
user = curvefs.UserInfo_t()
user.owner = "curve"
user.password = ""  # 密码为空时,可以省略

# 调用Create接口创建文件
cbd.Create("/curve", user, 10*1024*1024*1024)

# UserInfo定义如下
typedef struct UserInfo {
    char owner[256];      # 用户名
    char password[256];   # 用户密码
} UserInfo_t;

查看文件信息

# 参数:三个参数分别为
#      文件名
#      用户信息
#      文件信息[出参]
# 返回值:返回0表示获取成功,否则返回错误码

# 构造user信息
user = curvefs.UserInfo_t()
user.owner = "curve"

# 构造file信息
finfo = curvefs.FileInfo_t()

# 查看文件信息
cbd.StatFile("/curve", user, finfo)
print finfo.filetype
print finfo.length
print finfo.ctime

# FileInfo定义如下
typedef struct FileInfo {
    uint64_t      id;
    uint64_t      parentid;
    int           filetype;   # 卷类型
    uint64_t      length;     # 卷大小
    uint64_t      ctime;      # 卷创建时间
    char          filename[256];   # 卷名
    char          owner[256];      # 卷所属用户
    int           fileStatus;      # 卷状态
} FileInfo_t;

# 文件状态
#define CURVE_FILE_CREATED            0
#define CURVE_FILE_DELETING           1
#define CURVE_FILE_CLONING            2
#define CURVE_FILE_CLONEMETAINSTALLED 3
#define CURVE_FILE_CLONED             4
#define CURVE_FILE_BEINGCLONED        5

扩容文件

# 参数:三个参数分别为
#      文件名
#      用户信息
#      扩容后文件大小
# 返回值:返回0表示扩容成功,否则返回错误码

# 构造user信息
user = curvefs.UserInfo_t()
user.owner = "curve"

# 扩容
cbd.Extend("/curve", user, 20*1024*1024*1024)

# 查看扩容后的文件信息
finfo = curvefs.FileInfo_t()
cbd.StatFile("/curve", user, finfo)
print finfo.length

打开/关闭文件

# 打开文件
# 参数:两个参数分别为
#      文件名
#      用户信息
# 返回值:打开成功返回文件fd,否则返回错误码

# 构造user信息
user = curvefs.UserInfo_t()
user.owner = "user1"

# 打开文件,返回fd
fd = cbd.Open("/tmp1", user)

# 关闭文件
# 参数:打开文件时返回的fd
# 返回值:关闭成功返回0,否则返回错误码
cbd.Close(fd)

读写文件

# 写文件
# 参数:四个参数分别为
#      文件fd
#      待写入数据
#      偏移量
#      写入数据长度
# 返回值:写入成功返回写入字节数,否则返回错误码

# 构造user信息
user = curvefs.UserInfo_t()
user.owner = "user1"

# 打开文件,返回fd
fd = cbd.Open("/tmp1", user)

# 写文件(目前读写都需要4k对齐)
cbd.Write(fd, "aaaaaaaa"*512, 0, 4096)
cbd.Write(fd, "bbbbbbbb"*512, 4096, 4096)

# 读文件
# 参数:四个参数分别为
#      文件fd
#      空字符串
#      偏移量
#      读取数据长度
# 返回值:读取成功返回读取数据,否则返回错误码

# 读取的内容通过返回值返回,buf在此没有意义,可以传入一个空串
cbd.Read(fd,"", 0, 4096)

# 关闭文件
cbd.Close(fd)

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

删除文件

# 参数:两个参数分别为
#      文件名
#      用户信息
# 返回值:删除成功返回0,否则返回错误码

# 构造user信息
user = curvefs.UserInfo_t()
user.owner = "curve"

# 删除文件
cbd.Unlink("/curve", user)

恢复文件

# 参数:三个参数分别为
#      文件名
#      用户信息
#      文件id(可选,默认为0)
# 返回值:恢复成功返回0,否则返回错误码

# 构造user信息
user = curvefs.UserInfo_t()
user.owner = "curve"

# 恢复文件
cbd.Recover("/curve", user, 0)

重命名文件

# 参数:三个参数分别为
#      用户信息
#      旧文件名
#      新文件名
# 返回值:成功返回0,否则返回错误码

# 构造user信息
user = curvefs.UserInfo_t()
user.owner = "curve"

# 重命名
cbd.Rename(user, "/curve", "/curve-new")

创建目录

# 参数:两个参数分别为
#      目录路径
#      用户信息
# 返回值:成功返回0,否则返回错误码

# 构造user信息
user = curvefs.UserInfo_t()
user.owner = "curve"
# 创建目录
cbd.Mkdir("/curvedir", user)

删除目录

# 参数:两个参数分别为
#      目录路径
#      用户信息
# 返回值:成功返回0,否则返回错误码

# 构造user信息
user = curvefs.UserInfo_t()
user.owner = "curve"

# 删除目录
cbd.Rmdir("/curvedir", user)

获取目录下的文件

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

获取集群ID

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

清理CBDClient对象

cbd.UnInit()

错误码

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