From 16bedd2f850ffcad7459009957d6a1a039904b4e Mon Sep 17 00:00:00 2001 From: Colin Patrick McCabe Date: Wed, 13 Jul 2011 14:37:48 -0700 Subject: [PATCH] Move list objects logic to st_rados_list_objects Signed-off-by: Colin McCabe --- src/Makefile.am | 4 +- src/test/system/rados_list_parallel.cc | 69 ++---------------- src/test/system/st_rados_list_objects.cc | 93 ++++++++++++++++++++++++ src/test/system/st_rados_list_objects.h | 45 ++++++++++++ 4 files changed, 146 insertions(+), 65 deletions(-) create mode 100644 src/test/system/st_rados_list_objects.cc create mode 100644 src/test/system/st_rados_list_objects.h diff --git a/src/Makefile.am b/src/Makefile.am index 9c61de6a25008..cb9f631aa2c5b 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -385,7 +385,8 @@ noinst_LTLIBRARIES += libsystest.la rados_list_parallel_SOURCES = \ test/system/rados_list_parallel.cc \ - test/system/st_rados_create_pool.cc + test/system/st_rados_create_pool.cc \ + test/system/st_rados_list_objects.cc rados_list_parallel_LDADD = libsystest.la librados.la bin_DEBUGPROGRAMS += rados_list_parallel @@ -1173,6 +1174,7 @@ noinst_HEADERS = \ common/sync_filesystem.h \ test/system/cross_process_sem.h \ test/system/st_rados_create_pool.h \ + test/system/st_rados_list_objects.h \ test/system/systest_runnable.h \ test/system/systest_settings.h diff --git a/src/test/system/rados_list_parallel.cc b/src/test/system/rados_list_parallel.cc index 54c8fbc224bb6..369939ef41266 100644 --- a/src/test/system/rados_list_parallel.cc +++ b/src/test/system/rados_list_parallel.cc @@ -15,6 +15,7 @@ #include "cross_process_sem.h" #include "include/rados/librados.h" #include "st_rados_create_pool.h" +#include "st_rados_list_objects.h" #include "systest_runnable.h" #include "systest_settings.h" @@ -39,66 +40,6 @@ static int g_num_objects = 50; static CrossProcessSem *pool_setup_sem = NULL; static CrossProcessSem *modify_sem = NULL; -class RadosListObjectsR : public SysTestRunnable -{ -public: - RadosListObjectsR(int argc, const char **argv) - : SysTestRunnable(argc, argv) - { - } - - ~RadosListObjectsR() - { - } - - int run() - { - rados_t cl; - RETURN_IF_NONZERO(rados_create(&cl, NULL)); - rados_conf_parse_argv(cl, m_argc, m_argv); - RETURN_IF_NONZERO(rados_conf_read_file(cl, NULL)); - RETURN_IF_NONZERO(rados_connect(cl)); - pool_setup_sem->wait(); - pool_setup_sem->post(); - - rados_ioctx_t io_ctx; - RETURN_IF_NOT_VAL(-EEXIST, rados_pool_create(cl, "foo")); - RETURN_IF_NONZERO(rados_ioctx_create(cl, "foo", &io_ctx)); - - int ret, saw = 0; - const char *obj_name; - rados_list_ctx_t h; - printf("%s: listing objects.\n", get_id_str()); - RETURN_IF_NONZERO(rados_objects_list_open(io_ctx, &h)); - while (true) { - ret = rados_objects_list_next(h, &obj_name); - if (ret == -ENOENT) { - break; - } - else if (ret != 0) { - printf("%s: rados_objects_list_next error: %d\n", get_id_str(), ret); - return ret; - } - char *obj_name_copy = strdup(obj_name); - free(obj_name_copy); - if ((saw % 25) == 0) { - printf("%s: listed object %d...\n", get_id_str(), saw); - } - ++saw; - if (saw == g_num_objects / 2) - modify_sem->wait(); - } - rados_objects_list_close(h); - - printf("%s: saw %d objects\n", get_id_str(), saw); - - rados_ioctx_destroy(io_ctx); - rados_shutdown(cl); - - return 0; - } -}; - class RadosDeleteObjectsR : public SysTestRunnable { public: @@ -276,7 +217,7 @@ int main(int argc, const char **argv) // Test 1... list objects { StRadosCreatePool r1(argc, argv, pool_setup_sem, NULL, g_num_objects); - RadosListObjectsR r2(argc, argv); + StRadosListObjects r2(argc, argv, g_num_objects, pool_setup_sem, modify_sem); vector < SysTestRunnable* > vec; vec.push_back(&r1); vec.push_back(&r2); @@ -292,7 +233,7 @@ int main(int argc, const char **argv) RETURN_IF_NONZERO(modify_sem->reinit(0)); { StRadosCreatePool r1(argc, argv, pool_setup_sem, NULL, g_num_objects); - RadosListObjectsR r2(argc, argv); + StRadosListObjects r2(argc, argv, g_num_objects, pool_setup_sem, modify_sem); RadosDeleteObjectsR r3(argc, argv); vector < SysTestRunnable* > vec; vec.push_back(&r1); @@ -310,7 +251,7 @@ int main(int argc, const char **argv) RETURN_IF_NONZERO(modify_sem->reinit(0)); { StRadosCreatePool r1(argc, argv, pool_setup_sem, NULL, g_num_objects); - RadosListObjectsR r2(argc, argv); + StRadosListObjects r2(argc, argv, g_num_objects, pool_setup_sem, modify_sem); RadosAddObjectsR r3(argc, argv, "obj2"); vector < SysTestRunnable* > vec; vec.push_back(&r1); @@ -328,7 +269,7 @@ int main(int argc, const char **argv) RETURN_IF_NONZERO(modify_sem->reinit(0)); { StRadosCreatePool r1(argc, argv, pool_setup_sem, NULL, g_num_objects); - RadosListObjectsR r2(argc, argv); + StRadosListObjects r2(argc, argv, g_num_objects, pool_setup_sem, modify_sem); RadosAddObjectsR r3(argc, argv, "obj2"); RadosAddObjectsR r4(argc, argv, "obj3"); RadosDeleteObjectsR r5(argc, argv); diff --git a/src/test/system/st_rados_list_objects.cc b/src/test/system/st_rados_list_objects.cc new file mode 100644 index 0000000000000..41ba15dde00bb --- /dev/null +++ b/src/test/system/st_rados_list_objects.cc @@ -0,0 +1,93 @@ +// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*- +// vim: ts=8 sw=2 smarttab +/* +* Ceph - scalable distributed file system +* +* Copyright (C) 2011 New Dream Network +* +* This is free software; you can redistribute it and/or +* modify it under the terms of the GNU Lesser General Public +* License version 2.1, as published by the Free Software +* Foundation. See file COPYING. +* +*/ + +#include "cross_process_sem.h" +#include "include/rados/librados.h" +#include "st_rados_list_objects.h" +#include "systest_runnable.h" +#include "systest_settings.h" + +#include +#include +#include +#include +#include +#include + +using std::ostringstream; + +StRadosListObjects:: +StRadosListObjects(int argc, const char **argv, int midway_cnt, + CrossProcessSem *pool_setup_sem, CrossProcessSem *midway_sem) + : SysTestRunnable(argc, argv), + m_midway_cnt(midway_cnt), + m_pool_setup_sem(pool_setup_sem), + m_midway_sem(midway_sem) +{ +} + +StRadosListObjects:: +~StRadosListObjects() +{ +} + +int StRadosListObjects:: +run() +{ + rados_t cl; + RETURN_IF_NONZERO(rados_create(&cl, NULL)); + rados_conf_parse_argv(cl, m_argc, m_argv); + RETURN_IF_NONZERO(rados_conf_read_file(cl, NULL)); + RETURN_IF_NONZERO(rados_connect(cl)); + m_pool_setup_sem->wait(); + m_pool_setup_sem->post(); + + rados_ioctx_t io_ctx; + RETURN_IF_NOT_VAL(-EEXIST, rados_pool_create(cl, "foo")); + RETURN_IF_NONZERO(rados_ioctx_create(cl, "foo", &io_ctx)); + + int ret, saw = 0; + const char *obj_name; + rados_list_ctx_t h; + printf("%s: listing objects.\n", get_id_str()); + RETURN_IF_NONZERO(rados_objects_list_open(io_ctx, &h)); + while (true) { + ret = rados_objects_list_next(h, &obj_name); + if (ret == -ENOENT) { + break; + } + else if (ret != 0) { + printf("%s: rados_objects_list_next error: %d\n", get_id_str(), ret); + return ret; + } + char *obj_name_copy = strdup(obj_name); + free(obj_name_copy); + if ((saw % 25) == 0) { + printf("%s: listed object %d...\n", get_id_str(), saw); + } + ++saw; + if (saw == m_midway_cnt) { + if (m_midway_sem) + m_midway_sem->wait(); + } + } + rados_objects_list_close(h); + + printf("%s: saw %d objects\n", get_id_str(), saw); + + rados_ioctx_destroy(io_ctx); + rados_shutdown(cl); + + return 0; +} diff --git a/src/test/system/st_rados_list_objects.h b/src/test/system/st_rados_list_objects.h new file mode 100644 index 0000000000000..ded99a9b34c20 --- /dev/null +++ b/src/test/system/st_rados_list_objects.h @@ -0,0 +1,45 @@ +// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*- +// vim: ts=8 sw=2 smarttab +/* +* Ceph - scalable distributed file system +* +* Copyright (C) 2011 New Dream Network +* +* This is free software; you can redistribute it and/or +* modify it under the terms of the GNU Lesser General Public +* License version 2.1, as published by the Free Software +* Foundation. See file COPYING. +* +*/ + +#ifndef TEST_SYSTEM_ST_RADOS_LIST_OBJECTS_H +#define TEST_SYSTEM_ST_RADOS_LIST_OBJECTS_H + +#include "systest_runnable.h" + +class CrossProcessSem; + +/* + * st_rados_list_objects + * + * 1. calls pool_setup_sem->wait() + * 2. calls pool_setup_sem->post() + * 3. list some objects + * 4. modify_sem->wait() + * 5. list some objects + */ +class StRadosListObjects : public SysTestRunnable +{ +public: + static std::string get_random_buf(int sz); + StRadosListObjects(int argc, const char **argv, int midway_cnt, + CrossProcessSem *pool_setup_sem, CrossProcessSem *midway_sem); + ~StRadosListObjects(); + virtual int run(); +private: + int m_midway_cnt; + CrossProcessSem *m_pool_setup_sem; + CrossProcessSem *m_midway_sem; +}; + +#endif -- 2.39.5