]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: warn when obc locator doesn't match ops
authorSage Weil <sage@newdream.net>
Fri, 6 May 2011 23:50:36 +0000 (16:50 -0700)
committerSage Weil <sage@newdream.net>
Fri, 6 May 2011 23:50:36 +0000 (16:50 -0700)
This will hopefully help us track down #1028.

Signed-off-by: Sage Weil <sage@newdream.net>
src/include/object.h
src/osd/ReplicatedPG.cc

index 4582d18c01eebcb41a5acc7798c0716772a37925..dfa607075fb63381084c52349cb7ddf9e6089e98 100644 (file)
@@ -152,6 +152,13 @@ struct object_locator_t {
 };
 WRITE_CLASS_ENCODER(object_locator_t)
 
+inline bool operator==(const object_locator_t& l, const object_locator_t& r) {
+  return l.pool == r.pool && l.preferred == r.preferred && l.key == r.key;
+}
+inline bool operator!=(const object_locator_t& l, const object_locator_t& r) {
+  return !(l == r);
+}
+
 inline ostream& operator<<(ostream& out, const object_locator_t& loc)
 {
   out << "@" << loc.pool;
index 6ce36d0489e73b9deb3e95da99bacc7dec52684e..36f2ee4b22073990167c0650df3dd19dce5f53d5 100644 (file)
@@ -383,6 +383,17 @@ void ReplicatedPG::do_op(MOSDOp *op)
     osd->reply_op_error(op, r);
     return;
   }
+  
+  // make sure locator is consistent
+  if (op->get_object_locator() != obc->obs.oi.oloc) {
+    dout(10) << " provided locator " << op->get_object_locator() 
+            << " != object's " << obc->obs.oi.oloc
+            << " on " << obc->obs.oi.soid << dendl;
+    osd->clog.warn() << "bad locator " << op->get_object_locator() 
+                    << " on object " << obc->obs.oi.oloc
+                    << " loc " << op->get_object_locator() 
+                    << " op " << *op << "\n";
+  }
 
   if ((op->may_read()) && (obc->obs.oi.lost)) {
     // This object is lost. Reading from it returns an error.