logger->set(l_osdc_map_epoch, osdmap->get_epoch());
was_full = was_full || osdmap_full_flag();
- _scan_requests(&homeless_session, skipped_map, was_full,
+ _scan_requests(homeless_session, skipped_map, was_full,
need_resend, need_resend_linger,
need_resend_command);
<< m->get_last() << dendl;
osdmap->decode(m->maps[m->get_last()]);
- _scan_requests(&homeless_session, false, false,
+ _scan_requests(homeless_session, false, false,
need_resend, need_resend_linger,
need_resend_command);
} else {
assert(rwlock.is_locked());
if (osd < 0) {
- *session = &homeless_session;
+ *session = homeless_session;
return 0;
}
s->lock.unlock();
}
- if (homeless_session.ops.find(tid) != homeless_session.ops.end()) {
- ret = op_cancel(&homeless_session, tid, r);
+ if (homeless_session->ops.find(tid) != homeless_session->ops.end()) {
+ ret = op_cancel(homeless_session, tid, r);
}
rwlock.unlock();
_dump_active(s);
s->lock.unlock();
}
- _dump_active(&homeless_session);
+ _dump_active(homeless_session);
}
void Objecter::dump_active()
s->lock.unlock();
}
rwlock.unlock();
- _dump_ops(&homeless_session, fmt);
+ _dump_ops(homeless_session, fmt);
fmt->close_section(); // ops array
}
s->lock.unlock();
}
rwlock.unlock();
- _dump_linger_ops(&homeless_session, fmt);
+ _dump_linger_ops(homeless_session, fmt);
fmt->close_section(); // linger_ops array
}
s->lock.unlock();
}
rwlock.unlock();
- _dump_command_ops(&homeless_session, fmt);
+ _dump_command_ops(homeless_session, fmt);
fmt->close_section(); // command_ops array
}
ceph_tid_t tid = last_tid.inc();
ldout(cct, 10) << "_submit_command " << tid << " " << c->cmd << dendl;
c->tid = tid;
- homeless_session.command_ops[tid] = c;
+ homeless_session->command_ops[tid] = c;
num_homeless_ops.inc();
- c->session = &homeless_session;
+ c->session = homeless_session;
(void)_calc_command_target(c);
_assign_command_session(c);
if (osd_timeout > 0) {
map<ceph_tid_t,PoolOp*> pool_ops;
atomic_t num_homeless_ops;
- OSDSession homeless_session;
+ OSDSession *homeless_session;
// ops waiting for an osdmap with a new pool or confirmation that
// the pool does not exist (may be expanded to other uses later)
logger(NULL), tick_event(NULL),
m_request_state_hook(NULL),
num_homeless_ops(0),
- homeless_session(cct, -1),
+ homeless_session(new OSDSession(cct, -1)),
mon_timeout(mon_timeout),
osd_timeout(osd_timeout),
op_throttle_bytes(cct, "objecter_bytes", cct->_conf->objecter_inflight_op_bytes),
assert(!tick_event);
assert(!m_request_state_hook);
assert(!logger);
+ homeless_session->put();
}
void init();