]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
Merge commit 'origin/unstable' into snap
authorSage Weil <sage@newdream.net>
Wed, 6 Aug 2008 18:33:56 +0000 (11:33 -0700)
committerSage Weil <sage@newdream.net>
Wed, 6 Aug 2008 18:33:56 +0000 (11:33 -0700)
Conflicts:

src/osd/OSDMap.cc
src/osd/ReplicatedPG.cc

19 files changed:
1  2 
src/TODO
src/client/Client.cc
src/client/SyntheticClient.cc
src/config.cc
src/config.h
src/ebofs/Ebofs.cc
src/ebofs/Ebofs.h
src/include/object.h
src/mds/LogEvent.cc
src/mds/journal.cc
src/os/Fake.h
src/os/FileStore.cc
src/os/FileStore.h
src/os/ObjectStore.h
src/osd/OSD.cc
src/osd/PG.cc
src/osd/PG.h
src/osd/ReplicatedPG.cc
src/vstartnew.sh

diff --cc src/TODO
Simple merge
Simple merge
Simple merge
diff --cc src/config.cc
Simple merge
diff --cc src/config.h
Simple merge
Simple merge
Simple merge
index 01528ad698794c690df7b50125ff63ccda566ec0,c3f7162436c1bce8927e1c03907fc1bfa9d10547..a5f5c9b7294eb7ef8ac63b300f499a1676cb03e1
@@@ -38,13 -36,13 +36,13 @@@ struct object_t 
      struct {
        uint64_t ino;    // "file" identifier
        uint32_t bno;    // "block" in that "file"
 -      objectrev_t rev; // revision.  normally ctime (as epoch).
 +      uint64_t snap;   // snap revision.
      } __attribute__ ((packed));
-   };
+   } __attribute__ ((packed));
  
 -  object_t() : ino(0), bno(0), rev(0) {}
 -  object_t(uint64_t i, uint32_t b) : ino(i), bno(b), rev(0) {}
 -  object_t(uint64_t i, uint32_t b, uint64_t r) : ino(i), bno(b), rev(r) {}
 +  object_t() : ino(0), bno(0), snap(0) {}
 +  object_t(uint64_t i, uint32_t b) : ino(i), bno(b), snap(0) {}
 +  object_t(uint64_t i, uint32_t b, uint64_t r) : ino(i), bno(b), snap(r) {}
  
    // IMPORTANT: make this match struct ceph_object ****
    object_t(const ceph_object& co) {
Simple merge
Simple merge
diff --cc src/os/Fake.h
index 3ac968de109771821f83c1b13adea2e78db4522a,cd96c6596ad27264185cff002369b88d741d5e07..fa1398bdabb4aabb75f42846f756de3e9c90a121
@@@ -130,16 -130,16 +130,24 @@@ class FakeAttrs 
          bl.copy(0, l, (char*)value);
          return l;
        }
 -      return -1;
 +      return -ENODATA;
 +    }
 +    int getattr(const char *name, bufferptr &bp) {
 +      string n = name;
 +      if (attrs.count(n)) {
 +      bp = attrs[n];
 +      return bp.length();
 +      }
 +      return -ENODATA;
      }
+     int getattr(const char *name, bufferlist& bl) {
+       string n = name;
+       if (attrs.count(n)) {
+         bl.append(attrs[n]);
+         return bl.length();
+       }
+       return -1;
+     }
      int getattrs(map<string,bufferptr>& aset) {
        aset = attrs;
        return 0;
Simple merge
Simple merge
Simple merge
diff --cc src/osd/OSD.cc
Simple merge
diff --cc src/osd/PG.cc
Simple merge
diff --cc src/osd/PG.h
Simple merge
index 45e3763bf05e9dd830ee5f97dbae634e494cef5a,dba5807fcd275dd0c922ceca1282ed599a99a645..0e6bd839b4a514ff6e69eb57b8d49cecad8cd2b9
@@@ -606,59 -654,30 +606,58 @@@ void ReplicatedPG::prepare_transaction(
    if (op == CEPH_OSD_OP_WRNOOP) 
      return;
  
 -  // raise last_complete?
 -  if (info.last_complete == info.last_update)
 -    info.last_complete = version;
 -  
 -  // raise last_update.
 -  assert(version > info.last_update);
 -  info.last_update = version;
 +  // clone?
 +  if (poid.oid.snap) {
 +    assert(poid.oid.snap == NOSNAP);
 +    dout(20) << "snaps=" << snaps << "  follows_snap=" << follows_snap << dendl;;
 +
 +    if (follows_snap &&
 +      !snaps.empty() && snaps[0] > follows_snap) {
 +      // clone
 +      pobject_t coid = poid;
 +      coid.oid.snap = snaps[0];
 +      
 +      unsigned l;
 +      for (l=1; l<snaps.size() && snaps[l] > follows_snap; l++) ;
 +      vector<snapid_t> csnaps(l);
 +      for (unsigned i=0; i<l; i++)
 +      csnaps[i] = snaps[i];
 +
 +      // log clone
 +      dout(10) << "cloning to " << coid << " v " << at_version << " csnaps=" << csnaps << dendl;
 +      Log::Entry cloneentry(PG::Log::Entry::CLONE, coid.oid, at_version, reqid);
 +      dout(10) << "prepare_transaction " << cloneentry << dendl;
 +      log.add(cloneentry);
 +      assert(log.top == at_version);
 +
 +      // prepare clone
 +      t.clone(info.pgid, poid, coid);
 +      t.setattr(info.pgid, coid, "snaps", &csnaps[0], csnaps.size()*sizeof(snapid_t));
 +      t.setattr(info.pgid, coid, "version", &at_version, sizeof(at_version));
 +      
 +      at_version.version++;
 +
 +      /*
 +      // munge delete into a truncate?
 +      if (op == CEPH_OSD_OP_DELETE) {
 +      op = CEPH_OSD_OP_TRUNCATE;
 +      length = 0;
 +      }
 +      */
 +    }
 +  }
    
 -  // write pg info
 -  bufferlist infobl;
 -  ::encode(info, infobl);
 -  t.collection_setattr(pgid, "info", infobl);
 +  // log op
 +  int opcode = Log::Entry::MODIFY;
 +  if (op == CEPH_OSD_OP_DELETE) opcode = Log::Entry::DELETE;
 +  Log::Entry logentry(opcode, poid.oid, at_version, reqid);
 +  dout(10) << "prepare_transaction " << op << " " << logentry << dendl;
  
 -  // clone?
 -  if (crev && rev && rev > crev) {
 -    assert(0);
 -    pobject_t noid = poid;  // FIXME ****
 -    noid.oid.rev = rev;
 -    dout(10) << "prepare_op_transaction cloning " << poid << " crev " << crev << " to " << noid << dendl;
 -    t.clone(info.pgid, poid, noid);
 -    did_clone = true;
 -  }  
 -
 -  // apply the op
 +  assert(at_version > log.top);
 +  log.add(logentry);
 +  assert(log.top == at_version);
 +
 +  // prepare op
    switch (op) {
  
      // -- locking --
    }
    
    // object collection, version
 -  if (op == CEPH_OSD_OP_DELETE) {
 -    // remove object from c
 -    //t.collection_remove(pgid, poid);
 -  } else {
 -    // add object to c
 -    //t.collection_add(pgid, poid);
 -    
 +  if (op != CEPH_OSD_OP_DELETE) {
      // object version
 -    t.setattr(info.pgid, poid, "version", &version, sizeof(version));
 +    t.setattr(info.pgid, poid, "version", &at_version, sizeof(at_version));
  
 -    // set object crev
 -    if (crev == 0 ||   // new object
 -      did_clone)     // we cloned
 -      t.setattr(info.pgid, poid, "crev", &rev, sizeof(rev));
 +    if (snaps.size())
 +      t.setattr(info.pgid, poid, "follows_snap", &snaps[0], snaps.size() * sizeof(snapid_t));
    }
-   t.collection_setattr(info.pgid, "info", &info, sizeof(info));
 +
 +  // update pg info:
 +  // raise last_complete only if we were previously up to date
 +  if (info.last_complete == info.last_update)
 +    info.last_complete = at_version;
 +  
 +  // raise last_update.
 +  assert(at_version > info.last_update);
 +  info.last_update = at_version;
 +  
 +  // write pg info
++  bufferlist infobl;
++  ::encode(info, infobl);
++  t.collection_setattr(info.pgid, "info", infobl);
 +
 +  // prepare log append
 +  append_log(t, logentry, trim_to);
  }
  
  
index ebf928d4946a52e33fc1bddb5a465737de13aef2,d4f0e2ca4db4b07750505fc4a1547da766ffbf2a..465742492e8e119f10f0389713bb3a8f8c6165b8
@@@ -34,11 -34,11 +34,11 @@@ don
  $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
-  $CEPH_BIN/cosd -m $IP:12345 dev/osd$osd -d --debug_ms 1 --debug_osd 20 # --debug_filestore 10
+  echo valgrind --leak-check=full --show-reachable=yes $CEPH_BIN/cosd dev/osd$osd --debug_ms 1 --debug_osd 20 --debug_filestore 10 --debug_ebofs 20 #1>out/o$osd #& #--debug_osd 40
+  #$CEPH_BIN/cosd -m $IP:12345 dev/osd$osd -d --debug_ms 1 --debug_osd 20 # --debug_filestore 10
  done
  
  # mds