From e6918187568dbd01842d8d1d2c808ce16a894239 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 21 Apr 2024 13:54:28 +0200 Subject: Adding upstream version 18.2.2. Signed-off-by: Daniel Baumann --- src/test/system/st_rados_list_objects.cc | 107 +++++++++++++++++++++++++++++++ 1 file changed, 107 insertions(+) create mode 100644 src/test/system/st_rados_list_objects.cc (limited to 'src/test/system/st_rados_list_objects.cc') 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 000000000..514dafe65 --- /dev/null +++ b/src/test/system/st_rados_list_objects.cc @@ -0,0 +1,107 @@ +// -*- 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, + const std::string &pool_name, + bool accept_list_errors, + int midway_cnt, + CrossProcessSem *pool_setup_sem, + CrossProcessSem *midway_sem_wait, + CrossProcessSem *midway_sem_post) + : SysTestRunnable(argc, argv), + m_pool_name(pool_name), + m_accept_list_errors(accept_list_errors), + m_midway_cnt(midway_cnt), + m_pool_setup_sem(pool_setup_sem), + m_midway_sem_wait(midway_sem_wait), + m_midway_sem_post(midway_sem_post) +{ +} + +StRadosListObjects:: +~StRadosListObjects() +{ +} + +int StRadosListObjects:: +run() +{ + int retval = 0; + rados_t cl; + RETURN1_IF_NONZERO(rados_create(&cl, NULL)); + rados_conf_parse_argv(cl, m_argc, m_argv); + RETURN1_IF_NONZERO(rados_conf_read_file(cl, NULL)); + rados_conf_parse_env(cl, NULL); + RETURN1_IF_NONZERO(rados_connect(cl)); + m_pool_setup_sem->wait(); + m_pool_setup_sem->post(); + + rados_ioctx_t io_ctx; + rados_pool_create(cl, m_pool_name.c_str()); + RETURN1_IF_NONZERO(rados_ioctx_create(cl, m_pool_name.c_str(), &io_ctx)); + + int saw = 0; + const char *obj_name; + rados_list_ctx_t h; + printf("%s: listing objects.\n", get_id_str()); + RETURN1_IF_NONZERO(rados_nobjects_list_open(io_ctx, &h)); + while (true) { + int ret = rados_nobjects_list_next(h, &obj_name, NULL, NULL); + if (ret == -ENOENT) { + break; + } + else if (ret != 0) { + if (m_accept_list_errors && (!m_midway_sem_post || saw > m_midway_cnt)) + break; + printf("%s: rados_objects_list_next error: %d\n", get_id_str(), ret); + retval = ret; + goto out; + } + if ((saw % 25) == 0) { + printf("%s: listed object %d...\n", get_id_str(), saw); + } + ++saw; + if (saw == m_midway_cnt) { + if (m_midway_sem_wait) + m_midway_sem_wait->wait(); + if (m_midway_sem_post) + m_midway_sem_post->post(); + } + } + + printf("%s: saw %d objects\n", get_id_str(), saw); + +out: + rados_nobjects_list_close(h); + rados_ioctx_destroy(io_ctx); + rados_shutdown(cl); + + return retval; +} -- cgit v1.2.3