summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSage Weil <sage@inktank.com>2013-09-30 15:02:02 -0700
committerSage Weil <sage@inktank.com>2013-09-30 15:02:02 -0700
commit4c8fbe082eec3e46446af82c194dfd19671a27e9 (patch)
tree25fb64f049cb8b669fd01e44b314b1a93180ea1f
parent76321f8fc8ab5287e1a12473df8337cfd7711f4c (diff)
parentc8054ac57b9e397497aba6cbb0fa94f911840ad1 (diff)
downloadceph-4c8fbe082eec3e46446af82c194dfd19671a27e9.tar.gz
Merge pull request #661 from ceph/wip-copy-cleanups
Wip copy cleanups Reviewed-by: Sage Weil <sage@inktank.com>
-rw-r--r--src/osd/ReplicatedPG.cc23
-rw-r--r--src/osd/ReplicatedPG.h7
2 files changed, 10 insertions, 20 deletions
diff --git a/src/osd/ReplicatedPG.cc b/src/osd/ReplicatedPG.cc
index c826c38c145..5e099c0853d 100644
--- a/src/osd/ReplicatedPG.cc
+++ b/src/osd/ReplicatedPG.cc
@@ -3764,7 +3764,7 @@ int ReplicatedPG::do_osd_ops(OpContext *ctx, vector<OSDOp>& ops)
result = -EINVAL;
break;
}
- result = start_copy(ctx, src, src_oloc, src_version, &ctx->copy_op);
+ result = start_copy(ctx, src, src_oloc, src_version);
if (result < 0)
goto fail;
result = -EINPROGRESS;
@@ -4377,8 +4377,7 @@ struct C_Copyfrom : public Context {
};
int ReplicatedPG::start_copy(OpContext *ctx,
- hobject_t src, object_locator_t oloc, version_t version,
- CopyOpRef *pcop)
+ hobject_t src, object_locator_t oloc, version_t version)
{
const hobject_t& dest = ctx->obs->oi.soid;
dout(10) << __func__ << " " << dest << " ctx " << ctx
@@ -4581,19 +4580,13 @@ void ReplicatedPG::cancel_copy(CopyOpRef cop)
delete ctx;
}
-void ReplicatedPG::requeue_cancel_copy_ops(bool requeue)
+void ReplicatedPG::cancel_copy_ops()
{
dout(10) << __func__ << dendl;
for (map<hobject_t,CopyOpRef>::iterator p = copy_ops.begin();
p != copy_ops.end();
copy_ops.erase(p++)) {
- // requeue initiating copy *and* any subsequent waiters
- CopyOpRef cop = p->second;
- if (requeue) {
- cop->waiting.push_front(cop->ctx->op);
- requeue_ops(cop->waiting);
- }
- cancel_copy(cop);
+ cancel_copy(p->second);
}
}
@@ -5468,10 +5461,10 @@ void ReplicatedPG::kick_object_context_blocked(ObjectContextRef obc)
return;
}
- list<OpRequestRef>& ls = waiting_for_blocked_object[soid];
+ list<OpRequestRef>& ls = p->second;
dout(10) << __func__ << " " << soid << " requeuing " << ls.size() << " requests" << dendl;
requeue_ops(ls);
- waiting_for_blocked_object.erase(soid);
+ waiting_for_blocked_object.erase(p);
}
SnapSetContext *ReplicatedPG::create_snapset_context(const object_t& oid)
@@ -7333,7 +7326,7 @@ void ReplicatedPG::on_shutdown()
deleting = true;
unreg_next_scrub();
- requeue_cancel_copy_ops(false);
+ cancel_copy_ops();
apply_and_flush_repops(false);
context_registry_on_change();
@@ -7370,7 +7363,7 @@ void ReplicatedPG::on_change(ObjectStore::Transaction *t)
context_registry_on_change();
- requeue_cancel_copy_ops(is_primary());
+ cancel_copy_ops();
// requeue object waiters
if (is_primary()) {
diff --git a/src/osd/ReplicatedPG.h b/src/osd/ReplicatedPG.h
index e24592e932f..abee57ffe7d 100644
--- a/src/osd/ReplicatedPG.h
+++ b/src/osd/ReplicatedPG.h
@@ -102,8 +102,6 @@ public:
tid_t objecter_tid;
- list<OpRequestRef> waiting;
-
object_copy_cursor_t cursor;
uint64_t size;
utime_t mtime;
@@ -724,14 +722,13 @@ protected:
// -- copyfrom --
map<hobject_t, CopyOpRef> copy_ops;
- int start_copy(OpContext *ctx, hobject_t src, object_locator_t oloc, version_t version,
- CopyOpRef *pcop);
+ int start_copy(OpContext *ctx, hobject_t src, object_locator_t oloc, version_t version);
void process_copy_chunk(hobject_t oid, tid_t tid, int r);
void _write_copy_chunk(CopyOpRef cop, ObjectStore::Transaction *t);
void _copy_some(OpContext *ctx, CopyOpRef cop);
int finish_copy(OpContext *ctx);
void cancel_copy(CopyOpRef cop);
- void requeue_cancel_copy_ops(bool requeue=true);
+ void cancel_copy_ops();
friend class C_Copyfrom;