From cbbd5f97caf4484861f0e585aae1589df413f76c Mon Sep 17 00:00:00 2001 From: Josh Durgin Date: Wed, 14 Mar 2012 16:44:38 -0700 Subject: [PATCH] ObjectCacher: check for read/write errors The objecter doesn't fix every error for us. Signed-off-by: Josh Durgin --- src/osdc/ObjectCacher.cc | 31 +++++++++++++++++++++---------- src/osdc/ObjectCacher.h | 10 ++++++---- 2 files changed, 27 insertions(+), 14 deletions(-) diff --git a/src/osdc/ObjectCacher.cc b/src/osdc/ObjectCacher.cc index e4e6d3e858211..ffd24cae3c9a2 100644 --- a/src/osdc/ObjectCacher.cc +++ b/src/osdc/ObjectCacher.cc @@ -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& 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 { diff --git a/src/osdc/ObjectCacher.h b/src/osdc/ObjectCacher.h index f3564886db234..80496cfb9fdb2 100644 --- a/src/osdc/ObjectCacher.h +++ b/src/osdc/ObjectCacher.h @@ -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& 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); } }; -- 2.39.5