diff --git a/src/osdc/ObjectCacher.cc b/src/osdc/ObjectCacher.cc index 69facb0454f71..e18de8cb4b987 100644 --- a/src/osdc/ObjectCacher.cc +++ b/src/osdc/ObjectCacher.cc @@ -27,6 +27,60 @@ using std::chrono::seconds; +class ObjectCacher::C_ReadFinish : public Context { + ObjectCacher *oc; + int64_t poolid; + sobject_t oid; + loff_t start; + uint64_t length; + xlist::item set_item; + bool trust_enoent; + ceph_tid_t tid; + +public: + bufferlist bl; + C_ReadFinish(ObjectCacher *c, Object *ob, ceph_tid_t t, loff_t s, + uint64_t l) : + oc(c), poolid(ob->oloc.pool), oid(ob->get_soid()), start(s), length(l), + set_item(this), trust_enoent(true), + tid(t) { + ob->reads.push_back(&set_item); + } + + void finish(int r) { + oc->bh_read_finish(poolid, oid, tid, start, length, bl, r, trust_enoent); + + // object destructor clears the list + if (set_item.is_on_list()) + set_item.remove_myself(); + } + + void distrust_enoent() { + trust_enoent = false; + } +}; + +class ObjectCacher::C_RetryRead : public Context { + ObjectCacher *oc; + OSDRead *rd; + ObjectSet *oset; + Context *onfinish; +public: + C_RetryRead(ObjectCacher *_oc, OSDRead *r, ObjectSet *os, Context *c) + : oc(_oc), rd(r), oset(os), onfinish(c) {} + void finish(int r) { + if (r < 0) { + if (onfinish) + onfinish->complete(r); + return; + } + int ret = oc->_readx(rd, oset, onfinish, false); + if (ret != 0 && onfinish) { + onfinish->complete(ret); + } + } +}; + ObjectCacher::BufferHead *ObjectCacher::Object::split(BufferHead *left, loff_t off) { diff --git a/src/osdc/ObjectCacher.h b/src/osdc/ObjectCacher.h index d098a31c651b4..2d33bccf3f929 100644 --- a/src/osdc/ObjectCacher.h +++ b/src/osdc/ObjectCacher.h @@ -556,40 +556,6 @@ class ObjectCacher { vector >& ranges, ceph_tid_t t, int r); - - class C_ReadFinish : public Context { - ObjectCacher *oc; - int64_t poolid; - sobject_t oid; - loff_t start; - uint64_t length; - xlist::item set_item; - bool trust_enoent; - ceph_tid_t tid; - - public: - bufferlist bl; - C_ReadFinish(ObjectCacher *c, Object *ob, ceph_tid_t t, loff_t s, - uint64_t l) : - oc(c), poolid(ob->oloc.pool), oid(ob->get_soid()), start(s), length(l), - set_item(this), trust_enoent(true), - tid(t) { - ob->reads.push_back(&set_item); - } - - void finish(int r) { - oc->bh_read_finish(poolid, oid, tid, start, length, bl, r, trust_enoent); - - // object destructor clears the list - if (set_item.is_on_list()) - set_item.remove_myself(); - } - - void distrust_enoent() { - trust_enoent = false; - } - }; - class C_WriteCommit; class C_WaitForWrite; @@ -619,27 +585,7 @@ class ObjectCacher { } - class C_RetryRead : public Context { - ObjectCacher *oc; - OSDRead *rd; - ObjectSet *oset; - Context *onfinish; - public: - C_RetryRead(ObjectCacher *_oc, OSDRead *r, ObjectSet *os, Context *c) - : oc(_oc), rd(r), oset(os), onfinish(c) {} - void finish(int r) { - if (r < 0) { - if (onfinish) - onfinish->complete(r); - return; - } - int ret = oc->_readx(rd, oset, onfinish, false); - if (ret != 0 && onfinish) { - onfinish->complete(ret); - } - } - }; - + class C_RetryRead; // non-blocking. async.