]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
Move list objects logic to st_rados_list_objects
authorColin Patrick McCabe <cmccabe@alumni.cmu.edu>
Wed, 13 Jul 2011 21:37:48 +0000 (14:37 -0700)
committerColin Patrick McCabe <cmccabe@alumni.cmu.edu>
Wed, 13 Jul 2011 21:40:50 +0000 (14:40 -0700)
Signed-off-by: Colin McCabe <colin.mccabe@dreamhost.com>
src/Makefile.am
src/test/system/rados_list_parallel.cc
src/test/system/st_rados_list_objects.cc [new file with mode: 0644]
src/test/system/st_rados_list_objects.h [new file with mode: 0644]

index 9c61de6a25008e27d81e971dc6d00919c21e31d1..cb9f631aa2c5b64fc78f5a9163455f36a729a737 100644 (file)
@@ -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
 
index 54c8fbc224bb661c5787b95ea558f610d3862473..369939ef4126697234bb9980d3e36a74fabc52c6 100644 (file)
@@ -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 (file)
index 0000000..41ba15d
--- /dev/null
@@ -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 <errno.h>
+#include <stdarg.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <sstream>
+#include <string>
+
+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 (file)
index 0000000..ded99a9
--- /dev/null
@@ -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