summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSage Weil <sage@inktank.com>2013-08-28 16:34:36 -0700
committerSage Weil <sage@inktank.com>2013-08-28 17:05:10 -0700
commite20d1f8e9b6b839f0265b28bf8f0d24148a4ee11 (patch)
tree30083f0088ca991cf4d674d61dabadc25d35dac9
parentc8dcd2ea715c5f838b6460f6aae77393e9df2954 (diff)
downloadceph-e20d1f8e9b6b839f0265b28bf8f0d24148a4ee11.tar.gz
ceph_test_rados: validate user_version
Signed-off-by: Sage Weil <sage@inktank.com>
-rw-r--r--src/test/osd/Object.h5
-rw-r--r--src/test/osd/RadosModel.h27
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) {