MCPcopy Create free account
hub / github.com/ceph/ceph / read_object

Method read_object

src/librbd/io/ObjectRequest.cc:223–256  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

221
222template <typename I>
223void ObjectReadRequest<I>::read_object() {
224 I *image_ctx = this->m_ictx;
225
226 std::shared_lock image_locker{image_ctx->image_lock};
227 auto read_snap_id = this->m_io_context->get_read_snap();
228 if (read_snap_id == image_ctx->snap_id &&
229 image_ctx->object_map != nullptr &&
230 !image_ctx->object_map->object_may_exist(this->m_object_no)) {
231 image_ctx->asio_engine->post([this]() { read_parent(); });
232 return;
233 }
234 image_locker.unlock();
235
236 ldout(image_ctx->cct, 20) << "snap_id=" << read_snap_id << dendl;
237
238 neorados::ReadOp read_op;
239 for (auto& extent: *this->m_extents) {
240 if (extent.length >= image_ctx->sparse_read_threshold_bytes) {
241 read_op.sparse_read(extent.offset, extent.length, &extent.bl,
242 &extent.extent_map);
243 } else {
244 read_op.read(extent.offset, extent.length, &extent.bl);
245 }
246 }
247 util::apply_op_flags(
248 m_op_flags, image_ctx->get_read_flags(read_snap_id), &read_op);
249
250 image_ctx->rados_api.execute(
251 {data_object_name(this->m_ictx, this->m_object_no)},
252 *this->m_io_context, std::move(read_op), nullptr,
253 librbd::asio::util::get_callback_adapter(
254 [this](int r) { handle_read_object(r); }), m_version,
255 (this->m_trace.valid() ? this->m_trace.get_info() : nullptr));
256}
257
258template <typename I>
259void ObjectReadRequest<I>::handle_read_object(int r) {

Callers

nothing calls this directly

Calls 14

apply_op_flagsFunction · 0.85
data_object_nameFunction · 0.85
get_callback_adapterFunction · 0.85
object_may_existMethod · 0.80
read_parentFunction · 0.70
get_read_snapMethod · 0.45
postMethod · 0.45
unlockMethod · 0.45
sparse_readMethod · 0.45
readMethod · 0.45
get_read_flagsMethod · 0.45
executeMethod · 0.45

Tested by

no test coverage detected