From 43400e324a1e61f417ba72a5329941b255651bd1 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Wed, 20 Aug 2008 09:19:43 -0700 Subject: [PATCH] objecter: introduce write_full() --- src/osdc/Objecter.cc | 26 ++++++++++++++++++++++---- src/osdc/Objecter.h | 9 +++++++-- 2 files changed, 29 insertions(+), 6 deletions(-) diff --git a/src/osdc/Objecter.cc b/src/osdc/Objecter.cc index 00566ef6b5703..b2e8f323593bb 100644 --- a/src/osdc/Objecter.cc +++ b/src/osdc/Objecter.cc @@ -721,7 +721,9 @@ void Objecter::handle_osd_read_reply(MOSDOpReply *m) // write ------------------------------------ -tid_t Objecter::write(object_t oid, __u64 off, size_t len, ceph_object_layout ol, const SnapContext& snapc, bufferlist &bl, int flags, +tid_t Objecter::write(object_t oid, __u64 off, size_t len, + ceph_object_layout ol, const SnapContext& snapc, + bufferlist &bl, int flags, Context *onack, Context *oncommit) { OSDWrite *wr = prepare_write(snapc, bl, flags); @@ -732,10 +734,25 @@ tid_t Objecter::write(object_t oid, __u64 off, size_t len, ceph_object_layout ol return last_tid; } +tid_t Objecter::write_full(object_t oid, + ceph_object_layout ol, const SnapContext& snapc, + bufferlist &bl, int flags, + Context *onack, Context *oncommit) +{ + OSDWrite *wr = prepare_write_full(snapc, bl, flags); + wr->extents.push_back(ObjectExtent(oid, 0, bl.length())); + wr->extents.front().layout = ol; + wr->extents.front().buffer_extents[0] = bl.length(); + modifyx(wr, onack, oncommit); + return last_tid; +} + // zero -tid_t Objecter::zero(object_t oid, __u64 off, size_t len, ceph_object_layout ol, const SnapContext& snapc, int flags, +tid_t Objecter::zero(object_t oid, __u64 off, size_t len, + ceph_object_layout ol, const SnapContext& snapc, + int flags, Context *onack, Context *oncommit) { OSDModify *z = prepare_modify(snapc, CEPH_OSD_OP_ZERO, flags); @@ -748,7 +765,8 @@ tid_t Objecter::zero(object_t oid, __u64 off, size_t len, ceph_object_layout ol, // lock ops -tid_t Objecter::lock(int op, object_t oid, int flags, ceph_object_layout ol, +tid_t Objecter::lock(int op, object_t oid, int flags, + ceph_object_layout ol, Context *onack, Context *oncommit) { SnapContext snapc; // null is fine @@ -812,7 +830,7 @@ tid_t Objecter::modifyx_submit(OSDModify *wr, ObjectExtent &ex, tid_t usetid) pg.last = g_clock.now(); // send? - dout(10) << "modifyx_submit " << MOSDOp::get_opname(wr->op) << " tid " << tid + dout(10) << "modifyx_submit " << ceph_osd_op_name(wr->op) << " tid " << tid << " oid " << ex.oid << " " << ex.start << "~" << ex.length << " " << ex.layout diff --git a/src/osdc/Objecter.h b/src/osdc/Objecter.h index c2af04499f65b..e11a6de48d43d 100644 --- a/src/osdc/Objecter.h +++ b/src/osdc/Objecter.h @@ -131,11 +131,14 @@ class Objecter { class OSDWrite : public OSDModify { public: bufferlist bl; - OSDWrite(const SnapContext& sc, bufferlist &b, int f) : OSDModify(sc, CEPH_OSD_OP_WRITE, f), bl(b) {} + OSDWrite(int op, const SnapContext& sc, bufferlist &b, int f) : OSDModify(sc, op, f), bl(b) {} }; OSDWrite *prepare_write(const SnapContext& sc, bufferlist &b, int f) { - return new OSDWrite(sc, b, f); + return new OSDWrite(CEPH_OSD_OP_WRITE, sc, b, f); + } + OSDWrite *prepare_write_full(const SnapContext& sc, bufferlist &b, int f) { + return new OSDWrite(CEPH_OSD_OP_WRITEFULL, sc, b, f); } @@ -239,6 +242,8 @@ class Objecter { tid_t write(object_t oid, __u64 off, size_t len, ceph_object_layout ol, const SnapContext& snapc, bufferlist &bl, int flags, Context *onack, Context *oncommit); + tid_t write_full(object_t oid, ceph_object_layout ol, const SnapContext& snapc, bufferlist &bl, int flags, + Context *onack, Context *oncommit); tid_t zero(object_t oid, __u64 off, size_t len, ceph_object_layout ol, const SnapContext& snapc, int flags, Context *onack, Context *oncommit); -- 2.39.5