23 #include <rados/librados.h> 87 #define RADOS_ERR(__err_str, __ret) do { \ 104 RADOS_ERR(
"unable to create RADOS cluster handle", ret);
109 RADOS_ERR(
"unable to read RADOS config file", ret);
114 RADOS_ERR(
"unable to connect to the RADOS cluster", ret);
119 RADOS_ERR(
"unable to create an I/O context for the RADOS cluster", ret);
140 oid = strdup(testFileName);
142 ERR(
"unable to allocate RADOS oid");
146 rados_write_op_t create_op;
147 int rados_create_flag;
150 rados_create_flag = LIBRADOS_CREATE_EXCLUSIVE;
152 rados_create_flag = LIBRADOS_CREATE_IDEMPOTENT;
155 create_op = rados_create_write_op();
156 rados_write_op_create(create_op, rados_create_flag,
NULL);
157 ret = rados_write_op_operate(create_op, param->
rados_ioctx, oid,
159 rados_release_write_op(create_op);
161 RADOS_ERR(
"unable to create RADOS object", ret);
188 char *oid = (
char *)fd;
192 rados_write_op_t write_op;
194 write_op = rados_create_write_op();
195 rados_write_op_write(write_op, (
const char *)buffer,
197 ret = rados_write_op_operate(write_op, param->
rados_ioctx,
199 rados_release_write_op(write_op);
201 RADOS_ERR(
"unable to write RADOS object", ret);
207 rados_read_op_t read_op;
209 read_op = rados_create_read_op();
210 rados_read_op_read(read_op, param->
offset, length, (
char *)buffer,
211 &bytes_read, &read_ret);
212 ret = rados_read_op_operate(read_op, param->
rados_ioctx, oid, 0);
213 rados_release_read_op(read_op);
214 if (ret || read_ret || ((
IOR_offset_t)bytes_read != length))
215 RADOS_ERR(
"unable to read RADOS object", ret);
228 char *oid = (
char *)fd;
240 char *oid = testFileName;
241 rados_write_op_t remove_op;
247 remove_op = rados_create_write_op();
248 rados_write_op_remove(remove_op);
249 ret = rados_write_op_operate(remove_op, param->
rados_ioctx,
251 rados_release_write_op(remove_op);
253 RADOS_ERR(
"unable to remove RADOS object", ret);
264 char *oid = testFileName;
265 rados_read_op_t stat_op;
274 stat_op = rados_create_read_op();
275 rados_read_op_stat(stat_op, &oid_size,
NULL, &stat_ret);
276 ret = rados_read_op_operate(stat_op, test->
rados_ioctx, oid, 0);
277 rados_release_read_op(stat_op);
279 RADOS_ERR(
"unable to stat RADOS object", stat_ret);
280 aggSizeFromStat = oid_size;
284 MPI_CHECK(MPI_Allreduce(&aggSizeFromStat, &tmpSum, 1,
285 MPI_LONG_LONG_INT, MPI_SUM, testComm),
286 "cannot total data moved");
287 aggSizeFromStat = tmpSum;
291 MPI_CHECK(MPI_Allreduce(&aggSizeFromStat, &tmpMin, 1,
292 MPI_LONG_LONG_INT, MPI_MIN, testComm),
293 "cannot total data moved");
294 MPI_CHECK(MPI_Allreduce(&aggSizeFromStat, &tmpMax, 1,
295 MPI_LONG_LONG_INT, MPI_MAX, testComm),
296 "cannot total data moved");
297 if (tmpMin != tmpMax)
300 WARN(
"inconsistent file size by different tasks");
303 aggSizeFromStat = tmpMin;
309 return aggSizeFromStat;
315 WARN(
"statfs not supported in RADOS backend!");
321 WARN(
"mkdir not supported in RADOS backend!");
327 WARN(
"rmdir not supported in RADOS backend!");
333 rados_read_op_t read_op;
342 read_op = rados_create_read_op();
343 rados_read_op_stat(read_op, &oid_size,
NULL, &prval);
344 ret = rados_read_op_operate(read_op, param->
rados_ioctx, oid, 0);
345 rados_release_read_op(read_op);
357 WARN(
"stat not supported in RADOS backend!");
static IOR_offset_t RADOS_GetFileSize(IOR_param_t *, MPI_Comm, char *)
static int RADOS_RmDir(const char *, IOR_param_t *)
#define RADOS_ERR(__err_str, __ret)
static void RADOS_Close(void *, IOR_param_t *)
static void * RADOS_Create(char *, IOR_param_t *)
static void RADOS_Fsync(void *, IOR_param_t *)
static void * RADOS_Create_Or_Open(char *testFileName, IOR_param_t *param, int create_flag)
static void * RADOS_Open(char *, IOR_param_t *)
static void RADOS_Delete(char *, IOR_param_t *)
char * aiori_get_version()
#define MPI_CHECK(MPI_STATUS, MSG)
static int RADOS_Access(const char *, int, IOR_param_t *)
static struct rados_options o
static int RADOS_Stat(const char *, struct stat *, IOR_param_t *)
static void RADOS_Cluster_Init(IOR_param_t *param)
static int RADOS_StatFS(const char *, ior_aiori_statfs_t *, IOR_param_t *)
static IOR_offset_t RADOS_Xfer(int, void *, IOR_size_t *, IOR_offset_t, IOR_param_t *)
static option_help * RADOS_options()
static int RADOS_MkDir(const char *, mode_t, IOR_param_t *)
rados_ioctx_t rados_ioctx
long long int IOR_offset_t
static void RADOS_Cluster_Finalize(IOR_param_t *param)
static option_help options[]