24 #include <rados/librados.h> 31 #define RADOS_ERR(__err_str, __ret) do { \ 66 if (init_values !=
NULL){
85 memcpy(help, h,
sizeof(h));
120 ERR(
"RADOS user must be specified");
122 ERR(
"RADOS conf must be specified");
124 ERR(
"RADOS pool must be specified");
136 RADOS_ERR(
"unable to create RADOS cluster handle", ret);
141 RADOS_ERR(
"unable to read RADOS config file", ret);
146 RADOS_ERR(
"unable to connect to the RADOS cluster", ret);
151 RADOS_ERR(
"unable to create an I/O context for the RADOS cluster", ret);
170 oid = strdup(testFileName);
172 ERR(
"unable to allocate RADOS oid");
176 rados_write_op_t create_op;
177 int rados_create_flag;
180 rados_create_flag = LIBRADOS_CREATE_EXCLUSIVE;
182 rados_create_flag = LIBRADOS_CREATE_IDEMPOTENT;
185 create_op = rados_create_write_op();
186 rados_write_op_create(create_op, rados_create_flag,
NULL);
187 ret = rados_write_op_operate(create_op,
rados_ioctx, oid,
189 rados_release_write_op(create_op);
191 RADOS_ERR(
"unable to create RADOS object", ret);
215 char *oid = (
char *)fd;
219 rados_write_op_t write_op;
221 write_op = rados_create_write_op();
222 rados_write_op_write(write_op, (
const char *)buffer,
224 ret = rados_write_op_operate(write_op,
rados_ioctx,
226 rados_release_write_op(write_op);
228 RADOS_ERR(
"unable to write RADOS object", ret);
234 rados_read_op_t read_op;
236 read_op = rados_create_read_op();
237 rados_read_op_read(read_op, offset, length, (
char *)buffer,
238 &bytes_read, &read_ret);
239 ret = rados_read_op_operate(read_op,
rados_ioctx, oid, 0);
240 rados_release_read_op(read_op);
241 if (ret || read_ret || ((
IOR_offset_t)bytes_read != length))
242 RADOS_ERR(
"unable to read RADOS object", ret);
255 char *oid = (
char *)fd;
266 char *oid = testFileName;
267 rados_write_op_t remove_op;
270 remove_op = rados_create_write_op();
271 rados_write_op_remove(remove_op);
272 ret = rados_write_op_operate(remove_op,
rados_ioctx,
274 rados_release_write_op(remove_op);
276 RADOS_ERR(
"unable to remove RADOS object", ret);
284 char *oid = testFileName;
285 rados_read_op_t stat_op;
291 stat_op = rados_create_read_op();
292 rados_read_op_stat(stat_op, &oid_size,
NULL, &stat_ret);
293 ret = rados_read_op_operate(stat_op,
rados_ioctx, oid, 0);
294 rados_release_read_op(stat_op);
296 RADOS_ERR(
"unable to stat RADOS object", stat_ret);
297 aggSizeFromStat = oid_size;
299 return aggSizeFromStat;
305 WARN(
"statfs not supported in RADOS backend!");
311 WARN(
"mkdir not supported in RADOS backend!");
317 WARN(
"rmdir not supported in RADOS backend!");
323 rados_read_op_t read_op;
329 read_op = rados_create_read_op();
330 rados_read_op_stat(read_op, &oid_size,
NULL, &prval);
331 ret = rados_read_op_operate(read_op,
rados_ioctx, oid, 0);
332 rados_release_read_op(read_op);
342 WARN(
"stat not supported in RADOS backend!");
static IOR_offset_t RADOS_Xfer(int, aiori_fd_t *, IOR_size_t *, IOR_offset_t, IOR_offset_t, aiori_mod_opt_t *)
static int RADOS_Access(const char *, int, aiori_mod_opt_t *)
static IOR_offset_t RADOS_GetFileSize(aiori_mod_opt_t *, char *)
static int RADOS_MkDir(const char *, mode_t, aiori_mod_opt_t *)
static aiori_fd_t * RADOS_Create_Or_Open(char *testFileName, int flags, aiori_mod_opt_t *param)
static void RADOS_Delete(char *, aiori_mod_opt_t *)
static void RADOS_Initialize(aiori_mod_opt_t *)
static rados_t rados_cluster
struct benchmark_options o
#define RADOS_ERR(__err_str, __ret)
static aiori_fd_t * RADOS_Create(char *, int flags, aiori_mod_opt_t *)
static int RADOS_Stat(const char *, struct stat *, aiori_mod_opt_t *)
static void RADOS_Fsync(aiori_fd_t *, aiori_mod_opt_t *)
static int RADOS_StatFS(const char *, ior_aiori_statfs_t *, aiori_mod_opt_t *)
char * aiori_get_version()
static option_help options[]
static aiori_fd_t * RADOS_Open(char *, int flags, aiori_mod_opt_t *)
static rados_ioctx_t rados_ioctx
static int RADOS_RmDir(const char *, aiori_mod_opt_t *)
static int RADOS_check_params(aiori_mod_opt_t *options)
static option_help * RADOS_options(aiori_mod_opt_t **init_backend_options, aiori_mod_opt_t *init_values)
static void RADOS_Finalize(aiori_mod_opt_t *)
static void RADOS_Close(aiori_fd_t *, aiori_mod_opt_t *)
long long int IOR_offset_t