]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
Merge branch 'wip-temp'
authorSage Weil <sage@redhat.com>
Fri, 10 Jul 2015 15:35:23 +0000 (11:35 -0400)
committerSage Weil <sage@redhat.com>
Fri, 10 Jul 2015 15:35:23 +0000 (11:35 -0400)
Conflicts:
src/osd/ReplicatedPG.cc
src/test/osd/RadosModel.h

Reviewed-by: Samuel Just <sjust@redhat.com>
Reviewed-by: David Zafman <dzafman@redhat.com>
17 files changed:
1  2 
src/.gitignore
src/os/FileStore.cc
src/os/FileStore.h
src/os/KeyValueStore.cc
src/os/KeyValueStore.h
src/osd/ECBackend.cc
src/osd/OSD.cc
src/osd/OSD.h
src/osd/PG.cc
src/osd/PG.h
src/osd/ReplicatedBackend.cc
src/osd/ReplicatedPG.cc
src/osd/ReplicatedPG.h
src/osd/osd_types.cc
src/osd/osd_types.h
src/test/objectstore/store_test.cc
src/test/osd/RadosModel.h

diff --cc src/.gitignore
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
index b97361e79c7d3adf305b1a5160bb977e18740d2c,07d0708ed45b88ee08897904f48100a27e505624..f51a3d2ca0e792d1dae93b9459feff677d635182
@@@ -243,22 -242,26 +242,28 @@@ void ECBackend::handle_recovery_push
    PushOp &op,
    RecoveryMessages *m)
  {
 +  assert(m->t);
 +
    bool oneshot = op.before_progress.first && op.after_progress.data_complete;
-   coll_t tcoll = oneshot ? coll : get_temp_coll(m->t);
+   ghobject_t tobj;
+   if (oneshot) {
+     tobj = ghobject_t(op.soid, ghobject_t::NO_GEN,
+                     get_parent()->whoami_shard().shard);
+   } else {
+     tobj = ghobject_t(get_parent()->get_temp_recovery_object(op.version,
+                                                            op.soid.snap),
+                     ghobject_t::NO_GEN,
+                     get_parent()->whoami_shard().shard);
+     if (op.before_progress.first) {
+       dout(10) << __func__ << ": Adding oid "
+              << tobj.hobj << " in the temp collection" << dendl;
+       add_temp_obj(tobj.hobj);
+     }
+   }
    if (op.before_progress.first) {
-     get_parent()->on_local_recover_start(
-       op.soid,
-       m->t);
-     m->t->remove(
-       get_temp_coll(m->t),
-       ghobject_t(
-       op.soid, ghobject_t::NO_GEN, get_parent()->whoami_shard().shard));
-     m->t->touch(
-       tcoll,
-       ghobject_t(
-       op.soid, ghobject_t::NO_GEN, get_parent()->whoami_shard().shard));
+     m->t->remove(coll, tobj);
+     m->t->touch(coll, tobj);
    }
  
    if (!op.data_included.empty()) {
diff --cc src/osd/OSD.cc
Simple merge
diff --cc src/osd/OSD.h
Simple merge
diff --cc src/osd/PG.cc
Simple merge
diff --cc src/osd/PG.h
Simple merge
Simple merge
index 8fdbe3f95aaa9cfda76870eaeee0f4032ede1663,9bddf49d664d8132f6404b1f2a9789c76adacfdf..7ad5d7ca471483e6856806d9c1c49568b53a71e4
@@@ -4722,9 -4720,9 +4720,9 @@@ int ReplicatedPG::do_osd_ops(OpContext 
        tracepoint(osd, do_osd_op_pre_omapgetkeys, soid.oid.name.c_str(), soid.snap.val, start_after.c_str(), max_return);
        set<string> out_set;
  
 -      if (!pool.info.require_rollback()) {
 +      if (pool.info.supports_omap()) {
          ObjectMap::ObjectMapIterator iter = osd->store->get_omap_iterator(
-           coll, soid
+           coll, ghobject_t(soid)
            );
          assert(iter);
          iter->upper_bound(start_after);
        tracepoint(osd, do_osd_op_pre_omapgetvals, soid.oid.name.c_str(), soid.snap.val, start_after.c_str(), max_return, filter_prefix.c_str());
        map<string, bufferlist> out_set;
  
 -      if (!pool.info.require_rollback()) {
 +      if (pool.info.supports_omap()) {
          ObjectMap::ObjectMapIterator iter = osd->store->get_omap_iterator(
-           coll, soid
+           coll, ghobject_t(soid)
            );
            if (!iter) {
              result = -ENOENT;
        }
        tracepoint(osd, do_osd_op_pre_omapgetvalsbykeys, soid.oid.name.c_str(), soid.snap.val, list_entries(keys_to_get).c_str());
        map<string, bufferlist> out;
 -      if (!pool.info.require_rollback()) {
 +      if (pool.info.supports_omap()) {
-         osd->store->omap_get_values(coll, soid, keys_to_get, &out);
+         osd->store->omap_get_values(coll, ghobject_t(soid), keys_to_get, &out);
        } // else return empty omap entries
        ::encode(out, osd_op.outdata);
        ctx->delta_stats.num_rd_kb += SHIFT_ROUND_UP(osd_op.outdata.length(), 10);
Simple merge
Simple merge
Simple merge
Simple merge
index 504e903aeb8c697318fbe44b1a642641efe8547b,2596cd9ea259b8992a4771c039b69835ee9f0581..ed4bdb86e15014b27f16ac40522bb9fa4c418bd3
@@@ -998,14 -998,14 +999,16 @@@ public
    ReadOp(int n,
         RadosTestContext *context,
         const string &oid,
+        bool balance_reads,
         TestOpStat *stat = 0)
      : TestOp(n, context, stat),
 -      completion(NULL),
 +      completions(3),
        oid(oid),
        snap(0),
 -      retval(0),
+       balance_reads(balance_reads),
 +      results(3),
 +      retvals(3),
 +      waiting_on(0),
        attrretval(0)
    {}
                
        op.omap_get_header(&header, 0);
      }
      op.getxattrs(&xattrs, 0);
-     assert(!context->io_ctx.aio_operate(context->prefix+oid, completions[0], &op, 0));
++
+     unsigned flags = 0;
+     if (balance_reads)
+       flags |= librados::OPERATION_BALANCE_READS;
 -    assert(!context->io_ctx.aio_operate(context->prefix+oid, completion, &op,
++
++    assert(!context->io_ctx.aio_operate(context->prefix+oid, completions[0], &op,
+                                       flags, NULL));
 +    waiting_on++;
 + 
 +    // send 2 pipelined reads on the same object/snap. This can help testing
 +    // OSD's read behavior in some scenarios
 +    for (uint32_t i = 1; i < 3; ++i) {
 +      librados::ObjectReadOperation pipeline_op;
 +
 +      pipeline_op.read(0,
 +                       !old_value.has_contents() ? 0 :
 +                       old_value.most_recent_gen()->get_length(old_value.most_recent()),
 +                       &results[i],
 +                       &retvals[i]);
 +      assert(!context->io_ctx.aio_operate(context->prefix+oid, completions[i], &pipeline_op, 0));
 +      waiting_on++;
 +    }
 +
      if (snap >= 0) {
        context->io_ctx.snap_set_read(0);
      }