- send (+deliver!) unmount message
osdmon
-- allow fresh replacement osds. add osd_created in osdmap, probably
- actually, MasterOSDMap? and clean out OSDMap, parsing in kernel client, etc.
- monitor needs to monitor some osds...
- bootstrap crush map
crush
+- rule naming
+ - would about a tuple of (type, minsize, maxsize, pool) for each rule? then we'd do a
+ quick 'search' to find the best rule given (pg_type, pg_size, pg_pool)...
- xml import/export?
- named storage "pools"?
- generic rule definition
}
bool lazy = f->mode == FILE_MODE_LAZY;
-
+
+ // wait for RD cap before checking size
+ while (!lazy && (in->file_caps() & CEPH_CAP_RD) == 0) {
+ dout(7) << " don't have read cap, waiting" << dendl;
+ Cond cond;
+ in->waitfor_read.push_back(&cond);
+ cond.Wait(client_lock);
+ }
+
// determine whether read range overlaps with file
// ...ONLY if we're doing async io
if (!lazy && (in->file_caps() & (CEPH_CAP_WRBUFFER|CEPH_CAP_RDCACHE))) {
if (g_conf.client_oc) {
// object cache ON
rvalue = r = in->fc.read(offset, size, *bl, client_lock); // may block.
-
- /*
- if (in->inode.ino == 0x10000000075 && hackbuf) {
- int s = MIN(size, bl->length());
- char *v = bl->c_str();
- for (int a=0; a<s; a++)
- if (v[a] != hackbuf[offset+a])
- dout(1) << "** hackbuf differs from read value at offset " << a
- << " hackbuf[a] = " << (int)hackbuf[a] << ", read got " << (int)v[a]
- << dendl;
- }
- */
-
} else {
// object cache OFF -- legacy inconsistent way.
- // do we have read file cap?
- while (!lazy && (in->file_caps() & CEPH_CAP_RD) == 0) {
- dout(7) << " don't have read cap, waiting" << dendl;
- Cond cond;
- in->waitfor_read.push_back(&cond);
- cond.Wait(client_lock);
- }
// lazy cap?
while (lazy && (in->file_caps() & CEPH_CAP_LAZYIO) == 0) {
dout(7) << " don't have lazy cap, waiting" << dendl;