From b129c19ebf8dfc1c88f679b6bf07c1f7801cdb40 Mon Sep 17 00:00:00 2001 From: liuzhanfeng2 Date: Fri, 18 Apr 2025 10:46:38 +0800 Subject: [PATCH] =?UTF-8?q?api=E6=8E=A5=E5=8F=A3=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/cmd/wrcmd.c | 19 ++-- src/common/wr_file.c | 5 ++ src/common/wr_file.h | 1 + src/common_api/wr_api_impl.c | 12 +-- src/common_api/wr_api_impl.h | 12 +-- src/interface/wr_api.c | 168 +++++++++++++++++++++++------------ src/interface/wr_api.h | 59 ++++++++---- 7 files changed, 188 insertions(+), 88 deletions(-) diff --git a/src/cmd/wrcmd.c b/src/cmd/wrcmd.c index dc91459..3e5da23 100644 --- a/src/cmd/wrcmd.c +++ b/src/cmd/wrcmd.c @@ -360,6 +360,7 @@ static wr_args_t cmd_mkdir_args[] = { {'d', "dir_name", CM_TRUE, CM_TRUE, wr_check_name, NULL, NULL, 0, NULL, NULL, 0}, {'U', "UDS", CM_FALSE, CM_TRUE, cmd_check_uds, cmd_check_convert_uds_home, cmd_clean_check_convert, 0, NULL, NULL, 0}, + {'a', "attr_flag", CM_FALSE, CM_TRUE, wr_check_attr_flag, NULL, NULL, 0, NULL, NULL, 0}, }; static wr_args_set_t cmd_mkdir_args_set = { cmd_mkdir_args, @@ -407,7 +408,8 @@ static status_t mkdir_proc(void) if (conn == NULL) { return CM_ERROR; } - status_t status = wr_vfs_create_impl(conn, dir_name); + unsigned long long attrFlag = 0; + status_t status = wr_vfs_create_impl(conn, dir_name, attrFlag); if (status != CM_SUCCESS) { WR_PRINT_ERROR("Failed to make dir, path is %s, dir name is %s.\n", path, dir_name); } else { @@ -774,6 +776,7 @@ static wr_args_t cmd_rmdir_args[] = { {'r', "recursive", CM_FALSE, CM_FALSE, NULL, NULL, NULL, 0, NULL, NULL, 0}, {'U', "UDS", CM_FALSE, CM_TRUE, cmd_check_uds, cmd_check_convert_uds_home, cmd_clean_check_convert, 0, NULL, NULL, 0}, + {'a', "attr_flag", CM_FALSE, CM_TRUE, wr_check_attr_flag, NULL, NULL, 0, NULL, NULL, 0}, }; static wr_args_set_t cmd_rmdir_args_set = { cmd_rmdir_args, @@ -806,8 +809,14 @@ static status_t rmdir_proc(void) if (conn == NULL) { return CM_ERROR; } - - status = wr_vfs_delete_impl(conn, path); + uint64 attr; + const char *attrFlag = cmd_rmdir_args[WR_ARG_IDX_3].input_args; + status_t ret = cm_str2uint64(attrFlag, &attr); + if (ret != CM_SUCCESS) { + WR_PRINT_ERROR("The value of attrFlag is invalid.\n"); + return CM_ERROR; + } + status = wr_vfs_delete_impl(conn, path, attr); if (status != CM_SUCCESS) { WR_PRINT_ERROR("Failed to rm dir, path is %s.\n", path); } else { @@ -1744,8 +1753,8 @@ static status_t truncate_proc(void) WR_PRINT_ERROR("Failed to truncate file, name is %s.\n", path); return status; } - - status = (status_t)wr_truncate_impl(conn, handle, length); + int truncateType = 0; + status = (status_t)wr_truncate_impl(conn, handle, length, truncateType); if (status != CM_SUCCESS) { WR_PRINT_ERROR("Failed to truncate file, name is %s.\n", path); (void)wr_close_file_impl(conn, handle); diff --git a/src/common/wr_file.c b/src/common/wr_file.c index fc666e0..d224ffe 100644 --- a/src/common/wr_file.c +++ b/src/common/wr_file.c @@ -136,6 +136,11 @@ status_t wr_check_name(const char *name) return wr_check_name_is_valid(name, WR_MAX_NAME_LEN); } +status_t wr_check_attr_flag(uint64_t attrFlag) +{ + return CM_SUCCESS; +} + status_t wr_check_path(const char *path) { if (path == NULL || strlen(path) == 0) { diff --git a/src/common/wr_file.h b/src/common/wr_file.h index e0ced99..d431e27 100644 --- a/src/common/wr_file.h +++ b/src/common/wr_file.h @@ -102,6 +102,7 @@ wr_env_t *wr_get_env(void); wr_config_t *wr_get_inst_cfg(void); status_t wr_get_root_version(wr_vg_info_item_t *vg_item, uint64 *version); status_t wr_check_name(const char *name); +status_t wr_check_attr_flag(uint64_t attrFlag); status_t wr_check_path(const char *path); status_t wr_check_volume_path(const char *path); status_t wr_check_device_path(const char *path); diff --git a/src/common_api/wr_api_impl.c b/src/common_api/wr_api_impl.c index b3430a4..fd73a38 100644 --- a/src/common_api/wr_api_impl.c +++ b/src/common_api/wr_api_impl.c @@ -341,7 +341,7 @@ void wr_disconnect_ex(wr_conn_t *conn) return; } -status_t wr_vfs_create_impl(wr_conn_t *conn, const char *dir_name) +status_t wr_vfs_create_impl(wr_conn_t *conn, const char *dir_name, unsigned long long attrFlag) { text_t text; cm_str2text((char *)dir_name, &text); @@ -354,12 +354,13 @@ status_t wr_vfs_create_impl(wr_conn_t *conn, const char *dir_name) LOG_DEBUG_INF("wr make dir entry, dir_name:%s", dir_name); wr_make_dir_info_t send_info; send_info.name = dir_name; + send_info.attrFlag = attrFlag; status_t status = wr_msg_interact(conn, WR_CMD_MKDIR, (void *)&send_info, NULL); LOG_DEBUG_INF("wr make dir leave"); return status; } -status_t wr_vfs_delete_impl(wr_conn_t *conn, const char *dir) +status_t wr_vfs_delete_impl(wr_conn_t *conn, const char *dir, unsigned long long attrFlag) { WR_RETURN_IF_ERROR(wr_check_device_path(dir)); LOG_DEBUG_INF("wr remove dir entry, dir:%s", dir); @@ -900,7 +901,7 @@ status_t wr_read_write_file(wr_conn_t *conn, int32 handle, void *buf, int32 size return status; } -status_t wr_write_file_impl(wr_conn_t *conn, int handle, const void *buf, int size, long long offset) +status_t wr_write_file_impl(wr_conn_t *conn, int handle, const void *buf, unsigned long long size, long long offset) { wr_file_context_t *context = NULL; wr_write_file_info_t send_info; @@ -923,7 +924,7 @@ status_t wr_write_file_impl(wr_conn_t *conn, int handle, const void *buf, int si return status; } -status_t wr_pread_file_impl(wr_conn_t *conn, int handle, const void *buf, int size, long long offset) +status_t wr_pread_file_impl(wr_conn_t *conn, int handle, const void *buf, unsigned long long size, long long offset) { wr_write_file_info_t send_info; wr_rw_param_t param; @@ -1002,7 +1003,7 @@ status_t wr_rename_file_impl(wr_conn_t *conn, const char *src, const char *dst) return CM_SUCCESS; } -status_t wr_truncate_impl(wr_conn_t *conn, int handle, long long int length) +status_t wr_truncate_impl(wr_conn_t *conn, int handle, long long length, int truncateType) { if (length < 0) { WR_THROW_ERROR(ERR_WR_INVALID_PARAM, "length must be a positive integer"); @@ -1026,6 +1027,7 @@ status_t wr_truncate_impl(wr_conn_t *conn, int handle, long long int length) send_info.fid = context->fid; send_info.ftid = *(uint64 *)&(context->node->id); send_info.length = (uint64)length; + send_info.truncateType = truncateType; // send_info.vg_name = context->vg_name; send_info.vg_id = context->vgid; status_t status = wr_msg_interact(conn, WR_CMD_TRUNCATE_FILE, (void *)&send_info, NULL); diff --git a/src/common_api/wr_api_impl.h b/src/common_api/wr_api_impl.h index c8bbe8b..98ca473 100644 --- a/src/common_api/wr_api_impl.h +++ b/src/common_api/wr_api_impl.h @@ -101,6 +101,7 @@ typedef struct st_wr_rename_file_info { typedef struct st_wr_make_dir_info { const char *name; + uint64_t attrFlag; } wr_make_dir_info_t; typedef struct st_wr_refresh_file_info { @@ -123,6 +124,7 @@ typedef struct st_wr_truncate_file_info { uint64 length; const char *vg_name; uint32 vg_id; + int32_t truncateType; } wr_truncate_file_info_t; typedef struct st_wr_write_file_info { @@ -211,8 +213,8 @@ status_t wr_connect_ex(const char *server_locator, wr_conn_opt_t *options, wr_co void wr_disconnect_ex(wr_conn_t *conn); status_t wr_lock_vg_s(wr_vg_info_item_t *vg_item, wr_session_t *session); status_t wr_cli_session_lock(wr_conn_t *conn, wr_session_t *session); -status_t wr_vfs_create_impl(wr_conn_t *conn, const char *dir_name); -status_t wr_vfs_delete_impl(wr_conn_t *conn, const char *dir); +status_t wr_vfs_create_impl(wr_conn_t *conn, const char *dir_name, unsigned long long attrFlag); +status_t wr_vfs_delete_impl(wr_conn_t *conn, const char *dir, unsigned long long attrFlag); wr_vfs_t *wr_open_dir_impl(wr_conn_t *conn, const char *dir_path, bool32 refresh_recursive); gft_node_t *wr_read_dir_impl(wr_conn_t *conn, wr_vfs_t *dir, bool32 skip_delete); status_t wr_close_dir_impl(wr_conn_t *conn, wr_vfs_t *dir); @@ -222,9 +224,9 @@ status_t wr_open_file_impl(wr_conn_t *conn, const char *file_path, int flag, int status_t wr_close_file_impl(wr_conn_t *conn, int handle); status_t wr_exist_impl(wr_conn_t *conn, const char *path, bool32 *result, gft_item_type_t *type); int64 wr_seek_file_impl(wr_conn_t *conn, int handle, int64 offset, int origin); -status_t wr_write_file_impl(wr_conn_t *conn, int handle, const void *buf, int size, long long int offset); +status_t wr_write_file_impl(wr_conn_t *conn, int handle, const void *buf, unsigned long long size, long long int offset); status_t wr_rename_file_impl(wr_conn_t *conn, const char *src, const char *dst); -status_t wr_truncate_impl(wr_conn_t *conn, int handle, long long int length); +status_t wr_truncate_impl(wr_conn_t *conn, int handle, long long length, int truncateType); status_t wr_fstat_impl(wr_conn_t *conn, int handle, wr_stat_info_t item); status_t wr_set_stat_info(wr_stat_info_t item, gft_node_t *node); @@ -235,7 +237,7 @@ status_t wr_get_fname_impl(int handle, char *fname, int fname_size); status_t wr_vfs_query_file_num_impl(wr_conn_t *conn, const char *vfs_name, uint32 *file_num); status_t wr_pwrite_file_impl(wr_conn_t *conn, int handle, const void *buf, int size, long long offset); -status_t wr_pread_file_impl(wr_conn_t *conn, int handle, const void *buf, int size, long long offset); +status_t wr_pread_file_impl(wr_conn_t *conn, int handle, const void *buf, unsigned long long size, long long offset); status_t wr_get_addr_impl(wr_conn_t *conn, int32 handle, long long offset, char *pool_name, char *image_name, char *obj_addr, unsigned int *obj_id, unsigned long int *obj_offset); gft_node_t *wr_get_node_by_path_impl(wr_conn_t *conn, const char *path); diff --git a/src/interface/wr_api.c b/src/interface/wr_api.c index bb56901..9cc5dc0 100644 --- a/src/interface/wr_api.c +++ b/src/interface/wr_api.c @@ -65,14 +65,14 @@ void wr_set_default_conn_timeout(int timeout) g_wr_tcp_conn_timeout = timeout; } -int wr_create_instance(const char *addr, wr_instance_handle *inst_handle) +int wr_create_inst(const char *storageServerAddr, wr_instance_handle *inst_handle) { - if (addr == NULL || inst_handle == NULL) { + if (storageServerAddr == NULL || inst_handle == NULL) { LOG_RUN_ERR("create instance get invalid parameter."); return WR_ERROR; } - size_t addr_len = strlen(addr); + size_t addr_len = strlen(storageServerAddr); if (addr_len == 0 || addr_len >= CM_MAX_IP_LEN) { LOG_RUN_ERR("invalid address length: %u", addr_len); return WR_ERROR; @@ -84,14 +84,14 @@ int wr_create_instance(const char *addr, wr_instance_handle *inst_handle) return WR_ERROR; } hdl->conn = NULL; - errno_t err = memcpy_s(hdl->addr, addr_len + 1, addr, addr_len + 1); + errno_t err = memcpy_s(hdl->addr, addr_len + 1, storageServerAddr, addr_len + 1); if (err != EOK) { LOG_RUN_ERR("Error occured when copying addr, errno code is %d.\n", err); free(hdl); return (int)err; } - status_t ret = wr_enter_api(&hdl->conn, addr); + status_t ret = wr_enter_api(&hdl->conn, storageServerAddr); if (ret != WR_SUCCESS) { LOG_RUN_ERR("create instance get conn error."); free(hdl); @@ -101,7 +101,7 @@ int wr_create_instance(const char *addr, wr_instance_handle *inst_handle) return (int)ret; } -int wr_delete_instance(wr_instance_handle inst_handle) +int wr_delete_inst(wr_instance_handle inst_handle) { if (inst_handle != NULL) { st_wr_instance_handle *hdl = (st_wr_instance_handle *)inst_handle; @@ -112,7 +112,7 @@ int wr_delete_instance(wr_instance_handle inst_handle) } } -int wr_vfs_create(const char *vfs_name, wr_instance_handle inst_handle) +int wr_vfs_create(wr_instance_handle inst_handle, const char *vfs_name, unsigned long long attrFlag) { if (inst_handle == NULL) { LOG_RUN_ERR("instance handle is NULL."); @@ -123,11 +123,11 @@ int wr_vfs_create(const char *vfs_name, wr_instance_handle inst_handle) LOG_RUN_ERR("vfs create get conn error."); return WR_ERROR; } - status_t ret = wr_vfs_create_impl(hdl->conn, vfs_name); + status_t ret = wr_vfs_create_impl(hdl->conn, vfs_name, attrFlag); return (int)ret; } -int wr_vfs_delete(const char *vfs_name, wr_instance_handle inst_handle) +int wr_vfs_delete(wr_instance_handle inst_handle, const char *vfs_name, unsigned long long attrFlag) { if (inst_handle == NULL) { LOG_RUN_ERR("instance handle is NULL."); @@ -138,12 +138,13 @@ int wr_vfs_delete(const char *vfs_name, wr_instance_handle inst_handle) LOG_RUN_ERR("dremove get conn error."); return WR_ERROR; } - status_t ret = wr_vfs_delete_impl(hdl->conn, vfs_name); + status_t ret = wr_vfs_delete_impl(hdl->conn, vfs_name, attrFlag); return (int)ret; } -int wr_vfs_mount(const char *vfs_name, wr_vfs_handle *vfs_handle, wr_instance_handle inst_handle) +int wr_vfs_mount(wr_instance_handle inst_handle, const char *vfs_name, VfsHandlePtr *vfs_handle) { + /* if (inst_handle == NULL) { LOG_RUN_ERR("instance handle is NULL."); return WR_ERROR; @@ -156,10 +157,27 @@ int wr_vfs_mount(const char *vfs_name, wr_vfs_handle *vfs_handle, wr_instance_ha wr_vfs_t *dir = wr_open_dir_impl(hdl->conn, vfs_name, CM_TRUE); *vfs_handle = (wr_vfs_handle)dir; return WR_SUCCESS; + */ + if (inst_handle == NULL || vfs_handle == NULL) { + LOG_RUN_ERR("instance handle or vfs_handle is NULL."); + return WR_ERROR; + } + + vfs_handle->handle = inst_handle; + int32 errcode = memcpy_s(vfs_handle->vfs_name, WR_MAX_NAME_LEN, vfs_name, WR_MAX_NAME_LEN); + if (SECUREC_UNLIKELY(errcode != EOK)) { + WR_THROW_ERROR(ERR_SYSTEM_CALL, errcode); + return WR_ERROR; + } + // open dir, get dir descriptor + // wr_vfs_t *dir = wr_open_dir_impl(hdl->conn, vfs_name, CM_TRUE); + + return WR_SUCCESS; } -int wr_vfs_unmount(wr_vfs_handle vfs_handle, wr_instance_handle inst_handle) +int wr_vfs_unmount(wr_instance_handle inst_handle, VfsHandlePtr vfs_handle) { + /* if (inst_handle == NULL) { LOG_RUN_ERR("instance handle is NULL."); return WR_ERROR; @@ -171,6 +189,16 @@ int wr_vfs_unmount(wr_vfs_handle vfs_handle, wr_instance_handle inst_handle) } status_t ret = wr_close_dir_impl(hdl->conn, (wr_vfs_t *)vfs_handle); return (int)ret; + */ + // close dir + // status_t ret = wr_close_dir_impl(hdl->conn, (wr_vfs_t *)vfs_handle); + CM_FREE_PTR(vfs_handle.handle); + return CM_SUCCESS; +} + +int wr_vfs_control(void) +{ + return WR_SUCCESS; } int wr_dread(wr_vfs_handle dir, wr_dir_item_t item, wr_dir_item_t *result, wr_instance_handle inst_handle) @@ -281,28 +309,31 @@ int wr_fstat(int handle, wr_stat_info_t item, wr_instance_handle inst_handle) return (int)ret; } -int wr_file_create(const char *name, int flag, wr_instance_handle inst_handle) +int wr_file_create(VfsHandlePtr vfs_handle, const char *name, const FileParameter *param, int *fd) { - if (inst_handle == NULL) { + if (vfs_handle.handle == NULL) { LOG_RUN_ERR("instance handle is NULL."); return WR_ERROR; } - st_wr_instance_handle *hdl = (st_wr_instance_handle*)inst_handle; + st_wr_instance_handle *hdl = (st_wr_instance_handle*)(vfs_handle.handle); if (hdl->conn == NULL) { LOG_RUN_ERR("fcreate get conn error."); return WR_ERROR; } + // status_t ret = wr_create_file_impl(hdl->conn, name, param); + // *fd = ret; + int flag = 0; status_t ret = wr_create_file_impl(hdl->conn, name, flag); return (int)ret; } -int wr_file_delete(const char *file, wr_instance_handle inst_handle) +int wr_file_delete(VfsHandlePtr vfs_handle, const char *file) { - if (inst_handle == NULL) { + if (vfs_handle.handle == NULL) { LOG_RUN_ERR("instance handle is NULL."); return WR_ERROR; } - st_wr_instance_handle *hdl = (st_wr_instance_handle*)inst_handle; + st_wr_instance_handle *hdl = (st_wr_instance_handle*)(vfs_handle.handle); if (hdl->conn == NULL) { LOG_RUN_ERR("fremove get conn error."); return WR_ERROR; @@ -311,26 +342,26 @@ int wr_file_delete(const char *file, wr_instance_handle inst_handle) return (int)ret; } -int wr_file_open(const char *file, int flag, int *handle, wr_instance_handle inst_handle) +int wr_file_open(VfsHandlePtr vfs_handle, const char *file, int flag, int *fd) { timeval_t begin_tv; - *handle = -1; + *fd = -1; wr_begin_stat(&begin_tv); - if (inst_handle == NULL) { + if (vfs_handle.handle == NULL) { LOG_RUN_ERR("instance handle is NULL."); return WR_ERROR; } - st_wr_instance_handle *hdl = (st_wr_instance_handle*)inst_handle; + st_wr_instance_handle *hdl = (st_wr_instance_handle*)(vfs_handle.handle); if (hdl->conn == NULL) { LOG_RUN_ERR("fopen get conn error."); return WR_ERROR; } - status_t ret = wr_open_file_impl(hdl->conn, file, flag, handle); + status_t ret = wr_open_file_impl(hdl->conn, file, flag, fd); // if open fails, -1 is returned. DB determines based on -1 if (ret == WR_SUCCESS) { - *handle += WR_HANDLE_BASE; + *fd += WR_HANDLE_BASE; } wr_session_end_stat(hdl->conn->session, &begin_tv, WR_FOPEN); return (int)ret; @@ -379,19 +410,19 @@ int wr_set_main_inst(wr_instance_handle inst_handle) return (int)ret; } -int wr_file_close(int handle, wr_instance_handle inst_handle) +int wr_file_close(VfsHandlePtr vfs_handle, int fd) { - if (inst_handle == NULL) { + if (vfs_handle.handle == NULL) { LOG_RUN_ERR("instance handle is NULL."); return WR_ERROR; } - st_wr_instance_handle *hdl = (st_wr_instance_handle*)inst_handle; + st_wr_instance_handle *hdl = (st_wr_instance_handle*)(vfs_handle.handle); if (hdl->conn == NULL) { LOG_RUN_ERR("fclose get conn error."); return WR_ERROR; } - status_t ret = wr_close_file_impl(hdl->conn, HANDLE_VALUE(handle)); + status_t ret = wr_close_file_impl(hdl->conn, HANDLE_VALUE(fd)); return (int)ret; } @@ -411,12 +442,12 @@ long long wr_fseek(int handle, long long offset, int origin, wr_instance_handle return status; } -int wr_file_pwrite(int handle, const void *buf, int size, long long offset, wr_instance_handle inst_handle) +int wr_file_pwrite(int fd, const void *buf, unsigned long long count, long long offset, VfsHandlePtr vfs_handle) { timeval_t begin_tv; wr_begin_stat(&begin_tv); - if (size < 0) { - LOG_DEBUG_ERR("File size is invalid:%d.", size); + if (count < 0) { + LOG_DEBUG_ERR("File size is invalid:%d.", count); WR_THROW_ERROR(ERR_WR_INVALID_PARAM, "size must be a positive integer"); return CM_ERROR; } @@ -425,30 +456,30 @@ int wr_file_pwrite(int handle, const void *buf, int size, long long offset, wr_i WR_THROW_ERROR(ERR_WR_INVALID_PARAM, "offset must less than WR_MAX_FILE_SIZE"); return CM_ERROR; } - if (inst_handle == NULL) { + if (vfs_handle.handle == NULL) { LOG_RUN_ERR("instance handle is NULL."); return WR_ERROR; } - st_wr_instance_handle *hdl = (st_wr_instance_handle*)inst_handle; + st_wr_instance_handle *hdl = (st_wr_instance_handle*)(vfs_handle.handle); if (hdl->conn == NULL) { LOG_RUN_ERR("pwrite get conn error."); return WR_ERROR; } - status_t ret = wr_write_file_impl(hdl->conn, HANDLE_VALUE(handle), buf, size, offset); + status_t ret = wr_write_file_impl(hdl->conn, HANDLE_VALUE(fd), buf, count, offset); if (ret == CM_SUCCESS) { wr_session_end_stat(hdl->conn->session, &begin_tv, WR_PWRITE); } return (int)ret; } -int wr_file_pread(int handle, void *buf, int size, long long offset, wr_instance_handle inst_handle) +int wr_file_pread(int fd, void *buf, unsigned long long count, long long offset, VfsHandlePtr vfs_handle) { timeval_t begin_tv; wr_begin_stat(&begin_tv); - if (size < 0) { - LOG_DEBUG_ERR("File size is invalid:%d.", size); + if (count < 0) { + LOG_DEBUG_ERR("File size is invalid:%d.", count); WR_THROW_ERROR(ERR_WR_INVALID_PARAM, "size must be a positive integer"); return CM_ERROR; } @@ -457,17 +488,17 @@ int wr_file_pread(int handle, void *buf, int size, long long offset, wr_instance WR_THROW_ERROR(ERR_WR_INVALID_PARAM, "offset must less than WR_MAX_FILE_SIZE"); return CM_ERROR; } - if (inst_handle == NULL) { + if (vfs_handle.handle == NULL) { LOG_RUN_ERR("instance handle is NULL."); return WR_ERROR; } - st_wr_instance_handle *hdl = (st_wr_instance_handle*)inst_handle; + st_wr_instance_handle *hdl = (st_wr_instance_handle*)(vfs_handle.handle); if (hdl->conn == NULL) { LOG_RUN_ERR("pread get conn error."); return WR_ERROR; } - status_t ret = wr_pread_file_impl(hdl->conn, HANDLE_VALUE(handle), buf, size, offset); + status_t ret = wr_pread_file_impl(hdl->conn, HANDLE_VALUE(fd), buf, count, offset); if (ret == CM_SUCCESS) { wr_session_end_stat(hdl->conn->session, &begin_tv, WR_PREAD); } @@ -490,21 +521,37 @@ int wr_frename(const char *src, const char *dst, wr_instance_handle inst_handle) return (int)ret; } -int wr_file_truncate(int handle, long long length, wr_instance_handle inst_handle) +int wr_file_truncate(int fd, int truncateType, long long offset, VfsHandlePtr vfs_handle) { - if (inst_handle == NULL) { + if (vfs_handle.handle == NULL) { LOG_RUN_ERR("instance handle is NULL."); return WR_ERROR; } - st_wr_instance_handle *hdl = (st_wr_instance_handle*)inst_handle; + st_wr_instance_handle *hdl = (st_wr_instance_handle*)(vfs_handle.handle); if (hdl->conn == NULL) { LOG_RUN_ERR("ftruncate get conn error."); return WR_ERROR; } - status_t ret = wr_truncate_impl(hdl->conn, HANDLE_VALUE(handle), length); + status_t ret = wr_truncate_impl(hdl->conn, HANDLE_VALUE(fd), offset, truncateType); return (int)ret; } +int wr_file_stat(const char *fileName, long long offset, unsigned long long count) +{ + // wr_fstat ? + return WR_SUCCESS; +} + +int wr_file_pwrite_async() +{ + return WR_SUCCESS; +} + +int wr_file_performance() +{ + return WR_SUCCESS; +} + static void wr_fsize_with_options(const char *fname, long long *fsize, int origin, wr_instance_handle inst_handle) { @@ -756,7 +803,7 @@ int wr_aio_post_pwrite(void *iocb, int handle, size_t count, long long offset) return CM_SUCCESS; } -int wr_set_conf(const char *name, const char *value, const char *scope, wr_instance_handle inst_handle) +int wr_set_conf(const char *name, const char *value, wr_instance_handle inst_handle) { if (name == NULL || value == NULL) { WR_THROW_ERROR(ERR_WR_INVALID_PARAM, "invalid name or value when set cfg"); @@ -769,12 +816,7 @@ int wr_set_conf(const char *name, const char *value, const char *scope, wr_insta return WR_ERROR; } - char *tmp_scope = NULL; - if (scope == NULL) { - tmp_scope = (char *)"both"; - } else { - tmp_scope = (char *)scope; - } + char *scope = (char *)scope; if (inst_handle == NULL) { LOG_RUN_ERR("instance handle is NULL."); @@ -786,20 +828,16 @@ int wr_set_conf(const char *name, const char *value, const char *scope, wr_insta return WR_ERROR; } - status_t ret = wr_setcfg_impl(hdl->conn, name, value, tmp_scope); + status_t ret = wr_setcfg_impl(hdl->conn, name, value, scope); return (int)ret; } -int wr_get_conf(const char *name, char *value, int value_size, wr_instance_handle inst_handle) +int wr_get_conf(const char *name, char *value, wr_instance_handle inst_handle) { if (name == NULL) { WR_THROW_ERROR(ERR_WR_INVALID_PARAM, "invalid name when get cfg"); return WR_ERROR; } - if (value_size <= 0) { - WR_THROW_ERROR(ERR_WR_INVALID_PARAM, "invalid value_size when get cfg"); - return WR_ERROR; - } if (inst_handle == NULL) { LOG_RUN_ERR("instance handle is NULL."); return WR_ERROR; @@ -810,7 +848,7 @@ int wr_get_conf(const char *name, char *value, int value_size, wr_instance_handl return WR_ERROR; } - status_t ret = wr_getcfg_impl(hdl->conn, name, value, (size_t)value_size); + status_t ret = wr_getcfg_impl(hdl->conn, name, value, WR_PARAM_BUFFER_SIZE); return (int)ret; } @@ -828,6 +866,20 @@ void wr_show_version(char *version) } } +int wr_init(const wr_param_t *param) +{ + return wr_init_logger(param->log_home, + param->log_level, + param->log_backup_file_count, + param->log_max_file_size); +} +/* +int wr_exit(void) +{ + return WR_SUCCESS; +} +*/ + #ifdef __cplusplus } #endif diff --git a/src/interface/wr_api.h b/src/interface/wr_api.h index f3a384a..fdb3ce9 100644 --- a/src/interface/wr_api.h +++ b/src/interface/wr_api.h @@ -66,6 +66,13 @@ typedef enum en_wr_log_id { WR_LOG_ID_COUNT, } wr_log_id_t; +typedef struct wr_param_t { + char *log_home; + unsigned int log_level; + unsigned int log_backup_file_count; + unsigned long long log_max_file_size; +} wr_param_t; + #define WR_SEEK_MAXWR 3 /* Used for seek actual file size for openGauss */ #define WR_MAX_NAME_LEN 64 /* Consistent with wr_defs.h */ #define WR_FILE_PATH_MAX_LENGTH (SIZE_K(1) + 1) /* Consistent with wr_defs.h */ @@ -89,6 +96,20 @@ typedef struct st_wr_dirent { char d_name[WR_MAX_NAME_LEN]; } wr_dirent_t; +typedef struct VfsHandlePtr { + wr_instance_handle handle; + char vfs_name[WR_MAX_NAME_LEN]; +} VfsHandlePtr; + +typedef struct FileParameter { + unsigned long long attrFlag; + unsigned long long fileSize; + unsigned long long blockSize; + unsigned long long maxFileSize; + unsigned long long maxOpenFiles; + unsigned long long maxOpenFilesPerInstance; +} FileParameter; + typedef enum en_wr_rdwr_type_e { WR_STATUS_NORMAL = 0, WR_STATUS_READONLY, @@ -142,10 +163,11 @@ typedef void (*wr_log_output)(wr_log_id_t log_type, wr_log_level_t log_level, co unsigned int code_line_num, const char *module_name, const char *format, ...); typedef void (*wr_exit_callback_t)(int exit_code); // vfs -WR_DECLARE int wr_vfs_create(const char *vfs_name, wr_instance_handle inst_handle); -WR_DECLARE int wr_vfs_delete(const char *vfs_name, wr_instance_handle inst_handle); -WR_DECLARE int wr_vfs_mount(const char *vfs_name, wr_vfs_handle *vfs_handle, wr_instance_handle inst_handle); -WR_DECLARE int wr_vfs_unmount(wr_vfs_handle vfs_handle, wr_instance_handle inst_handle); +WR_DECLARE int wr_vfs_create(wr_instance_handle inst_handle, const char *vfs_name, unsigned long long attrFlag); +WR_DECLARE int wr_vfs_delete(wr_instance_handle inst_handle, const char *vfs_name, unsigned long long attrFlag); +WR_DECLARE int wr_vfs_mount(wr_instance_handle inst_handle, const char *vfs_name, VfsHandlePtr *vfs_handle); +WR_DECLARE int wr_vfs_unmount(wr_instance_handle inst_handle, VfsHandlePtr vfs_handle); +WR_DECLARE int wr_vfs_control(void); WR_DECLARE int wr_dread(wr_vfs_handle dir, wr_dir_item_t item, wr_dir_item_t *result, wr_instance_handle inst_handle); WR_DECLARE int wr_vfs_query_file_info(wr_vfs_handle dir, wr_dir_item_t item, wr_dir_item_t *result); @@ -153,18 +175,21 @@ WR_DECLARE int wr_vfs_query_file_info(wr_vfs_handle dir, wr_dir_item_t item, wr_ WR_DECLARE int wr_vfs_query_file_num(wr_instance_handle inst_handle, const char *vfs_name, int *file_num); // file -WR_DECLARE int wr_file_create(const char *name, int flag, wr_instance_handle inst_handle); -WR_DECLARE int wr_file_delete(const char *file, wr_instance_handle inst_handle); -WR_DECLARE int wr_file_open(const char *file, int flag, int *handle, wr_instance_handle inst_handle); -WR_DECLARE int wr_file_close(int handle, wr_instance_handle inst_handle); +WR_DECLARE int wr_file_create(VfsHandlePtr vfs_handle, const char *name, const FileParameter *param, int *fd); +WR_DECLARE int wr_file_delete(VfsHandlePtr vfs_handle, const char *file); +WR_DECLARE int wr_file_open(VfsHandlePtr vfs_handle, const char *file, int flag, int *fd); +WR_DECLARE int wr_file_close(VfsHandlePtr vfs_handle, int fd); WR_DECLARE long long wr_fseek(int handle, long long offset, int origin, wr_instance_handle inst_handle); WR_DECLARE int wr_file_rename(const char *src, const char *dst); -WR_DECLARE int wr_file_truncate(int handle, long long length, wr_instance_handle inst_handle); +WR_DECLARE int wr_file_truncate(int fd, int truncateType, long long offset, VfsHandlePtr vfs_handle); WR_DECLARE int wr_file_size_physical(int handle, long long *fsize); WR_DECLARE void wr_file_size_maxwr(const char *fname, long long *fsize); -WR_DECLARE int wr_file_pwrite(int handle, const void *buf, int size, long long offset, wr_instance_handle inst_handle); -WR_DECLARE int wr_file_pread(int handle, void *buf, int size, long long offset, wr_instance_handle inst_handle); +WR_DECLARE int wr_file_pwrite(int fd, const void *buf, unsigned long long count, long long offset, VfsHandlePtr vfs_handle); +WR_DECLARE int wr_file_pread(int fd, void *buf, unsigned long long count, long long offset, VfsHandlePtr vfs_handle); WR_DECLARE int wr_file_fallocate(int handle, int mode, long long offset, long long length); +WR_DECLARE int wr_file_stat(const char *fileName, long long offset, unsigned long long count); +WR_DECLARE int wr_file_pwrite_async(); +WR_DECLARE int wr_file_performance(); // aio WR_DECLARE int wr_aio_prep_pread(void *iocb, int handle, void *buf, size_t count, long long offset); @@ -182,8 +207,8 @@ WR_DECLARE void wr_refresh_logger(char *log_field, unsigned long long *value); WR_DECLARE int wr_set_conn_timeout(int timeout); WR_DECLARE int wr_set_conn_opts(wr_conn_opt_key_e key, void *value, const char *addr); WR_DECLARE void wr_set_default_conn_timeout(int timeout); -WR_DECLARE int wr_create_instance(const char *addr, wr_instance_handle *inst_handle); -WR_DECLARE int wr_delete_instance(wr_instance_handle inst_handle); +WR_DECLARE int wr_create_inst(const char *storageServerAddr, wr_instance_handle *inst_handle); +WR_DECLARE int wr_delete_inst(wr_instance_handle inst_handle); // instance param WR_DECLARE int wr_set_main_inst(wr_instance_handle inst_handle); WR_DECLARE int wr_get_inst_status(wr_server_status_t *wr_status, wr_instance_handle inst_handle); @@ -194,13 +219,17 @@ WR_DECLARE int wr_lstat(const char *path, wr_stat_info_t item, wr_instance_handl WR_DECLARE int wr_fstat(int handle, wr_stat_info_t item, wr_instance_handle inst_handle); // config -WR_DECLARE int wr_set_conf(const char *name, const char *value, const char *scope, wr_instance_handle inst_handle); -WR_DECLARE int wr_get_conf(const char *name, char *value, int value_size, wr_instance_handle inst_handle); +WR_DECLARE int wr_set_conf(const char *name, const char *value, wr_instance_handle inst_handle); +WR_DECLARE int wr_get_conf(const char *name, char *value, wr_instance_handle inst_handle); // version WR_DECLARE int wr_get_lib_version(void); WR_DECLARE void wr_show_version(char *version); WR_DECLARE void wr_show_version(char *version); +// SDK +WR_DECLARE int wr_init(const wr_param_t *param); +// WR_DECLARE int wr_exit(void); + #ifdef __cplusplus } #endif -- Gitee