From 800da082ad8aad032ff5299b5ad0c05bc378a1e3 Mon Sep 17 00:00:00 2001 From: Greg Farnum Date: Fri, 4 Jun 2010 16:19:00 -0700 Subject: [PATCH] msgr: Fix uses of get_[data, payload, middle] to use throttling-aware functions. --- src/ceph.cc | 2 +- src/msg/Message.h | 16 ++++++++++++++++ src/osd/ReplicatedPG.cc | 6 +++--- src/osdc/Objecter.cc | 2 +- 4 files changed, 21 insertions(+), 5 deletions(-) diff --git a/src/ceph.cc b/src/ceph.cc index 468c32ae60aca..71769487e4a6a 100644 --- a/src/ceph.cc +++ b/src/ceph.cc @@ -293,7 +293,7 @@ void send_command() { MMonCommand *m = new MMonCommand(mc.monmap.fsid, last_seen_version); m->cmd = pending_cmd; - m->get_data() = pending_bl; + m->set_data(pending_bl); cout << g_clock.now() << " mon" << " <- " << pending_cmd << std::endl; mc.send_mon_message(m); diff --git a/src/msg/Message.h b/src/msg/Message.h index cbc99c7a2b8a9..44732aad2d024 100644 --- a/src/msg/Message.h +++ b/src/msg/Message.h @@ -291,11 +291,23 @@ public: void set_footer(const ceph_msg_footer &e) { footer = e; } ceph_msg_footer &get_footer() { return footer; } + /* + * If you use get_[data, middle, payload] you shouldn't + * use it to change those bufferlists unless you KNOW + * there is no throttle being used. The other + * functions are throttling-aware as appropriate. + */ + void clear_payload() { if (throttler) throttler->put(payload.length() + middle.length()); payload.clear(); middle.clear(); } + void clear_data() { + if (throttler) throttler->put(data.length()); + data.clear(); + } + bool empty_payload() { return payload.length() == 0; } bufferlist& get_payload() { return payload; } void set_payload(bufferlist& bl) { @@ -318,6 +330,10 @@ public: } bufferlist& get_data() { return data; } + void claim_data(bufferlist& bl) { + if (throttler) throttler->put(data.length()); + bl.claim(data); + } off_t get_data_len() { return data.length(); } void set_recv_stamp(utime_t t) { recv_stamp = t; } diff --git a/src/osd/ReplicatedPG.cc b/src/osd/ReplicatedPG.cc index c420a1399d05e..fcb15d23319f6 100644 --- a/src/osd/ReplicatedPG.cc +++ b/src/osd/ReplicatedPG.cc @@ -1980,7 +1980,7 @@ void ReplicatedPG::op_applied(RepGather *repop) // discard my reference to the buffer if (repop->ctx->op) - repop->ctx->op->get_data().clear(); + repop->ctx->op->clear_data(); repop->applying = false; repop->applied = true; @@ -2205,7 +2205,7 @@ void ReplicatedPG::issue_repop(RepGather *repop, utime_t now, wr->old_version = old_version; wr->snapset = repop->obc->obs.ssc->snapset; wr->snapc = repop->ctx->snapc; - wr->get_data() = repop->ctx->op->get_data(); // _copy_ bufferlist + wr->set_data(repop->ctx->op->get_data()); // _copy_ bufferlist } else { // ship resulting transaction, log entries, and pg_stats ::encode(repop->ctx->op_t, wr->get_data()); @@ -3250,7 +3250,7 @@ void ReplicatedPG::sub_op_push(MOSDSubOp *op) map > clone_subsets; bufferlist data; - data.claim(op->get_data()); + op->claim_data(data); // we need this later, and it gets clobbered by t.setattrs() bufferlist oibl; diff --git a/src/osdc/Objecter.cc b/src/osdc/Objecter.cc index cf07e6a3b1520..e1a6f6be93e3a 100644 --- a/src/osdc/Objecter.cc +++ b/src/osdc/Objecter.cc @@ -511,7 +511,7 @@ void Objecter::handle_osd_op_reply(MOSDOpReply *m) // got data? if (op->outbl) { - op->outbl->claim(m->get_data()); + m->claim_data(*op->outbl); op->outbl = 0; } -- 2.39.5