From b1ea723715162de2267a7f1de82b34a092dbbdaf Mon Sep 17 00:00:00 2001 From: Matt Benjamin Date: Mon, 16 Nov 2020 11:24:43 -0500 Subject: [PATCH] rgw_file: correct initialization of RGWWriteRequest The legacy call to init_from_header() in RGWWriteRequest() conflicted with initialization via ::init() Signed-off-by: Matt Benjamin --- src/rgw/rgw_file.h | 5 +--- src/test/librgw_file_marker.cc | 42 +++++++++++++++++++--------------- 2 files changed, 24 insertions(+), 23 deletions(-) diff --git a/src/rgw/rgw_file.h b/src/rgw/rgw_file.h index 1bf87efe111a..235325d4248b 100644 --- a/src/rgw/rgw_file.h +++ b/src/rgw/rgw_file.h @@ -2499,10 +2499,7 @@ public: // in ctr this is not a virtual call // invoking this classes's header_init() - int ret = RGWWriteRequest::header_init(); - if (ret == 0) { - ret = init_from_header(store, get_state()); - } + (void) RGWWriteRequest::header_init(); op = this; } diff --git a/src/test/librgw_file_marker.cc b/src/test/librgw_file_marker.cc index 9aaa6b3256b5..2475423fd468 100644 --- a/src/test/librgw_file_marker.cc +++ b/src/test/librgw_file_marker.cc @@ -49,7 +49,7 @@ namespace { uint32_t create_mask = RGW_SETATTR_UID | RGW_SETATTR_GID | RGW_SETATTR_MODE; - string bucket_name("nfsroot"); + string bucket_name("dmarker"); class obj_rec { @@ -150,7 +150,7 @@ namespace { string marker_dir("nfs_marker"); struct rgw_file_handle *bucket_fh = nullptr; struct rgw_file_handle *marker_fh; - static constexpr int marker_nobjs = 2*1024; + uint32_t marker_nobjs = 2*1024; std::deque marker_objs; using dirent_t = std::tuple; @@ -250,10 +250,11 @@ TEST(LibRGW, MARKER1_SETUP_OBJECTS) { /* "large" directory enumeration test. this one deals only with * file objects */ + if (do_create) { int ret; - for (int ix = 0; ix < marker_nobjs; ++ix) { + for (uint32_t ix = 0; ix < marker_nobjs; ++ix) { std::string object_name("f_"); object_name += to_string(ix); obj_rec obj{object_name, nullptr, marker_fh, nullptr}; @@ -277,6 +278,11 @@ TEST(LibRGW, MARKER1_SETUP_OBJECTS) // commit transaction (write on close) ret = rgw_close(fs, obj.fh, 0 /* flags */); ASSERT_EQ(ret, 0); + if (verbose) { + /* XXX std:cout fragged...did it get /0 in the stream + * somewhere? */ + printf("created: %s:%s\n", bucket_name.c_str(), obj.name.c_str()); + } // save for cleanup marker_objs.push_back(obj); } @@ -289,21 +295,14 @@ extern "C" { uint32_t flags) { dirent_vec& dvec = *(static_cast(arg)); - lsubdout(cct, rgw, 10) << __func__ - << " bucket=" << bucket_name - << " dir=" << marker_dir - << " iv count=" << dvec.count - << " called back name=" << name - << " flags=" << flags - << dendl; - - std::cout << __func__ - << " bucket=" << bucket_name - << " dir=" << marker_dir - << " iv count=" << dvec.count - << " called back name=" << name - << " flags=" << flags - << std::endl; + + printf("%s bucket=%s dir=%s iv count=%d called back name=%s flags=%d\n", + __func__, + bucket_name.c_str(), + marker_dir.c_str(), + dvec.count, + name, + flags); string name_str{name}; if (! ((name_str == ".") || @@ -335,6 +334,7 @@ TEST(LibRGW, MARKER1_READDIR) int ret = rgw_readdir(fs, marker_fh, &offset, r2_cb, &dvec, &eof, RGW_READDIR_FLAG_DOTDOT); ASSERT_EQ(ret, 0); + ASSERT_GE(dvec.obj_names.size(), 0); ASSERT_EQ(offset, get<1>(dvec.obj_names.back())); // cookie check ++dvec.count; } while(!eof); @@ -364,8 +364,9 @@ TEST(LibRGW, MARKER2_READDIR) int ret = rgw_readdir2(fs, marker_fh, (marker.length() > 0) ? marker.c_str() : nullptr, r2_cb, &dvec, &eof, - RGW_READDIR_FLAG_DOTDOT); + RGW_READDIR_FLAG_NONE); ASSERT_EQ(ret, 0); + ASSERT_GE(dvec.obj_names.size(), 0); marker = get<0>(dvec.obj_names.back()); ++dvec.count; } while((!eof) && dvec.count < 4); @@ -460,6 +461,9 @@ int main(int argc, char *argv[]) } else if (ceph_argparse_witharg(args, arg_iter, &val, "--gid", (char*) nullptr)) { owner_gid = std::stoi(val); + } else if (ceph_argparse_witharg(args, arg_iter, &val, "--nobjs", + (char*) nullptr)) { + marker_nobjs = std::stoi(val); } else if (ceph_argparse_flag(args, arg_iter, "--marker1", (char*) nullptr)) { do_marker1 = true; -- 2.47.3