From 602365e86ce0ed1394c7f4fbbe8468ac162175d1 Mon Sep 17 00:00:00 2001 From: Josh Durgin Date: Tue, 2 Aug 2011 12:32:17 -0700 Subject: [PATCH] systest: st_rados_create_pool: optionally wait before creating the pool Signed-off-by: Josh Durgin --- src/test/system/rados_delete_pools_parallel.cc | 4 ++-- src/test/system/rados_list_parallel.cc | 10 +++++----- src/test/system/rados_open_pools_parallel.cc | 5 +++-- src/test/system/st_rados_create_pool.cc | 9 +++++++++ src/test/system/st_rados_create_pool.h | 3 +++ 5 files changed, 22 insertions(+), 9 deletions(-) diff --git a/src/test/system/rados_delete_pools_parallel.cc b/src/test/system/rados_delete_pools_parallel.cc index d303e6ba26b6d..4bcf21244189a 100644 --- a/src/test/system/rados_delete_pools_parallel.cc +++ b/src/test/system/rados_delete_pools_parallel.cc @@ -71,7 +71,7 @@ int main(int argc, const char **argv) // first test: create a pool, then delete that pool { - StRadosCreatePool r1(argc, argv, pool_setup_sem, NULL, + StRadosCreatePool r1(argc, argv, NULL, pool_setup_sem, NULL, pool, 50, ".obj"); StRadosDeletePool r2(argc, argv, pool_setup_sem, NULL, pool); vector < SysTestRunnable* > vec; @@ -89,7 +89,7 @@ int main(int argc, const char **argv) RETURN1_IF_NONZERO(pool_setup_sem->reinit(0)); RETURN1_IF_NONZERO(delete_pool_sem->reinit(0)); { - StRadosCreatePool r1(argc, argv, pool_setup_sem, NULL, + StRadosCreatePool r1(argc, argv, NULL, pool_setup_sem, NULL, pool, g_num_objects, ".obj"); StRadosDeletePool r2(argc, argv, pool_setup_sem, delete_pool_sem, pool); StRadosListObjects r3(argc, argv, pool, true, g_num_objects / 2, diff --git a/src/test/system/rados_list_parallel.cc b/src/test/system/rados_list_parallel.cc index 42b104494acfe..741144d97d8fa 100644 --- a/src/test/system/rados_list_parallel.cc +++ b/src/test/system/rados_list_parallel.cc @@ -224,7 +224,7 @@ int main(int argc, const char **argv) // Test 1... list objects { - StRadosCreatePool r1(argc, argv, pool_setup_sem, NULL, + StRadosCreatePool r1(argc, argv, NULL, pool_setup_sem, NULL, pool, g_num_objects, ".obj"); StRadosListObjects r2(argc, argv, pool, false, g_num_objects, pool_setup_sem, modify_sem); @@ -242,7 +242,7 @@ int main(int argc, const char **argv) RETURN1_IF_NONZERO(pool_setup_sem->reinit(0)); RETURN1_IF_NONZERO(modify_sem->reinit(0)); { - StRadosCreatePool r1(argc, argv, pool_setup_sem, NULL, + StRadosCreatePool r1(argc, argv, NULL, pool_setup_sem, NULL, pool, g_num_objects, ".obj"); StRadosListObjects r2(argc, argv, pool, false, g_num_objects / 2, pool_setup_sem, modify_sem); @@ -262,7 +262,7 @@ int main(int argc, const char **argv) RETURN1_IF_NONZERO(pool_setup_sem->reinit(0)); RETURN1_IF_NONZERO(modify_sem->reinit(0)); { - StRadosCreatePool r1(argc, argv, pool_setup_sem, NULL, + StRadosCreatePool r1(argc, argv, NULL, pool_setup_sem, NULL, pool, g_num_objects, ".obj"); StRadosListObjects r2(argc, argv, pool, false, g_num_objects / 2, pool_setup_sem, modify_sem); @@ -282,7 +282,7 @@ int main(int argc, const char **argv) RETURN1_IF_NONZERO(pool_setup_sem->reinit(0)); RETURN1_IF_NONZERO(modify_sem->reinit(0)); { - StRadosCreatePool r1(argc, argv, pool_setup_sem, NULL, + StRadosCreatePool r1(argc, argv, NULL, pool_setup_sem, NULL, pool, g_num_objects, ".obj"); StRadosListObjects r2(argc, argv, pool, false, g_num_objects / 2, pool_setup_sem, modify_sem); @@ -306,7 +306,7 @@ int main(int argc, const char **argv) RETURN1_IF_NONZERO(pool_setup_sem->reinit(0)); RETURN1_IF_NONZERO(modify_sem->reinit(0)); { - StRadosCreatePool r1(argc, argv, pool_setup_sem, NULL, + StRadosCreatePool r1(argc, argv, NULL, pool_setup_sem, NULL, pool, g_num_objects, ".obj"); StRadosListObjects r2(argc, argv, pool, false, g_num_objects / 2, pool_setup_sem, modify_sem); diff --git a/src/test/system/rados_open_pools_parallel.cc b/src/test/system/rados_open_pools_parallel.cc index 2221d3f0ade62..2780765a45fb8 100644 --- a/src/test/system/rados_open_pools_parallel.cc +++ b/src/test/system/rados_open_pools_parallel.cc @@ -100,7 +100,8 @@ int main(int argc, const char **argv) // pool in a different process. CrossProcessSem *pool_setup_sem = NULL; RETURN1_IF_NONZERO(CrossProcessSem::create(0, &pool_setup_sem)); - StRadosCreatePool r1(argc, argv, pool_setup_sem, NULL, "foo", 50, ".obj"); + StRadosCreatePool r1(argc, argv, NULL, pool_setup_sem, NULL, + "foo", 50, ".obj"); StRadosOpenPool r2(argc, argv, pool_setup_sem, NULL); vector < SysTestRunnable* > vec; vec.push_back(&r1); @@ -117,7 +118,7 @@ int main(int argc, const char **argv) RETURN1_IF_NONZERO(CrossProcessSem::create(0, &pool_setup_sem2)); CrossProcessSem *open_pool_sem2 = NULL; RETURN1_IF_NONZERO(CrossProcessSem::create(0, &open_pool_sem2)); - StRadosCreatePool r3(argc, argv, pool_setup_sem2, open_pool_sem2, + StRadosCreatePool r3(argc, argv, NULL, pool_setup_sem2, open_pool_sem2, "foo", 50, ".obj"); StRadosOpenPool r4(argc, argv, pool_setup_sem2, open_pool_sem2); vector < SysTestRunnable* > vec2; diff --git a/src/test/system/st_rados_create_pool.cc b/src/test/system/st_rados_create_pool.cc index 5cf45c105879a..17b8adbeff44e 100644 --- a/src/test/system/st_rados_create_pool.cc +++ b/src/test/system/st_rados_create_pool.cc @@ -40,12 +40,14 @@ get_random_buf(int sz) StRadosCreatePool:: StRadosCreatePool(int argc, const char **argv, + CrossProcessSem *setup_sem, CrossProcessSem *pool_setup_sem, CrossProcessSem *close_create_pool, const std::string &pool_name, int num_objects, const std::string &suffix) : SysTestRunnable(argc, argv), + m_setup_sem(setup_sem), m_pool_setup_sem(pool_setup_sem), m_close_create_pool(close_create_pool), m_pool_name(pool_name), @@ -70,12 +72,19 @@ run() std::string log_name = SysTestSettings::inst().get_log_name(get_id_str()); if (!log_name.empty()) rados_conf_set(cl, "log_file", log_name.c_str()); + + if (m_setup_sem) { + m_setup_sem->wait(); + m_setup_sem->post(); + } + RETURN1_IF_NONZERO(rados_connect(cl)); int ret = rados_pool_delete(cl, m_pool_name.c_str()); if (!((ret == 0) || (ret == -ENOENT))) { printf("%s: rados_pool_delete error %d\n", get_id_str(), ret); return ret; } + printf("%s: creating pool %s\n", get_id_str(), m_pool_name.c_str()); RETURN1_IF_NONZERO(rados_pool_create(cl, m_pool_name.c_str())); rados_ioctx_t io_ctx; RETURN1_IF_NONZERO(rados_ioctx_create(cl, m_pool_name.c_str(), &io_ctx)); diff --git a/src/test/system/st_rados_create_pool.h b/src/test/system/st_rados_create_pool.h index 382f73b9c26b8..f0f8a3bc0f877 100644 --- a/src/test/system/st_rados_create_pool.h +++ b/src/test/system/st_rados_create_pool.h @@ -22,6 +22,7 @@ class CrossProcessSem; /* * st_rados_create_pool * + * Waits, then posts to setup_sem. * Creates a pool and populates it with some objects. * Then, calls pool_setup_sem->post() */ @@ -30,6 +31,7 @@ class StRadosCreatePool : public SysTestRunnable public: static std::string get_random_buf(int sz); StRadosCreatePool(int argc, const char **argv, + CrossProcessSem *setup_sem, CrossProcessSem *pool_setup_sem, CrossProcessSem *close_create_pool_sem, const std::string &pool_name, @@ -38,6 +40,7 @@ public: ~StRadosCreatePool(); virtual int run(); private: + CrossProcessSem *m_setup_sem; CrossProcessSem *m_pool_setup_sem; CrossProcessSem *m_close_create_pool; std::string m_pool_name; -- 2.39.5