From 96f2ab1a2f789e7d93254225ab50d727cd2e3592 Mon Sep 17 00:00:00 2001 From: myoungwon oh Date: Sat, 6 Mar 2021 22:35:54 +0900 Subject: [PATCH] src/test: check flush hasn't been called regarding EBUSY Signed-off-by: Myoungwon Oh --- src/test/osd/Object.h | 5 +++-- src/test/osd/RadosModel.h | 40 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+), 2 deletions(-) diff --git a/src/test/osd/Object.h b/src/test/osd/Object.h index a78a598236d02..76ce2d2a2fc8c 100644 --- a/src/test/osd/Object.h +++ b/src/test/osd/Object.h @@ -316,10 +316,10 @@ class ObjectDesc { public: ObjectDesc() : exists(false), dirty(false), - version(0) {} + version(0), flushed(false) {} ObjectDesc(const ContDesc &init, ContentsGenerator *cont_gen) : exists(false), dirty(false), - version(0) { + version(0), flushed(false) { layers.push_front(std::pair, ContDesc>(std::shared_ptr(cont_gen), init)); } @@ -532,6 +532,7 @@ public: uint64_t version; std::string redirect_target; std::map chunk_info; + bool flushed; private: std::list, ContDesc> > layers; }; diff --git a/src/test/osd/RadosModel.h b/src/test/osd/RadosModel.h index 64e8d82b54a17..e0510e8a2c969 100644 --- a/src/test/osd/RadosModel.h +++ b/src/test/osd/RadosModel.h @@ -589,6 +589,42 @@ public: pool_obj_cont.rbegin()->second.insert_or_assign(oid, contents); } + void update_object_tier_flushed(const string &oid, int snap) + { + for (map >::reverse_iterator i = + pool_obj_cont.rbegin(); + i != pool_obj_cont.rend(); + ++i) { + if (snap != -1 && snap < i->first) + continue; + map::iterator j = i->second.find(oid); + if (j != i->second.end()) { + j->second.flushed = true; + break; + } + } + } + + bool check_oldest_snap_flushed(const string &oid, int snap) + { + for (map >::reverse_iterator i = + pool_obj_cont.rbegin(); + i != pool_obj_cont.rend(); + ++i) { + if (snap != -1 && snap < i->first) + continue; + map::iterator j = i->second.find(oid); + if (j != i->second.end() && !j->second.flushed) { + cout << __func__ << " oid " << oid + << " v " << j->second.version << " " << j->second.most_recent() + << " " << (j->second.flushed ? "flushed" : "unflushed") + << " " << i->first << std::endl; + return false; + } + } + return true; + } + bool check_chunks_refcount(librados::IoCtx &chunk_pool_ctx, librados::IoCtx &manifest_pool_ctx) { librados::ObjectCursor shard_start; @@ -2882,6 +2918,8 @@ public: snap = -1; } + cout << num << ": tier_flush oid " << oid << " snap " << snap << std::endl; + if (snap >= 0) { context->io_ctx.snap_set_read(context->snaps[snap]); } @@ -2918,11 +2956,13 @@ public: // sucess } else if (r == -EBUSY) { // could fail if snap is not oldest + ceph_assert(!context->check_oldest_snap_flushed(oid, snap)); } else if (r == -ENOENT && src_value.deleted()) { // could fail if object is removed } else { ceph_abort_msg("shouldn't happen"); } + context->update_object_tier_flushed(oid, snap); context->update_object_version(oid, completion->get_version64(), snap); context->oid_in_use.erase(oid); context->oid_not_in_use.insert(oid); -- 2.39.5