bool PG::check_in_progress_op(
const osd_reqid_t &r,
- eversion_t *replay_version,
+ eversion_t *version,
version_t *user_version,
int *return_code) const
{
return (
- projected_log.get_request(r, replay_version, user_version, return_code) ||
- pg_log.get_log().get_request(r, replay_version, user_version, return_code));
+ projected_log.get_request(r, version, user_version, return_code) ||
+ pg_log.get_log().get_request(r, version, user_version, return_code));
}
void PG::_update_calc_stats()
bool get_request(
const osd_reqid_t &r,
- eversion_t *replay_version,
+ eversion_t *version,
version_t *user_version,
int *return_code) const {
- assert(replay_version);
+ assert(version);
assert(user_version);
assert(return_code);
ceph::unordered_map<osd_reqid_t,pg_log_entry_t*>::const_iterator p;
}
p = caller_ops.find(r);
if (p != caller_ops.end()) {
- *replay_version = p->second->version;
+ *version = p->second->version;
*user_version = p->second->user_version;
*return_code = p->second->return_code;
return true;
i != p->second->extra_reqids.end();
++i) {
if (i->first == r) {
- *replay_version = p->second->version;
+ *version = p->second->version;
*user_version = i->second;
*return_code = p->second->return_code;
return true;
return;
}
- // dup/replay?
+ // dup/resent?
if (op->may_write() || op->may_cache()) {
// warning: we will get back *a* request for this reqid, but not
// necessarily the most recent. this happens with flush and
// promote ops, but we can't possible have both in our log where
// the original request is still not stable on disk, so for our
// purposes here it doesn't matter which one we get.
- eversion_t replay_version;
+ eversion_t version;
version_t user_version;
int return_code = 0;
bool got = check_in_progress_op(
- m->get_reqid(), &replay_version, &user_version, &return_code);
+ m->get_reqid(), &version, &user_version, &return_code);
if (got) {
dout(3) << __func__ << " dup " << m->get_reqid()
- << " was " << replay_version << dendl;
- if (already_complete(replay_version)) {
- osd->reply_op_error(op, return_code, replay_version, user_version);
+ << " version " << version << dendl;
+ if (already_complete(version)) {
+ osd->reply_op_error(op, return_code, version, user_version);
} else {
- if (m->wants_ack()) {
- if (already_ack(replay_version)) {
- MOSDOpReply *reply = new MOSDOpReply(m, 0, get_osdmap()->get_epoch(), 0, false);
- reply->add_flags(CEPH_OSD_FLAG_ACK);
- reply->set_reply_versions(replay_version, user_version);
- osd->send_message_osd_client(reply, m->get_connection());
- } else {
- dout(10) << " waiting for " << replay_version << " to ack" << dendl;
- waiting_for_ack[replay_version].push_back(make_pair(op, user_version));
- }
- }
- dout(10) << " waiting for " << replay_version << " to commit" << dendl;
+ dout(10) << " waiting for " << version << " to commit" << dendl;
// always queue ondisk waiters, so that we can requeue if needed
- waiting_for_ondisk[replay_version].push_back(make_pair(op, user_version));
+ waiting_for_ondisk[version].push_back(make_pair(op, user_version));
op->mark_delayed("waiting for ondisk");
}
return;