import curvefs
# Get a CBDClient object that interacts with the back-end cluster. Different CBDClient objects can establish connections with different clusters
cbd1 = curvefs.CBDClient()
cbd2 = curvefs.CBDClient()
import curvefs
cbd = curvefs.CBDClient()
# parameter: full path of curve-client configuration file
# return: return 0 if initialized successfully, -1 means failed
cbd.Init("/etc/curve/client.conf")
import curvefs
cbd = curvefs.CBDClient()
cbd.Init("/etc/curve/client.conf") # subsequent examples omit the initialization process
# parameter: the three parameters are
# file full path
# user information
# file size
# return: return 0 if create successfully, otherwise return an error code
# First initialize user information (the control plane interfaces of curvefs have user information verification, and user information needs to be passed in)
user = curvefs.UserInfo_t()
user.owner = "curve"
user.password = "" # when the password is empty, it can be omitted
# Create a file with Create interface
cbd.Create("/curve", user, 10*1024*1024*1024)
# UserInfo definition
typedef struct UserInfo {
char owner[256]; # username
char password[256]; # password
} UserInfo_t;
# parameter: the three parameters are
# filename
# user information
# fileInfo[exit parameter]
# return: return 0 if get successfully, otherwise return an error code
# Construct user information
user = curvefs.UserInfo_t()
user.owner = "curve"
# Construct file information
finfo = curvefs.FileInfo_t()
# Get file information
cbd.StatFile("/curve", user, finfo)
print finfo.filetype
print finfo.length
print finfo.ctime
# FileInfo definition
typedef struct FileInfo {
uint64_t id;
uint64_t parentid;
int filetype; # volume type
uint64_t length; # volume size
uint64_t ctime; # volume create time
char filename[256]; # volume name
char owner[256]; # volume owner
int fileStatus; # volume status
} FileInfo_t;
# File status
#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
# parameter: the three parameters are
# filename
# user information
# file size after extend
# return: return 0 if extend successfully, otherwise return an error code
# Construct user information
user = curvefs.UserInfo_t()
user.owner = "curve"
# Extend
cbd.Extend("/curve", user, 20*1024*1024*1024)
# Get file information after extension
finfo = curvefs.FileInfo_t()
cbd.StatFile("/curve", user, finfo)
print finfo.length
# Open file
# parameter: the two parameters are
# filename
# user information
# return: return fd if open successfully, otherwise return error code
# Construct user information
user = curvefs.UserInfo_t()
user.owner = "user1"
# Open file,return fd
fd = cbd.Open("/tmp1", user)
# Close file
# parameter: fd returned when opening the file
# return: return 0 if closed successfully, otherwise return an error code
cbd.Close(fd)
# Write file
# parameter: the four parameters are
# fd
# data to write
# offset
# date length
# return: return the number of bytes written If write successful, otherwise return an error code
# Construct user information
user = curvefs.UserInfo_t()
user.owner = "user1"
# Open file,return fd
fd = cbd.Open("/tmp1", user)
# Write files (Currently, 4k alignment is required for reading and writing)
cbd.Write(fd, "aaaaaaaa"*512, 0, 4096)
cbd.Write(fd, "bbbbbbbb"*512, 4096, 4096)
# Read file
# parameter: the four parameters are
# fd
# null string
# offset
# data length to read
# return: return read data if read successfully, otherwise return an error code
# The read content is returned by the return value, buf is not needed, you can pass in an empty string
cbd.Read(fd,"", 0, 4096)
# Close file
cbd.Close(fd)
Note: The current python api does not support asynchronous reading and writing
# parameter: the two parameters are
# filename
# user information
# return: return 0 if delete successfully, otherwise return an error code
# Construct user information
user = curvefs.UserInfo_t()
user.owner = "curve"
# Delete file
cbd.Unlink("/curve", user)
# parameter: the three parameters are
# filename
# user information
# file id (optional, default is 0)
# return: return 0 if recover successfully, otherwise return an error code
# Construct user information
user = curvefs.UserInfo_t()
user.owner = "curve"
# Recover file
cbd.Recover("/curve", user, 0)
# parameter: the three parameters are
# user information
# old filename
# new filename
# return: return 0 if rename successfully, otherwise return an error code
# Construct user information
user = curvefs.UserInfo_t()
user.owner = "curve"
# Rename
cbd.Rename(user, "/curve", "/curve-new")
# parameter: the two parameters are
# directory path
# user information
# return: return 0 if create successfully, otherwise return an error code
# Construct user information
user = curvefs.UserInfo_t()
user.owner = "curve"
# Create directory
cbd.Mkdir("/curvedir", user)
# parameter: the two parameters are
# directory path
# user information
# return: return 0 if create successfully, otherwise return an error code
# Construct user information
user = curvefs.UserInfo_t()
user.owner = "curve"
# Delete directory
cbd.Rmdir("/curvedir", user)
# parameter: the two parameters are
# directory path
# user information
# return: files in the directory (only filename)
files = cbd.Listdir("/test", user)
for f in files:
print f
# Determine whether this get is successful by the return value
# success: return cluster ID
# fail: return null string
clusterId = cbd.GetClusterId()
print clusterId
# c355675a-f4d2-4729-b80a-5a7bcc749d1c
cbd.UnInit()
Code | Message | description |
---|---|---|
0 | OK | success |
-1 | EXISTS | file or directory exists |
-2 | FAILED | fail |
-3 | DISABLEDIO | disable io |
-4 | AUTHFAIL | authentication failed |
-5 | DELETING | deleting |
-6 | NOTEXIST | file not exist |
-7 | UNDER_SNAPSHOT | under snapshot |
-8 | NOT_UNDERSNAPSHOT | not under snapshot |
-9 | DELETE_ERROR | delete error |
-10 | NOT_ALLOCATE | segment not allocated |
-11 | NOT_SUPPORT | operation not supported |
-12 | NOT_EMPTY | directory not empty |
-13 | NO_SHRINK_BIGGER_FILE | no shrinkage |
-14 | SESSION_NOTEXISTS | session not exist |
-15 | FILE_OCCUPIED | file occupied |
-16 | PARAM_ERROR | parameter error |
-17 | INTERNAL_ERROR | internal error |
-18 | CRC_ERROR | CRC error |
-19 | INVALID_REQUEST | parameter invalid |
-20 | DISK_FAIL | disk fail |
-21 | NO_SPACE | no space |
-22 | NOT_ALIGNED | io not aligned |
-23 | BAD_FD | file is being closed, fd unavailable |
-24 | LENGTH_NOT_SUPPORT | file length is not supported |
-25 | SESSION_NOT_EXIST | session not exist, duplicate with -14 |
-26 | STATUS_NOT_MATCH | status error |
-27 | DELETE_BEING_CLONED | delete the file being cloned |
-28 | CLIENT_NOT_SUPPORT_SNAPSHOT | this version of client not support snapshot |
-29 | SNAPSHOT_FROZEN | snapshot is disabled |
-100 | UNKNOWN | unknown error |