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());
}
}
-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 {
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 {
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);
}
};
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);
}
};