]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
ceph_test_rados: validate user_version 556/head
authorSage Weil <sage@inktank.com>
Wed, 28 Aug 2013 23:34:36 +0000 (16:34 -0700)
committerSage Weil <sage@inktank.com>
Thu, 29 Aug 2013 00:05:10 +0000 (17:05 -0700)
Signed-off-by: Sage Weil <sage@inktank.com>
src/test/osd/Object.h
src/test/osd/RadosModel.h

index 39acf1e2175aab96230e6bd355e57a73f30613f0..09f0a5f2e4cb057c6c10224541949bcd389ef1e2 100644 (file)
@@ -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;
index b022d24dc9101b3d81da89ab42e3bed4f494497c..b2325341ca0cf74d17c269c96baf7206124745c8 100644 (file)
@@ -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) {