From 113d12a7aab2ffece10c61efff3e8e1e238f3825 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Mon, 24 Mar 2008 11:55:40 -0700 Subject: [PATCH] osd: set inc_lock attrs --- src/include/ceph_fs.h | 1 - src/messages/MOSDOp.h | 2 -- src/messages/MOSDSubOp.h | 7 ++++++- src/osd/ReplicatedPG.cc | 25 +++++++++++-------------- src/osd/ReplicatedPG.h | 2 +- 5 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/include/ceph_fs.h b/src/include/ceph_fs.h index 21403b582bb0d..2a5bace55935a 100644 --- a/src/include/ceph_fs.h +++ b/src/include/ceph_fs.h @@ -495,7 +495,6 @@ enum { CEPH_OSD_OP_RDUNLOCK = 23, CEPH_OSD_OP_UPLOCK = 24, CEPH_OSD_OP_DNLOCK = 25, - CEPH_OSD_OP_MININCLOCK = 26, /* minimum incarnation lock */ CEPH_OSD_OP_PULL = 30, CEPH_OSD_OP_PUSH = 31, diff --git a/src/messages/MOSDOp.h b/src/messages/MOSDOp.h index 6eb97fce841bd..98d1ecef6b0f0 100644 --- a/src/messages/MOSDOp.h +++ b/src/messages/MOSDOp.h @@ -48,8 +48,6 @@ public: case CEPH_OSD_OP_UPLOCK: return "uplock"; case CEPH_OSD_OP_DNLOCK: return "dnlock"; - case CEPH_OSD_OP_MININCLOCK: return "mininclock"; - case CEPH_OSD_OP_BALANCEREADS: return "balance-reads"; case CEPH_OSD_OP_UNBALANCEREADS: return "unbalance-reads"; diff --git a/src/messages/MOSDSubOp.h b/src/messages/MOSDSubOp.h index 74b163eb8b362..2335238c24bae 100644 --- a/src/messages/MOSDSubOp.h +++ b/src/messages/MOSDSubOp.h @@ -41,6 +41,7 @@ private: // subop metadata tid_t rep_tid; eversion_t version; + uint32_t inc_lock; // piggybacked osd/og state eversion_t pg_trim_to; // primary->replica: trim to here @@ -72,6 +73,9 @@ public: const eversion_t get_pg_trim_to() { return st.pg_trim_to; } void set_pg_trim_to(eversion_t v) { st.pg_trim_to = v; } + unsigned get_inc_lock() { return st.inc_lock; } + void set_inc_lock(unsigned i) { st.inc_lock = i; } + map& get_attrset() { return attrset; } void set_attrset(map &as) { attrset.swap(as); } @@ -79,7 +83,7 @@ public: const osd_peer_stat_t& get_peer_stat() { return st.peer_stat; } MOSDSubOp(osd_reqid_t r, pg_t p, pobject_t po, int o, off_t of, off_t le, - epoch_t mape, tid_t rtid, eversion_t v) : + epoch_t mape, tid_t rtid, unsigned il, eversion_t v) : Message(MSG_OSD_SUBOP) { memset(&st, 0, sizeof(st)); st.reqid = r; @@ -91,6 +95,7 @@ public: st.length = le; st.map_epoch = mape; st.rep_tid = rtid; + st.inc_lock = il; st.version = v; } MOSDSubOp() {} diff --git a/src/osd/ReplicatedPG.cc b/src/osd/ReplicatedPG.cc index 2d18171d952e9..3bcd634625cf5 100644 --- a/src/osd/ReplicatedPG.cc +++ b/src/osd/ReplicatedPG.cc @@ -638,7 +638,7 @@ void ReplicatedPG::prepare_log_transaction(ObjectStore::Transaction& t, void ReplicatedPG::prepare_op_transaction(ObjectStore::Transaction& t, const osd_reqid_t& reqid, pg_t pgid, int op, pobject_t poid, off_t offset, off_t length, bufferlist& bl, - eversion_t& version, objectrev_t crev, objectrev_t rev) + eversion_t& version, __u32 inc_lock, objectrev_t crev, objectrev_t rev) { bool did_clone = false; @@ -690,13 +690,6 @@ void ReplicatedPG::prepare_op_transaction(ObjectStore::Transaction& t, const osd } break; - case CEPH_OSD_OP_MININCLOCK: - { - uint32_t mininc = length; - t.setattr(poid, "mininclock", &mininc, sizeof(mininc)); - } - break; - case CEPH_OSD_OP_BALANCEREADS: { bool bal = true; @@ -718,6 +711,7 @@ void ReplicatedPG::prepare_op_transaction(ObjectStore::Transaction& t, const osd bufferlist nbl; nbl.claim(bl); // give buffers to store; we keep *op in memory for a long time! t.write(poid, offset, length, nbl); + if (inc_lock) t.setattr(poid, "inc_lock", &inc_lock, sizeof(inc_lock)); } break; @@ -729,8 +723,10 @@ void ReplicatedPG::prepare_op_transaction(ObjectStore::Transaction& t, const osd if (r >= 0) { if (offset == 0 && offset + length >= (off_t)st.st_size) t.remove(poid); - else + else { t.zero(poid, offset, length); + if (inc_lock) t.setattr(poid, "inc_lock", &inc_lock, sizeof(inc_lock)); + } } else { // noop? dout(10) << "apply_transaction zero on " << poid << ", but dne? stat returns " << r << dendl; @@ -741,6 +737,7 @@ void ReplicatedPG::prepare_op_transaction(ObjectStore::Transaction& t, const osd case CEPH_OSD_OP_TRUNCATE: { // truncate t.truncate(poid, length); + if (inc_lock) t.setattr(poid, "inc_lock", &inc_lock, sizeof(inc_lock)); } break; @@ -929,7 +926,7 @@ void ReplicatedPG::issue_repop(RepGather *repop, int dest, utime_t now) repop->op->get_op(), repop->op->get_offset(), repop->op->get_length(), osd->osdmap->get_epoch(), - repop->rep_tid, repop->new_version); + repop->rep_tid, repop->op->get_inc_lock(), repop->new_version); wr->get_data() = repop->op->get_data(); // _copy_ bufferlist wr->set_pg_trim_to(peers_complete_thru); wr->set_peer_stat(osd->get_my_stat_for(now, dest)); @@ -1252,7 +1249,7 @@ void ReplicatedPG::op_modify(MOSDOp *op) prepare_op_transaction(repop->t, op->get_reqid(), info.pgid, op->get_op(), poid, op->get_offset(), op->get_length(), op->get_data(), - nv, crev, poid.oid.rev); + nv, op->get_inc_lock(), crev, poid.oid.rev); } // (logical) local ack. @@ -1307,7 +1304,7 @@ void ReplicatedPG::sub_op_modify(MOSDSubOp *op) prepare_op_transaction(t, op->get_reqid(), info.pgid, op->get_op(), poid, op->get_offset(), op->get_length(), op->get_data(), - nv, crev, 0); + nv, op->get_inc_lock(), crev, 0); } C_OSD_RepModifyCommit *oncommit = new C_OSD_RepModifyCommit(this, op, ackerosd, info.last_complete); @@ -1394,7 +1391,7 @@ void ReplicatedPG::pull(pobject_t poid) tid_t tid = osd->get_tid(); MOSDSubOp *subop = new MOSDSubOp(rid, info.pgid, poid, CEPH_OSD_OP_PULL, 0, 0, - osd->osdmap->get_epoch(), tid, v); + osd->osdmap->get_epoch(), tid, 0, v); osd->messenger->send_message(subop, osd->osdmap->get_inst(fromosd)); // take note @@ -1434,7 +1431,7 @@ void ReplicatedPG::push(pobject_t poid, int peer) // send osd_reqid_t rid; // useless? MOSDSubOp *subop = new MOSDSubOp(rid, info.pgid, poid, CEPH_OSD_OP_PUSH, 0, bl.length(), - osd->osdmap->get_epoch(), osd->get_tid(), v); + osd->osdmap->get_epoch(), osd->get_tid(), 0, v); subop->set_data(bl); // note: claims bl, set length above here! subop->set_attrset(attrset); osd->messenger->send_message(subop, osd->osdmap->get_inst(peer)); diff --git a/src/osd/ReplicatedPG.h b/src/osd/ReplicatedPG.h index 796f4e518c431..afec8ad5099c4 100644 --- a/src/osd/ReplicatedPG.h +++ b/src/osd/ReplicatedPG.h @@ -104,7 +104,7 @@ protected: void prepare_op_transaction(ObjectStore::Transaction& t, const osd_reqid_t& reqid, pg_t pgid, int op, pobject_t poid, off_t offset, off_t length, bufferlist& bl, - eversion_t& version, objectrev_t crev, objectrev_t rev); + eversion_t& version, __u32 inc_lock, objectrev_t crev, objectrev_t rev); friend class C_OSD_ModifyCommit; friend class C_OSD_RepModifyCommit; -- 2.39.5