st.total_free = get_free_blocks() + get_limbo_blocks();
st.free_extent_dist.clear();
st.num_free_extent = 0;
-
+ st.avg_free_extent = 0;
+/*
__uint64_t tfree = 0;
for (int b=0; b<=EBOFS_NUM_FREE_BUCKETS; b++) {
Table<block_t,block_t> *tab;
}
}
st.avg_free_extent = tfree / st.num_free_extent;
-
+*/
// used extents is harder. :(
st.num_extent = 0;
object_tab->find(0, cursor);
int nobj = 0;
int njump = 0;
- while (1) {
+ while (object_tab->get_num_keys() > 0) {
Onode *on = get_onode(cursor.current().key);
assert(on);
struct statfs st;
store->statfs(&st);
- float a = 1.0 - ((float)(st.f_bavail) / (float)st.f_blocks);
+ float free = 1.0 - ((float)(st.f_bfree) / (float)st.f_blocks);
+ float avail = 1.0 - ((float)(st.f_bavail) / (float)st.f_blocks); // to write to
//float a = (float)(st.f_bfree) / (float)st.f_blocks;
//dout(10) << "age_fill at " << a << " / " << pc << " .. " << st.f_blocks << " " << st.f_bavail << endl;
- if (a >= pc) {
- dout(2) << "age_fill at " << a << " / " << pc << " stopping" << endl;
+ if (free >= pc) {
+ dout(2) << "age_fill at " << free << " / " << avail << " / " << " / " << pc << " stopping" << endl;
break;
}
-
+
+ // make sure we can write to it..
+ if (avail > .98 ||
+ avail - free > .02)
+ store->sync();
+
object_t oid = age_get_oid();
int b = myrand() % 10;
ssize_t s = age_pick_size();
wrote += (s + 4095) / 4096;
-
- dout(2) << "age_fill at " << a << " / " << pc << " creating " << hex << oid << dec << " sz " << s << endl;
+
+
+
+
+ dout(2) << "age_fill at " << free << " / " << avail << " / " << pc << " creating " << hex << oid << dec << " sz " << s << endl;
if (false && !g_conf.ebofs_verify && start_debug && wrote > 1000000ULL) {
while (1) {
struct statfs st;
store->statfs(&st);
- float a = 1.0 - ((float)(st.f_bavail) / (float)st.f_blocks);
- dout(2) << "age_empty at " << a << " / " << pc << endl;//" stopping" << endl;
- if (a <= pc) {
- dout(2) << "age_empty at " << a << " / " << pc << " stopping" << endl;
+ float free = 1.0 - ((float)(st.f_bfree) / (float)st.f_blocks);
+ float avail = 1.0 - ((float)(st.f_bavail) / (float)st.f_blocks); // to write to
+ dout(2) << "age_empty at " << free << " / " << avail << " / " << pc << endl;//" stopping" << endl;
+ if (free <= pc) {
+ dout(2) << "age_empty at " << free << " / " << avail << " / " << pc << " stopping" << endl;
break;
}
if (n == 0 || age_objects[b].empty()) {
dout(2) << "age_empty sync" << endl;
//sync();
- sync();
+ //sync();
n = nper;
continue;
}
object_t oid = age_objects[b].front();
age_objects[b].pop_front();
- dout(2) << "age_empty at " << a << " / " << pc << " removing " << hex << oid << dec << endl;
+ dout(2) << "age_empty at " << free << " / " << avail << " / " << pc << " removing " << hex << oid << dec << endl;
store->remove(oid);
age_free_oids.push_back(oid);