diff options
author | Sage Weil <sage@inktank.com> | 2013-08-28 16:34:36 -0700 |
---|---|---|
committer | Sage Weil <sage@inktank.com> | 2013-08-28 17:05:10 -0700 |
commit | e20d1f8e9b6b839f0265b28bf8f0d24148a4ee11 (patch) | |
tree | 30083f0088ca991cf4d674d61dabadc25d35dac9 | |
parent | c8dcd2ea715c5f838b6460f6aae77393e9df2954 (diff) | |
download | ceph-e20d1f8e9b6b839f0265b28bf8f0d24148a4ee11.tar.gz |
ceph_test_rados: validate user_version
Signed-off-by: Sage Weil <sage@inktank.com>
-rw-r--r-- | src/test/osd/Object.h | 5 | ||||
-rw-r--r-- | src/test/osd/RadosModel.h | 27 |
2 files changed, 30 insertions, 2 deletions
diff --git a/src/test/osd/Object.h b/src/test/osd/Object.h index 39acf1e2175..09f0a5f2e4c 100644 --- a/src/test/osd/Object.h +++ b/src/test/osd/Object.h @@ -240,9 +240,9 @@ public: class ObjectDesc { public: ObjectDesc(ContentsGenerator *cont_gen) : - exists(false), tmap(false), layers(), cont_gen(cont_gen) {}; + exists(false), tmap(false), version(0), layers(), cont_gen(cont_gen) {}; ObjectDesc(const ContDesc &init, ContentsGenerator *cont_gen) : - exists(false), tmap(false), layers(), cont_gen(cont_gen) { + exists(false), tmap(false), version(0), layers(), cont_gen(cont_gen) { layers.push_front(init); }; @@ -314,6 +314,7 @@ public: bool exists; bool tmap; bufferlist tmap_contents; + uint64_t version; private: list<ContDesc> layers; ContentsGenerator *cont_gen; diff --git a/src/test/osd/RadosModel.h b/src/test/osd/RadosModel.h index b022d24dc91..b2325341ca0 100644 --- a/src/test/osd/RadosModel.h +++ b/src/test/osd/RadosModel.h @@ -396,6 +396,21 @@ public: pool_obj_cont[current_snap].insert(pair<string,ObjectDesc>(oid, new_obj)); } + void update_object_version(const string &oid, uint64_t version) + { + for (map<int, map<string,ObjectDesc> >::reverse_iterator i = + pool_obj_cont.rbegin(); + i != pool_obj_cont.rend(); + ++i) { + map<string,ObjectDesc>::iterator j = i->second.find(oid); + if (j != i->second.end()) { + j->second.version = version; + cout << __func__ << " oid " << oid << " is version " << version << std::endl; + break; + } + } + } + void remove_object(const string &oid) { assert(!get_watch_context(oid)); @@ -624,6 +639,7 @@ public: assert(0); } done = true; + context->update_object_version(oid, comp->get_version()); context->oid_in_use.erase(oid); context->oid_not_in_use.insert(oid); context->kick(); @@ -714,6 +730,7 @@ public: assert(0); } done = true; + context->update_object_version(oid, comp->get_version()); context->oid_in_use.erase(oid); context->oid_not_in_use.insert(oid); context->kick(); @@ -825,6 +842,7 @@ public: assert(!done); waiting_on--; if (waiting_on == 0) { + uint64_t version = 0; for (set<librados::AioCompletion *>::iterator i = waiting.begin(); i != waiting.end(); ) { @@ -833,10 +851,13 @@ public: cerr << "Error: oid " << oid << " write returned error code " << err << std::endl; } + if ((*i)->get_version64() > version) + version = (*i)->get_version64(); (*i)->release(); waiting.erase(i++); } + context->update_object_version(oid, version); context->oid_in_use.erase(oid); context->oid_not_in_use.insert(oid); context->kick(); @@ -1027,6 +1048,7 @@ public: context->oid_in_use.erase(oid); context->oid_not_in_use.insert(oid); assert(completion->is_complete()); + uint64_t version = completion->get_version64(); if (int err = completion->get_return_value()) { if (!(err == -ENOENT && old_value.deleted())) { cerr << "Error: oid " << oid << " read returned error code " @@ -1075,6 +1097,11 @@ public: << " and old is " << old_value.attrs.size() << std::endl; assert(xattrs.size() == old_value.attrs.size()); } + if (version != old_value.version) { + cerr << "oid: " << oid << " version is " << version + << " and expected " << old_value.version << std::endl; + assert(version == old_value.version); + } for (map<string, bufferlist>::iterator omap_iter = omap.begin(); omap_iter != omap.end(); ++omap_iter) { |