]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
ObjectCacher: check for read/write errors
authorJosh Durgin <josh.durgin@dreamhost.com>
Wed, 14 Mar 2012 23:44:38 +0000 (16:44 -0700)
committerSage Weil <sage.weil@dreamhost.com>
Sat, 14 Apr 2012 03:46:34 +0000 (20:46 -0700)
The objecter doesn't fix every error for us.

Signed-off-by: Josh Durgin <josh.durgin@dreamhost.com>
src/osdc/ObjectCacher.cc
src/osdc/ObjectCacher.h

index e4e6d3e8582115d042f9760d682e615c1dc0ace5..ffd24cae3c9a2f47be800f7e03181a720d444eed 100644 (file)
@@ -458,14 +458,20 @@ void ObjectCacher::bh_read(BufferHead *bh)
                 onfinish);
 }
 
-void ObjectCacher::bh_read_finish(int64_t poolid, sobject_t oid, loff_t start, uint64_t length, bufferlist &bl)
+void ObjectCacher::bh_read_finish(int64_t poolid, sobject_t oid, loff_t start,
+                                 uint64_t length, bufferlist &bl, int r)
 {
   //lock.Lock();
   ldout(cct, 7) << "bh_read_finish " 
-          << oid
-          << " " << start << "~" << length
-         << " (bl is " << bl.length() << ")"
-          << dendl;
+               << oid
+               << " " << start << "~" << length
+               << " (bl is " << bl.length() << ")"
+               << " returned " << r
+               << dendl;
+
+  if (r < 0) {
+    // TODO: fix bad read case
+  }
 
   if (bl.length() < length) {
     bufferptr bp(length - bl.length());
@@ -621,15 +627,20 @@ void ObjectCacher::lock_ack(int64_t poolid, list<sobject_t>& oids, tid_t tid)
   }
 }
 
-void ObjectCacher::bh_write_commit(int64_t poolid, sobject_t oid, loff_t start, uint64_t length, tid_t tid)
+void ObjectCacher::bh_write_commit(int64_t poolid, sobject_t oid, loff_t start,
+                                  uint64_t length, tid_t tid, int r)
 {
   //lock.Lock();
   
   ldout(cct, 7) << "bh_write_commit " 
-          << oid 
-          << " tid " << tid
-          << " " << start << "~" << length
-          << dendl;
+               << oid 
+               << " tid " << tid
+               << " " << start << "~" << length
+               << dendl;
+  if (r < 0) {
+    // TODO: handle write error
+  }
+
   if (objects[poolid].count(oid) == 0) {
     ldout(cct, 7) << "bh_write_commit no object cache" << dendl;
   } else {
index f3564886db2343c6916e389618e6a3524b7beee5..80496cfb9fdb2de561155704c1e5a6b842b96140 100644 (file)
@@ -464,8 +464,10 @@ class ObjectCacher {
   void wrunlock(Object *o);
 
  public:
-  void bh_read_finish(int64_t poolid, sobject_t oid, loff_t offset, uint64_t length, bufferlist &bl);
-  void bh_write_commit(int64_t poolid, sobject_t oid, loff_t offset, uint64_t length, tid_t t);
+  void bh_read_finish(int64_t poolid, sobject_t oid, loff_t offset,
+                     uint64_t length, bufferlist &bl, int r);
+  void bh_write_commit(int64_t poolid, sobject_t oid, loff_t offset,
+                      uint64_t length, tid_t t, int r);
   void lock_ack(int64_t poolid, list<sobject_t>& oids, tid_t tid);
 
   class C_ReadFinish : public Context {
@@ -479,7 +481,7 @@ class ObjectCacher {
     C_ReadFinish(ObjectCacher *c, int _poolid, sobject_t o, loff_t s, uint64_t l) :
       oc(c), poolid(_poolid), oid(o), start(s), length(l) {}
     void finish(int r) {
-      oc->bh_read_finish(poolid, oid, start, length, bl);
+      oc->bh_read_finish(poolid, oid, start, length, bl, r);
     }
   };
 
@@ -494,7 +496,7 @@ class ObjectCacher {
     C_WriteCommit(ObjectCacher *c, int64_t _poolid, sobject_t o, loff_t s, uint64_t l) :
       oc(c), poolid(_poolid), oid(o), start(s), length(l) {}
     void finish(int r) {
-      oc->bh_write_commit(poolid, oid, start, length, tid);
+      oc->bh_write_commit(poolid, oid, start, length, tid, r);
     }
   };