summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSage Weil <sage@inktank.com>2012-12-17 16:29:19 -0800
committerSage Weil <sage@inktank.com>2012-12-17 16:29:19 -0800
commit1b67a43891c66475e08c44871b6dde54b2ba510c (patch)
treeb5fc09fc3d6024ccc04e8ea9a86c9acb44776924
parentbdc998ef4c6c5967e1e807584dac2f6d69bc5a5a (diff)
downloadceph-1b67a43891c66475e08c44871b6dde54b2ba510c.tar.gz
Revert "objecter: don't use new tid when retrying notifies"
This reverts commit c3107009f66bc06b5e14c465142e14120f9a4412. This appears to be causing problems in the objecter by corrupting the stack. Until that is resolved, let's revert. Signed-off-by: Sage Weil <sage@inktank.com>
-rw-r--r--src/osdc/Objecter.cc21
-rw-r--r--src/osdc/Objecter.h3
2 files changed, 3 insertions, 21 deletions
diff --git a/src/osdc/Objecter.cc b/src/osdc/Objecter.cc
index e29d879133b..6abada8f5d8 100644
--- a/src/osdc/Objecter.cc
+++ b/src/osdc/Objecter.cc
@@ -267,7 +267,7 @@ void Objecter::send_linger(LingerOp *info)
o->snapid = info->snap;
// do not resend this; we will send a new op to reregister
- o->should_resend = !info->is_watch;
+ o->should_resend = false;
if (info->session) {
int r = recalc_op_target(o);
@@ -278,7 +278,7 @@ void Objecter::send_linger(LingerOp *info)
if (info->register_tid) {
// repeat send. cancel old registeration op, if any.
- if (info->is_watch && ops.count(info->register_tid)) {
+ if (ops.count(info->register_tid)) {
Op *o = ops[info->register_tid];
cancel_op(o);
}
@@ -335,11 +335,6 @@ void Objecter::unregister_linger(uint64_t linger_id)
}
}
-/**
- * Note that this is meant to handle a watch OR a notify, but not both in the same ObjectOperation.
- * This is because watches need to be resent with a new tid on map changes, while notifies
- * need to resend using the old tid.
- */
tid_t Objecter::linger(const object_t& oid, const object_locator_t& oloc,
ObjectOperation& op,
snapid_t snap, bufferlist& inbl, bufferlist *poutbl, int flags,
@@ -354,18 +349,6 @@ tid_t Objecter::linger(const object_t& oid, const object_locator_t& oloc,
info->snap = snap;
info->flags = flags;
info->ops = op.ops;
- bool saw_notify = false;
- for (vector<OSDOp>::const_iterator it = info->ops.begin();
- it != info->ops.end(); ++it) {
- if (it->op.op == CEPH_OSD_OP_WATCH)
- info->is_watch = true;
- if (it->op.op == CEPH_OSD_OP_NOTIFY)
- saw_notify = true;
- if (info->is_watch)
- assert(it->op.op != CEPH_OSD_OP_NOTIFY);
- if (saw_notify)
- assert(it->op.op != CEPH_OSD_OP_WATCH);
- }
info->inbl = inbl;
info->poutbl = poutbl;
info->pobjver = objver;
diff --git a/src/osdc/Objecter.h b/src/osdc/Objecter.h
index bba7e9944c2..baf600c53be 100644
--- a/src/osdc/Objecter.h
+++ b/src/osdc/Objecter.h
@@ -815,14 +815,13 @@ public:
tid_t register_tid;
epoch_t map_dne_bound;
- bool is_watch;
LingerOp() : linger_id(0), flags(0), poutbl(NULL), pobjver(NULL),
registered(false),
on_reg_ack(NULL), on_reg_commit(NULL),
session(NULL), session_item(this),
register_tid(0),
- map_dne_bound(0), is_watch(false) {}
+ map_dne_bound(0) {}
// no copy!
const LingerOp &operator=(const LingerOp& r);