From 46a12aa17208673bad67a7b35d93ed2a66d1e39b Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Wed, 2 Jul 2008 22:11:21 -0700 Subject: [PATCH] osd: misc fixes.. basic cloning works --- src/client/Client.cc | 8 ++++++++ src/messages/MOSDSubOp.h | 4 +++- src/osd/ReplicatedPG.cc | 16 +++++++++------- src/osd/ReplicatedPG.h | 7 +++++-- src/osdc/Objecter.cc | 3 +++ src/vstartnew.sh | 2 +- 6 files changed, 29 insertions(+), 11 deletions(-) diff --git a/src/client/Client.cc b/src/client/Client.cc index d9d3939bcb795..25c4c8e60a2a1 100644 --- a/src/client/Client.cc +++ b/src/client/Client.cc @@ -3319,6 +3319,14 @@ int Client::_write(Fh *f, __s64 offset, __u64 size, const char *buf) unsafe_sync_write++; in->get_cap_ref(CEPH_CAP_WRBUFFER); + // hack + if (1) { + static int a = 0; + in->snaprealm->snaps.insert(in->snaprealm->snaps.begin(), ++a); + in->snaprealm->snaps.insert(in->snaprealm->snaps.begin(), ++a); + dout(10) << "snaps now " << in->snaprealm->snaps << dendl; + } + filer->write(in->inode.ino, &in->inode.layout, CEPH_NOSNAP, in->snaprealm->snaps, diff --git a/src/messages/MOSDSubOp.h b/src/messages/MOSDSubOp.h index f308cd88cad31..cb46b7daf1d93 100644 --- a/src/messages/MOSDSubOp.h +++ b/src/messages/MOSDSubOp.h @@ -40,6 +40,7 @@ public: tid_t rep_tid; eversion_t version; uint32_t inc_lock; + snapid_t follows_snap; vector snaps; @@ -119,7 +120,8 @@ public: out << "osd_sub_op(" << reqid << " " << MOSDOp::get_opname(op) << " " << poid - << " av" << version; + << " v " << version + << " follows_snap=" << follows_snap << " snaps=" << snaps; if (length) out << " " << offset << "~" << length; out << ")"; } diff --git a/src/osd/ReplicatedPG.cc b/src/osd/ReplicatedPG.cc index c27c5d2cbad78..407594dd5beb8 100644 --- a/src/osd/ReplicatedPG.cc +++ b/src/osd/ReplicatedPG.cc @@ -619,13 +619,13 @@ void ReplicatedPG::prepare_transaction(ObjectStore::Transaction& t, osd_reqid_t unsigned l; for (l=1; l follows_snap; l++) ; - vector csnaps; - csnaps.insert(snaps.begin(), l); + vector csnaps(l); + for (unsigned i=0; imessenger->send_message(wr, osd->osdmap->get_inst(dest)); } -ReplicatedPG::RepGather *ReplicatedPG::new_rep_gather(MOSDOp *op, tid_t rep_tid, eversion_t nv) +ReplicatedPG::RepGather *ReplicatedPG::new_rep_gather(MOSDOp *op, tid_t rep_tid, eversion_t nv, + snapid_t follows_snap, vector &snaps) { dout(10) << "new_rep_gather rep_tid " << rep_tid << " on " << *op << dendl; - RepGather *repop = new RepGather(op, rep_tid, nv, info.last_complete); + RepGather *repop = new RepGather(op, rep_tid, nv, info.last_complete, + follows_snap, snaps); // osds. commits all come to me. for (unsigned i=0; iwaitfor_ack.insert(osd); } - + repop->start = g_clock.now(); rep_gather[repop->rep_tid] = repop; @@ -1198,7 +1200,7 @@ void ReplicatedPG::op_modify(MOSDOp *op) // issue replica writes tid_t rep_tid = osd->get_tid(); - RepGather *repop = new_rep_gather(op, rep_tid, av); + RepGather *repop = new_rep_gather(op, rep_tid, av, follows, op->get_snaps()); for (unsigned i=1; i pg_complete_thru; - RepGather(MOSDOp *o, tid_t rt, eversion_t av, eversion_t lc) : + RepGather(MOSDOp *o, tid_t rt, eversion_t av, eversion_t lc, + snapid_t fs, vector &sn) : op(o), rep_tid(rt), applied(false), sent_ack(false), sent_commit(false), at_version(av), + follows_snap(fs), snaps(sn), pg_local_last_complete(lc) { } bool can_send_ack() { @@ -83,7 +85,8 @@ protected: void apply_repop(RepGather *repop); void put_rep_gather(RepGather*); void issue_repop(RepGather *repop, int dest, utime_t now); - RepGather *new_rep_gather(MOSDOp *op, tid_t rep_tid, eversion_t nv); + RepGather *new_rep_gather(MOSDOp *op, tid_t rep_tid, eversion_t nv, + snapid_t follows_snap, vector &snaps); void repop_ack(RepGather *repop, int result, bool commit, int fromosd, eversion_t pg_complete_thru=eversion_t(0,0)); diff --git a/src/osdc/Objecter.cc b/src/osdc/Objecter.cc index acc9ef1f1b694..71315d404c14b 100644 --- a/src/osdc/Objecter.cc +++ b/src/osdc/Objecter.cc @@ -377,6 +377,7 @@ tid_t Objecter::stat_submit(OSDStat *st) MOSDOp *m = new MOSDOp(messenger->get_myinst(), client_inc, last_tid, ex.oid, ex.layout, osdmap->get_epoch(), CEPH_OSD_OP_STAT, flags); + m->get_snaps() = st->snaps; if (inc_lock > 0) { st->inc_lock = inc_lock; m->set_inc_lock(inc_lock); @@ -505,6 +506,7 @@ tid_t Objecter::readx_submit(OSDRead *rd, ObjectExtent &ex, bool retry) MOSDOp *m = new MOSDOp(messenger->get_myinst(), client_inc, last_tid, ex.oid, ex.layout, osdmap->get_epoch(), CEPH_OSD_OP_READ, flags); + m->get_snaps() = rd->snaps; if (inc_lock > 0) { rd->inc_lock = inc_lock; m->set_inc_lock(inc_lock); @@ -808,6 +810,7 @@ tid_t Objecter::modifyx_submit(OSDModify *wr, ObjectExtent &ex, tid_t usetid) MOSDOp *m = new MOSDOp(messenger->get_myinst(), client_inc, tid, ex.oid, ex.layout, osdmap->get_epoch(), wr->op, flags); + m->get_snaps() = wr->snaps; if (inc_lock > 0) { wr->inc_lock = inc_lock; m->set_inc_lock(inc_lock); diff --git a/src/vstartnew.sh b/src/vstartnew.sh index 9378b688895e0..ebf88761b2897 100755 --- a/src/vstartnew.sh +++ b/src/vstartnew.sh @@ -34,7 +34,7 @@ done $CEPH_BIN/osdmaptool --clobber --createsimple .ceph_monmap 4 --print .ceph_osdmap # --pgbits 2 $CEPH_BIN/cmonctl osd setmap -i .ceph_osdmap -for osd in 0 1 2 3 #4 5 6 7 8 9 10 11 12 13 14 15 +for osd in 0 1 #2 3 #4 5 6 7 8 9 10 11 12 13 14 15 do $CEPH_BIN/cosd --mkfs_for_osd $osd dev/osd$osd # initialize empty object store #valgrind --leak-check=full --show-reachable=yes $CEPH_BIN/cosd dev/osd$osd --debug_ms 1 --debug_osd 20 --debug_filestore 10 1>out/o$osd & #--debug_osd 40 -- 2.39.5