]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: set inc_lock attrs
authorSage Weil <sage@newdream.net>
Mon, 24 Mar 2008 18:55:40 +0000 (11:55 -0700)
committerSage Weil <sage@newdream.net>
Mon, 24 Mar 2008 18:55:40 +0000 (11:55 -0700)
src/include/ceph_fs.h
src/messages/MOSDOp.h
src/messages/MOSDSubOp.h
src/osd/ReplicatedPG.cc
src/osd/ReplicatedPG.h

index 21403b582bb0d34781079ed1fc62a34ec41c8e1f..2a5bace55935a17394d71b67a77a70f5672702eb 100644 (file)
@@ -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,
index 6eb97fce841bd7a388074841a539605f7ac470b6..98d1ecef6b0f042e14c8d774d3b987b2bffd9edd 100644 (file)
@@ -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";
 
index 74b163eb8b362d5cdef311ce8a2be540dcab6b92..2335238c24bae8af42cf2b4cfef6a6c0e13bcd91 100644 (file)
@@ -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<string,bufferptr>& get_attrset() { return attrset; }
   void set_attrset(map<string,bufferptr> &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() {}
index 2d18171d952e9241ae122b5560d450ce98b7ac9f..3bcd634625cf5a0817f1885540dc15307f508331 100644 (file)
@@ -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));
index 796f4e518c431482b6e7edb0598d66312228d6e9..afec8ad5099c45c2d25821d68044a37e8f7d0a15 100644 (file)
@@ -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;