]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: avoid truncate, remove ops we know will fail
authorSage Weil <sage@newdream.net>
Wed, 11 Nov 2009 18:20:12 +0000 (10:20 -0800)
committerSage Weil <sage@newdream.net>
Thu, 12 Nov 2009 00:09:36 +0000 (16:09 -0800)
Now that we check return codes, these cause problems.

src/osd/ReplicatedPG.cc

index aabc74546b7a659d113dd54065e811f95d006f53..30c416d1b871fd3bf3511718dd373ad6ab395848 100644 (file)
@@ -1118,7 +1118,8 @@ int ReplicatedPG::do_osd_ops(OpContext *ctx, vector<OSDOp>& ops,
       { // write full object
        bufferlist nbl;
        bp.copy(op.extent.length, nbl);
-       t.truncate(coll_t::build_pg_coll(info.pgid), soid, 0);
+       if (ctx->obs->exists)
+         t.truncate(coll_t::build_pg_coll(info.pgid), soid, 0);
        t.write(coll_t::build_pg_coll(info.pgid), soid, op.extent.offset, op.extent.length, nbl);
        if (ssc->snapset.clones.size()) {
          snapid_t newest = *ssc->snapset.clones.rbegin();
@@ -1200,7 +1201,8 @@ int ReplicatedPG::do_osd_ops(OpContext *ctx, vector<OSDOp>& ops,
     
     case CEPH_OSD_OP_DELETE:
       { // delete
-       t.remove(coll_t::build_pg_coll(info.pgid), soid);  // no clones, delete!
+       if (ctx->obs->exists)
+         t.remove(coll_t::build_pg_coll(info.pgid), soid);  // no clones, delete!
        if (ssc->snapset.clones.size()) {
          snapid_t newest = *ssc->snapset.clones.rbegin();
          add_interval_usage(ssc->snapset.clone_overlap[newest], info.stats);