From: Samuel Just Date: Tue, 23 Jun 2015 19:06:01 +0000 (-0700) Subject: src/: remove CLONE_RANGE, ASSERT_SRC_VERSION, SRC_CMPXATTR X-Git-Tag: v12.0.0~126^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=0d7b0b7b52049558273cb29d87c9b26213db8428;p=ceph.git src/: remove CLONE_RANGE, ASSERT_SRC_VERSION, SRC_CMPXATTR These greatly complicate the osd implementation and appear unused. Signed-off-by: Samuel Just --- diff --git a/src/include/rados.h b/src/include/rados.h index 71d5f2702b65..291aa3a599ab 100644 --- a/src/include/rados.h +++ b/src/include/rados.h @@ -172,7 +172,7 @@ extern const char *ceph_osd_state_name(int s); #define CEPH_OSD_OP_TYPE_ATTR 0x0300 #define CEPH_OSD_OP_TYPE_EXEC 0x0400 #define CEPH_OSD_OP_TYPE_PG 0x0500 -#define CEPH_OSD_OP_TYPE_MULTI 0x0600 /* multiobject */ +// LEAVE UNUSED 0x0600 used to be multiobject ops #define __CEPH_OSD_OP1(mode, nr) \ (CEPH_OSD_OP_MODE_##mode | (nr)) @@ -260,11 +260,6 @@ extern const char *ceph_osd_state_name(int s); /* ESX/SCSI */ \ f(WRITESAME, __CEPH_OSD_OP(WR, DATA, 38), "write-same") \ \ - /** multi **/ \ - f(CLONERANGE, __CEPH_OSD_OP(WR, MULTI, 1), "clonerange") \ - f(ASSERT_SRC_VERSION, __CEPH_OSD_OP(RD, MULTI, 2), "assert-src-version") \ - f(SRC_CMPXATTR, __CEPH_OSD_OP(RD, MULTI, 3), "src-cmpxattr") \ - \ /** attrs **/ \ /* read */ \ f(GETXATTR, __CEPH_OSD_OP(RD, ATTR, 1), "getxattr") \ @@ -323,10 +318,6 @@ static inline int ceph_osd_op_type_pg(int op) { return (op & CEPH_OSD_OP_TYPE) == CEPH_OSD_OP_TYPE_PG; } -static inline int ceph_osd_op_type_multi(int op) -{ - return (op & CEPH_OSD_OP_TYPE) == CEPH_OSD_OP_TYPE_MULTI; -} static inline int ceph_osd_op_mode_subop(int op) { diff --git a/src/include/rados/librados.h b/src/include/rados/librados.h index 1b60e8e1c63e..d1610bd08306 100644 --- a/src/include/rados/librados.h +++ b/src/include/rados/librados.h @@ -942,9 +942,6 @@ CEPH_RADOS_API int rados_ioctx_get_pool_name(rados_ioctx_t io, char *buf, * operations of the io context - until a different locator key is * set, all objects in this io context will be placed in the same pg. * - * This is useful if you need to do clone_range operations, which must - * be done with the source and destination objects in the same pg. - * * @param io the io context to change * @param key the key to use as the object locator, or NULL to discard * any previously set key @@ -1391,28 +1388,6 @@ CEPH_RADOS_API int rados_writesame(rados_ioctx_t io, const char *oid, const char *buf, size_t data_len, size_t write_len, uint64_t off); -/** - * Efficiently copy a portion of one object to another - * - * If the underlying filesystem on the OSD supports it, this will be a - * copy-on-write clone. - * - * The src and dest objects must be in the same pg. To ensure this, - * the io context should have a locator key set (see - * rados_ioctx_locator_set_key()). - * - * @param io the context in which the data is cloned - * @param dst the name of the destination object - * @param dst_off the offset within the destination object (in bytes) - * @param src the name of the source object - * @param src_off the offset within the source object (in bytes) - * @param len how much data to copy - * @returns 0 on success, negative error code on failure - */ -CEPH_RADOS_API int rados_clone_range(rados_ioctx_t io, const char *dst, - uint64_t dst_off, const char *src, - uint64_t src_off, size_t len); - /** * Append *len* bytes from *buf* into the *oid* object. The value of * *len* must be <= UINT_MAX/2. diff --git a/src/include/rados/librados.hpp b/src/include/rados/librados.hpp index 674b1bafbaad..f1e95e3670a9 100644 --- a/src/include/rados/librados.hpp +++ b/src/include/rados/librados.hpp @@ -316,10 +316,6 @@ namespace librados void cmpxattr(const char *name, uint8_t op, const bufferlist& val); void cmpxattr(const char *name, uint8_t op, uint64_t v); - void src_cmpxattr(const std::string& src_oid, - const char *name, int op, const bufferlist& val); - void src_cmpxattr(const std::string& src_oid, - const char *name, int op, uint64_t v); void exec(const char *cls, const char *method, bufferlist& inbl); void exec(const char *cls, const char *method, bufferlist& inbl, bufferlist *obl, int *prval); void exec(const char *cls, const char *method, bufferlist& inbl, ObjectOperationCompletion *completion); @@ -397,9 +393,6 @@ namespace librados void setxattr(const char *name, const bufferlist& bl); void tmap_update(const bufferlist& cmdbl); void tmap_put(const bufferlist& bl); - void clone_range(uint64_t dst_off, - const std::string& src_oid, uint64_t src_off, - size_t len); void selfmanaged_snap_rollback(uint64_t snapid); /** @@ -709,9 +702,6 @@ namespace librados int write_full(const std::string& oid, bufferlist& bl); int writesame(const std::string& oid, bufferlist& bl, size_t write_len, uint64_t off); - int clone_range(const std::string& dst_oid, uint64_t dst_off, - const std::string& src_oid, uint64_t src_off, - size_t len); int read(const std::string& oid, bufferlist& bl, size_t len, uint64_t off); int remove(const std::string& oid); int remove(const std::string& oid, int flags); @@ -1127,7 +1117,6 @@ namespace librados // assert version for next sync operations void set_assert_version(uint64_t ver); - void set_assert_src_version(const std::string& o, uint64_t ver); /** * Pin/unpin an object in cache tier diff --git a/src/librados/IoCtxImpl.cc b/src/librados/IoCtxImpl.cc index 33cfc6d2327d..bdfac86d1840 100644 --- a/src/librados/IoCtxImpl.cc +++ b/src/librados/IoCtxImpl.cc @@ -650,12 +650,6 @@ int librados::IoCtxImpl::create(const object_t& oid, bool exclusive) assert_ver = 0; pop = op; } - while (!assert_src_version.empty()) { - map::iterator p = assert_src_version.begin(); - op->assert_src_version(p->first, CEPH_NOSNAP, p->second); - assert_src_version.erase(p); - pop = op; - } return pop; } @@ -709,18 +703,6 @@ int librados::IoCtxImpl::writesame(const object_t& oid, bufferlist& bl, return operate(oid, &op, NULL); } -int librados::IoCtxImpl::clone_range(const object_t& dst_oid, - uint64_t dst_offset, - const object_t& src_oid, - uint64_t src_offset, - uint64_t len) -{ - ::ObjectOperation wr; - prepare_assert_ops(&wr); - wr.clone_range(src_oid, src_offset, len, dst_offset); - return operate(dst_oid, &wr, NULL); -} - int librados::IoCtxImpl::operate(const object_t& oid, ::ObjectOperation *o, ceph::real_time *pmtime, int flags) { @@ -1790,11 +1772,6 @@ void librados::IoCtxImpl::set_assert_version(uint64_t ver) { assert_ver = ver; } -void librados::IoCtxImpl::set_assert_src_version(const object_t& oid, - uint64_t ver) -{ - assert_src_version[oid] = ver; -} void librados::IoCtxImpl::set_notify_timeout(uint32_t timeout) { diff --git a/src/librados/IoCtxImpl.h b/src/librados/IoCtxImpl.h index 0b8fa8605caf..9fa5a5030fae 100644 --- a/src/librados/IoCtxImpl.h +++ b/src/librados/IoCtxImpl.h @@ -35,7 +35,6 @@ struct librados::IoCtxImpl { snapid_t snap_seq; ::SnapContext snapc; uint64_t assert_ver; - map assert_src_version; version_t last_objver; uint32_t notify_timeout; object_locator_t oloc; @@ -59,7 +58,6 @@ struct librados::IoCtxImpl { snap_seq = rhs.snap_seq; snapc = rhs.snapc; assert_ver = rhs.assert_ver; - assert_src_version = rhs.assert_src_version; last_objver = rhs.last_objver; notify_timeout = rhs.notify_timeout; oloc = rhs.oloc; @@ -128,8 +126,6 @@ struct librados::IoCtxImpl { int write_full(const object_t& oid, bufferlist& bl); int writesame(const object_t& oid, bufferlist& bl, size_t write_len, uint64_t offset); - int clone_range(const object_t& dst_oid, uint64_t dst_offset, - const object_t& src_oid, uint64_t src_offset, uint64_t len); int read(const object_t& oid, bufferlist& bl, size_t len, uint64_t off); int mapext(const object_t& oid, uint64_t off, size_t len, std::map& m); @@ -266,7 +262,6 @@ struct librados::IoCtxImpl { version_t last_version(); void set_assert_version(uint64_t ver); - void set_assert_src_version(const object_t& oid, uint64_t ver); void set_notify_timeout(uint32_t timeout); int cache_pin(const object_t& oid); diff --git a/src/librados/librados.cc b/src/librados/librados.cc index 85d5f4bce5d2..1c994704c854 100644 --- a/src/librados/librados.cc +++ b/src/librados/librados.cc @@ -154,24 +154,6 @@ void librados::ObjectOperation::cmpxattr(const char *name, uint8_t op, uint64_t o->cmpxattr(name, op, CEPH_OSD_CMPXATTR_MODE_U64, bl); } -void librados::ObjectOperation::src_cmpxattr(const std::string& src_oid, - const char *name, int op, const bufferlist& v) -{ - ::ObjectOperation *o = &impl->o; - object_t oid(src_oid); - o->src_cmpxattr(oid, CEPH_NOSNAP, name, v, op, CEPH_OSD_CMPXATTR_MODE_STRING); -} - -void librados::ObjectOperation::src_cmpxattr(const std::string& src_oid, - const char *name, int op, uint64_t val) -{ - ::ObjectOperation *o = &impl->o; - object_t oid(src_oid); - bufferlist bl; - ::encode(val, bl); - o->src_cmpxattr(oid, CEPH_NOSNAP, name, bl, op, CEPH_OSD_CMPXATTR_MODE_U64); -} - void librados::ObjectOperation::assert_version(uint64_t ver) { ::ObjectOperation *o = &impl->o; @@ -527,14 +509,6 @@ void librados::ObjectWriteOperation::tmap_update(const bufferlist& cmdbl) o->tmap_update(c); } -void librados::ObjectWriteOperation::clone_range(uint64_t dst_off, - const std::string& src_oid, uint64_t src_off, - size_t len) -{ - ::ObjectOperation *o = &impl->o; - o->clone_range(src_oid, src_off, len, dst_off); -} - void librados::ObjectWriteOperation::selfmanaged_snap_rollback(snap_t snapid) { ::ObjectOperation *o = &impl->o; @@ -1207,13 +1181,6 @@ int librados::IoCtx::writesame(const std::string& oid, bufferlist& bl, return io_ctx_impl->writesame(obj, bl, write_len, off); } -int librados::IoCtx::clone_range(const std::string& dst_oid, uint64_t dst_off, - const std::string& src_oid, uint64_t src_off, - size_t len) -{ - object_t src(src_oid), dst(dst_oid); - return io_ctx_impl->clone_range(dst, dst_off, src, src_off, len); -} int librados::IoCtx::read(const std::string& oid, bufferlist& bl, size_t len, uint64_t off) { @@ -2097,24 +2064,6 @@ void librados::IoCtx::set_assert_version(uint64_t ver) io_ctx_impl->set_assert_version(ver); } -void librados::IoCtx::set_assert_src_version(const std::string& oid, uint64_t ver) -{ - object_t obj(oid); - io_ctx_impl->set_assert_src_version(obj, ver); -} - -int librados::IoCtx::cache_pin(const string& oid) -{ - object_t obj(oid); - return io_ctx_impl->cache_pin(obj); -} - -int librados::IoCtx::cache_unpin(const string& oid) -{ - object_t obj(oid); - return io_ctx_impl->cache_unpin(obj); -} - void librados::IoCtx::locator_set_key(const string& key) { io_ctx_impl->oloc.key = key; @@ -3492,17 +3441,6 @@ extern "C" int rados_writesame(rados_ioctx_t io, return retval; } -extern "C" int rados_clone_range(rados_ioctx_t io, const char *dst, uint64_t dst_off, - const char *src, uint64_t src_off, size_t len) -{ - tracepoint(librados, rados_clone_range_enter, io, dst, dst_off, src, src_off, len); - librados::IoCtxImpl *ctx = (librados::IoCtxImpl *)io; - object_t dst_oid(dst), src_oid(src); - int retval = ctx->clone_range(dst_oid, dst_off, src_oid, src_off, len); - tracepoint(librados, rados_clone_range_exit, retval); - return retval; -} - extern "C" int rados_trunc(rados_ioctx_t io, const char *o, uint64_t size) { tracepoint(librados, rados_trunc_enter, io, o, size); diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc index 0347b15117d9..4e983642225b 100644 --- a/src/osd/OSD.cc +++ b/src/osd/OSD.cc @@ -9335,11 +9335,9 @@ int OSD::init_op_flags(OpRequestRef& op) (iter->op.op != CEPH_OSD_OP_GETXATTR) && (iter->op.op != CEPH_OSD_OP_GETXATTRS) && (iter->op.op != CEPH_OSD_OP_CMPXATTR) && - (iter->op.op != CEPH_OSD_OP_SRC_CMPXATTR) && (iter->op.op != CEPH_OSD_OP_ASSERT_VER) && (iter->op.op != CEPH_OSD_OP_LIST_WATCHERS) && (iter->op.op != CEPH_OSD_OP_LIST_SNAPS) && - (iter->op.op != CEPH_OSD_OP_ASSERT_SRC_VERSION) && (iter->op.op != CEPH_OSD_OP_SETALLOCHINT) && (iter->op.op != CEPH_OSD_OP_WRITEFULL) && (iter->op.op != CEPH_OSD_OP_ROLLBACK) && diff --git a/src/osd/PrimaryLogPG.cc b/src/osd/PrimaryLogPG.cc index 496947000bc1..81707e8590b9 100644 --- a/src/osd/PrimaryLogPG.cc +++ b/src/osd/PrimaryLogPG.cc @@ -1694,38 +1694,6 @@ hobject_t PrimaryLogPG::earliest_backfill() const return e; } -// if we have src_oids, we need to be careful of the target being -// before and a src being after the last_backfill line, or else the -// operation won't apply properly on the backfill_target. (the -// opposite is not a problem; if the target is after the line, we -// don't apply on the backfill_target and it doesn't matter.) -// With multi-backfill some backfill targets can be ahead of -// last_backfill_started. We consider each replica individually and -// take the larger of last_backfill_started and the replicas last_backfill. -bool PrimaryLogPG::check_src_targ(const hobject_t& soid, const hobject_t& toid) const -{ - for (set::iterator i = actingbackfill.begin(); - i != actingbackfill.end(); - ++i) { - if (*i == get_primary()) continue; - pg_shard_t bt = *i; - map::const_iterator iter = peer_info.find(bt); - assert(iter != peer_info.end()); - - hobject_t max; - if (cmp(last_backfill_started, iter->second.last_backfill, - get_sort_bitwise()) > 0) - max = last_backfill_started; - else - max = iter->second.last_backfill; - - if (cmp(toid, max, get_sort_bitwise()) <= 0 && - cmp(soid, max, get_sort_bitwise()) > 0) - return true; - } - return false; -} - /** do_op - do an op * pg lock will be held (if multithreaded) * osd_lock NOT held. @@ -2099,16 +2067,6 @@ void PrimaryLogPG::do_op(OpRequestRef& op) dout(25) << __func__ << " oi " << obc->obs.oi << dendl; - // are writes blocked by another object? - if (obc->blocked_by) { - dout(10) << "do_op writes for " << obc->obs.oi.soid << " blocked by " - << obc->blocked_by->obs.oi.soid << dendl; - wait_for_degraded_object(obc->blocked_by->obs.oi.soid, op); - return; - } - - // src_oids - map src_obc; for (vector::iterator p = m->ops.begin(); p != m->ops.end(); ++p) { OSDOp& osd_op = *p; @@ -2119,70 +2077,11 @@ void PrimaryLogPG::do_op(OpRequestRef& op) osd->reply_op_error(op, -EINVAL); return; } - - if (!ceph_osd_op_type_multi(osd_op.op.op)) - continue; - if (osd_op.soid.oid.name.length()) { - object_locator_t src_oloc; - get_src_oloc(m->get_oid(), m->get_object_locator(), src_oloc); - hobject_t src_oid(osd_op.soid, src_oloc.key, m->get_pg().ps(), - info.pgid.pool(), m->get_object_locator().nspace); - if (!src_obc.count(src_oid)) { - ObjectContextRef sobc; - hobject_t wait_oid; - int r; - - if (src_oid.is_head() && is_missing_object(src_oid)) { - wait_for_unreadable_object(src_oid, op); - } else if ((r = find_object_context( - src_oid, &sobc, false, false, - &wait_oid)) == -EAGAIN) { - // missing the specific snap we need; requeue and wait. - wait_for_unreadable_object(wait_oid, op); - } else if (r) { - if (!maybe_handle_cache(op, write_ordered, sobc, r, wait_oid, true)) - osd->reply_op_error(op, r); - } else if (sobc->obs.oi.is_whiteout()) { - osd->reply_op_error(op, -ENOENT); - } else { - if (sobc->obs.oi.soid.get_key() != obc->obs.oi.soid.get_key() && - sobc->obs.oi.soid.get_key() != obc->obs.oi.soid.oid.name && - sobc->obs.oi.soid.oid.name != obc->obs.oi.soid.get_key()) { - dout(1) << " src_oid " << sobc->obs.oi.soid << " != " - << obc->obs.oi.soid << dendl; - osd->reply_op_error(op, -EINVAL); - } else if (is_degraded_or_backfilling_object(sobc->obs.oi.soid) || - (check_src_targ(sobc->obs.oi.soid, obc->obs.oi.soid))) { - if (is_degraded_or_backfilling_object(sobc->obs.oi.soid)) { - wait_for_degraded_object(sobc->obs.oi.soid, op); - } else { - waiting_for_degraded_object[sobc->obs.oi.soid].push_back(op); - op->mark_delayed("waiting for degraded object"); - } - dout(10) << " writes for " << obc->obs.oi.soid << " now blocked by " - << sobc->obs.oi.soid << dendl; - obc->blocked_by = sobc; - sobc->blocking.insert(obc); - } else { - dout(10) << " src_oid " << src_oid << " obc " << src_obc << dendl; - src_obc[src_oid] = sobc; - continue; - } - } - // Error cleanup below - } else { - continue; - } - // Error cleanup below - } else { - dout(10) << "no src oid specified for multi op " << osd_op << dendl; - osd->reply_op_error(op, -EINVAL); - } - return; } // any SNAPDIR op needs to have all clones present. treat them as // src_obc's so that we track references properly and clean up later. + map src_obc; if (m->get_snapid() == CEPH_SNAPDIR) { for (vector::iterator p = obc->ssc->snapset.clones.begin(); p != obc->ssc->snapset.clones.end(); @@ -4319,18 +4218,6 @@ int PrimaryLogPG::do_osd_ops(OpContext *ctx, vector& ops) ctx->user_modify = true; } - ObjectContextRef src_obc; - if (ceph_osd_op_type_multi(op.op)) { - MOSDOp *m = static_cast(ctx->op->get_req()); - object_locator_t src_oloc; - get_src_oloc(soid.oid, m->get_object_locator(), src_oloc); - hobject_t src_oid(osd_op.soid, src_oloc.key, soid.get_hash(), - info.pgid.pool(), src_oloc.nspace); - src_obc = ctx->src_obc[src_oid]; - dout(10) << " src_oid " << src_oid << " obc " << src_obc << dendl; - assert(src_obc); - } - // munge -1 truncate to 0 truncate if (ceph_osd_op_uses_extent(op.op) && op.extent.truncate_seq == 1 && @@ -4862,7 +4749,6 @@ int PrimaryLogPG::do_osd_ops(OpContext *ctx, vector& ops) break; case CEPH_OSD_OP_CMPXATTR: - case CEPH_OSD_OP_SRC_CMPXATTR: ++ctx->num_read; { string aname; @@ -4872,23 +4758,15 @@ int PrimaryLogPG::do_osd_ops(OpContext *ctx, vector& ops) name[op.xattr.name_len + 1] = 0; bufferlist xattr; - if (obs.exists) { - if (op.op == CEPH_OSD_OP_CMPXATTR) - result = getattr_maybe_cache( - ctx->obc, - name, - &xattr); - else - result = getattr_maybe_cache( - src_obc, - name, - &xattr); - if (result < 0 && result != -ENODATA) - break; - - ctx->delta_stats.num_rd++; - ctx->delta_stats.num_rd_kb += SHIFT_ROUND_UP(xattr.length(), 10); - } + result = getattr_maybe_cache( + ctx->obc, + name, + &xattr); + if (result < 0 && result != -EEXIST && result != -ENODATA) + break; + + ctx->delta_stats.num_rd++; + ctx->delta_stats.num_rd_kb += SHIFT_ROUND_UP(xattr.length(), 10); switch (op.xattr.cmp_mode) { case CEPH_OSD_CMPXATTR_MODE_STRING: @@ -5060,20 +4938,6 @@ int PrimaryLogPG::do_osd_ops(OpContext *ctx, vector& ops) break; } - case CEPH_OSD_OP_ASSERT_SRC_VERSION: - ++ctx->num_read; - { - uint64_t ver = op.assert_ver.ver; - tracepoint(osd, do_osd_op_pre_assert_src_version, soid.oid.name.c_str(), soid.snap.val, ver); - if (!ver) - result = -EINVAL; - else if (ver < src_obc->obs.oi.user_version) - result = -ERANGE; - else if (ver > src_obc->obs.oi.user_version) - result = -EOVERFLOW; - break; - } - case CEPH_OSD_OP_NOTIFY: ++ctx->num_read; { @@ -5399,34 +5263,6 @@ int PrimaryLogPG::do_osd_ops(OpContext *ctx, vector& ops) result = _delete_oid(ctx, ctx->ignore_cache); break; - case CEPH_OSD_OP_CLONERANGE: - tracepoint(osd, do_osd_op_pre_clonerange, soid.oid.name.c_str(), soid.snap.val, op.clonerange.offset, op.clonerange.length, op.clonerange.src_offset); - if (pool.info.require_rollback()) { - result = -EOPNOTSUPP; - break; - } - ++ctx->num_read; - ++ctx->num_write; - { - maybe_create_new_object(ctx); - if (op.clonerange.src_offset + op.clonerange.length > src_obc->obs.oi.size) { - dout(10) << " clonerange source " << osd_op.soid << " " - << op.clonerange.src_offset << "~" << op.clonerange.length - << " extends past size " << src_obc->obs.oi.size << dendl; - result = -EINVAL; - break; - } - t->clone_range(src_obc->obs.oi.soid, - obs.oi.soid, op.clonerange.src_offset, - op.clonerange.length, op.clonerange.offset); - - obs.oi.clear_data_digest(); - - write_update_size_and_usage(ctx->delta_stats, oi, ctx->modified_ranges, - op.clonerange.offset, op.clonerange.length, false); - } - break; - case CEPH_OSD_OP_WATCH: ++ctx->num_write; { @@ -9591,14 +9427,6 @@ void PrimaryLogPG::finish_degraded_object(const hobject_t& oid) { dout(10) << "finish_degraded_object " << oid << dendl; ObjectContextRef obc(object_contexts.lookup(oid)); - if (obc) { - for (set::iterator j = obc->blocking.begin(); - j != obc->blocking.end(); - obc->blocking.erase(j++)) { - dout(10) << " no longer blocking writes for " << (*j)->obs.oi.soid << dendl; - (*j)->blocked_by = ObjectContextRef(); - } - } if (callbacks_for_degraded_object.count(oid)) { list contexts; contexts.swap(callbacks_for_degraded_object[oid]); diff --git a/src/osd/osd_types.cc b/src/osd/osd_types.cc index 547f4cfd6bb4..20235bd6c49e 100644 --- a/src/osd/osd_types.cc +++ b/src/osd/osd_types.cc @@ -5409,28 +5409,6 @@ ostream& operator<<(ostream& out, const OSDOp& op) case CEPH_OSD_OP_SCRUBLS: break; } - } else if (ceph_osd_op_type_multi(op.op.op)) { - switch (op.op.op) { - case CEPH_OSD_OP_CLONERANGE: - out << " " << op.op.clonerange.offset << "~" << op.op.clonerange.length - << " from " << op.soid - << " offset " << op.op.clonerange.src_offset; - break; - case CEPH_OSD_OP_ASSERT_SRC_VERSION: - out << " v" << op.op.watch.ver - << " of " << op.soid; - break; - case CEPH_OSD_OP_SRC_CMPXATTR: - out << " " << op.soid; - if (op.op.xattr.name_len && op.indata.length()) { - out << " "; - op.indata.write(0, op.op.xattr.name_len, out); - } - if (op.op.xattr.value_len) - out << " (" << op.op.xattr.value_len << ")"; - out << " op " << (int)op.op.xattr.cmp_op << " mode " << (int)op.op.xattr.cmp_mode; - break; - } } return out; } @@ -5440,9 +5418,6 @@ void OSDOp::split_osd_op_vector_in_data(vector& ops, bufferlist& in) { bufferlist::iterator datap = in.begin(); for (unsigned i = 0; i < ops.size(); i++) { - if (ceph_osd_op_type_multi(ops[i].op.op)) { - ::decode(ops[i].soid, datap); - } if (ops[i].op.payload_len) { datap.copy(ops[i].op.payload_len, ops[i].indata); } @@ -5452,9 +5427,6 @@ void OSDOp::split_osd_op_vector_in_data(vector& ops, bufferlist& in) void OSDOp::merge_osd_op_vector_in_data(vector& ops, bufferlist& out) { for (unsigned i = 0; i < ops.size(); i++) { - if (ceph_osd_op_type_multi(ops[i].op.op)) { - ::encode(ops[i].soid, out); - } if (ops[i].indata.length()) { ops[i].op.payload_len = ops[i].indata.length(); out.append(ops[i].indata); diff --git a/src/osd/osd_types.h b/src/osd/osd_types.h index 212a32ef5a1c..8a30b287856b 100644 --- a/src/osd/osd_types.h +++ b/src/osd/osd_types.h @@ -4137,10 +4137,6 @@ public: int unstable_writes, readers, writers_waiting, readers_waiting; - // set if writes for this object are blocked on another objects recovery - ObjectContextRef blocked_by; // object blocking our writes - set blocking; // objects whose writes we block - // any entity in obs.oi.watchers MUST be in either watchers or unconnected_watchers. map, WatchRef> watchers; diff --git a/src/osdc/Objecter.cc b/src/osdc/Objecter.cc index 2227795a111f..87bd9c4a6ca9 100644 --- a/src/osdc/Objecter.cc +++ b/src/osdc/Objecter.cc @@ -2235,7 +2235,6 @@ void Objecter::_send_op_account(Op *op) case CEPH_OSD_OP_DELETE: code = l_osdc_osdop_delete; break; case CEPH_OSD_OP_MAPEXT: code = l_osdc_osdop_mapext; break; case CEPH_OSD_OP_SPARSE_READ: code = l_osdc_osdop_sparse_read; break; - case CEPH_OSD_OP_CLONERANGE: code = l_osdc_osdop_clonerange; break; case CEPH_OSD_OP_GETXATTR: code = l_osdc_osdop_getxattr; break; case CEPH_OSD_OP_SETXATTR: code = l_osdc_osdop_setxattr; break; case CEPH_OSD_OP_CMPXATTR: code = l_osdc_osdop_cmpxattr; break; @@ -2263,7 +2262,6 @@ void Objecter::_send_op_account(Op *op) case CEPH_OSD_OP_CALL: code = l_osdc_osdop_call; break; case CEPH_OSD_OP_WATCH: code = l_osdc_osdop_watch; break; case CEPH_OSD_OP_NOTIFY: code = l_osdc_osdop_notify; break; - case CEPH_OSD_OP_SRC_CMPXATTR: code = l_osdc_osdop_src_cmpxattr; break; } if (code) logger->inc(code); diff --git a/src/osdc/Objecter.h b/src/osdc/Objecter.h index ef1b3ff9b14f..5dc77d000ca6 100644 --- a/src/osdc/Objecter.h +++ b/src/osdc/Objecter.h @@ -119,15 +119,6 @@ struct ObjectOperation { osd_op.op.writesame.data_length = bl.length(); osd_op.indata.claim_append(bl); } - void add_clone_range(int op, uint64_t off, uint64_t len, - const object_t& srcoid, uint64_t srcoff, - snapid_t srcsnapid) { - OSDOp& osd_op = add_op(op); - osd_op.op.clonerange.offset = off; - osd_op.op.clonerange.length = len; - osd_op.op.clonerange.src_offset = srcoff; - osd_op.soid = sobject_t(srcoid, srcsnapid); - } void add_xattr(int op, const char *name, const bufferlist& data) { OSDOp& osd_op = add_op(op); osd_op.op.xattr.name_len = (name ? strlen(name) : 0); @@ -376,12 +367,6 @@ struct ObjectOperation { add_data(CEPH_OSD_OP_SPARSE_READ, off, len, bl); } - void clone_range(const object_t& src_oid, uint64_t src_offset, uint64_t len, - uint64_t dst_offset) { - add_clone_range(CEPH_OSD_OP_CLONERANGE, dst_offset, len, src_oid, - src_offset, CEPH_NOSNAP); - } - // object attrs void getxattr(const char *name, bufferlist *pbl, int *prval) { bufferlist bl; @@ -978,12 +963,6 @@ struct ObjectOperation { OSDOp& osd_op = add_op(CEPH_OSD_OP_ASSERT_VER); osd_op.op.assert_ver.ver = ver; } - void assert_src_version(const object_t& srcoid, snapid_t srcsnapid, - uint64_t ver) { - OSDOp& osd_op = add_op(CEPH_OSD_OP_ASSERT_SRC_VERSION); - osd_op.op.assert_ver.ver = ver; - ops.rbegin()->soid = sobject_t(srcoid, srcsnapid); - } void cmpxattr(const char *name, const bufferlist& val, int op, int mode) { @@ -992,15 +971,6 @@ struct ObjectOperation { o.op.xattr.cmp_op = op; o.op.xattr.cmp_mode = mode; } - void src_cmpxattr(const object_t& srcoid, snapid_t srcsnapid, - const char *name, const bufferlist& val, - int op, int mode) { - add_xattr(CEPH_OSD_OP_SRC_CMPXATTR, name, val); - OSDOp& o = *ops.rbegin(); - o.soid = sobject_t(srcoid, srcsnapid); - o.op.xattr.cmp_op = op; - o.op.xattr.cmp_mode = mode; - } void rollback(uint64_t snapid) { OSDOp& osd_op = add_op(CEPH_OSD_OP_ROLLBACK); diff --git a/src/test/librados/misc.cc b/src/test/librados/misc.cc index 361db602cf54..769480e0c401 100644 --- a/src/test/librados/misc.cc +++ b/src/test/librados/misc.cc @@ -659,31 +659,6 @@ TEST_F(LibRadosMiscPP, AioOperatePP) { ASSERT_EQ(1024U, size); } -TEST_F(LibRadosMiscPP, CloneRangePP) { - char buf[64]; - memset(buf, 0xcc, sizeof(buf)); - bufferlist bl; - bl.append(buf, sizeof(buf)); - ASSERT_EQ(0, ioctx.write("foo", bl, sizeof(buf), 0)); - ioctx.locator_set_key("foo"); - ASSERT_EQ(0, ioctx.clone_range("bar", 0, "foo", 0, sizeof(buf))); - bufferlist bl2; - ASSERT_EQ(sizeof(buf), (size_t)ioctx.read("bar", bl2, sizeof(buf), 0)); - ASSERT_EQ(0, memcmp(buf, bl2.c_str(), sizeof(buf))); -} - -TEST_F(LibRadosMisc, CloneRange) { - char buf[128]; - memset(buf, 0xcc, sizeof(buf)); - ASSERT_EQ(0, rados_write(ioctx, "src", buf, sizeof(buf), 0)); - rados_ioctx_locator_set_key(ioctx, "src"); - ASSERT_EQ(0, rados_clone_range(ioctx, "dst", 0, "src", 0, sizeof(buf))); - char buf2[sizeof(buf)]; - memset(buf2, 0, sizeof(buf2)); - ASSERT_EQ((int)sizeof(buf2), rados_read(ioctx, "dst", buf2, sizeof(buf2), 0)); - ASSERT_EQ(0, memcmp(buf, buf2, sizeof(buf))); -} - TEST_F(LibRadosMiscPP, AssertExistsPP) { char buf[64]; memset(buf, 0xcc, sizeof(buf)); diff --git a/src/tools/rados/rados.cc b/src/tools/rados/rados.cc index 28b08ba77ca0..13513bb9bff6 100644 --- a/src/tools/rados/rados.cc +++ b/src/tools/rados/rados.cc @@ -92,7 +92,6 @@ void usage(ostream& out) " create create object\n" " rm ...[--force-full] [force no matter full or not]remove object(s)\n" " cp [target-obj] copy object\n" -" clonedata clone object data\n" " listxattr \n" " getxattr attr\n" " setxattr attr val\n" @@ -335,26 +334,6 @@ static int do_copy(IoCtx& io_ctx, const char *objname, return target_ctx.operate(target_obj, &op); } -static int do_clone_data(IoCtx& io_ctx, const char *objname, IoCtx& target_ctx, const char *target_obj) -{ - string oid(objname); - - // get size - uint64_t size; - int r = target_ctx.stat(oid, &size, NULL); - if (r < 0) - return r; - - librados::ObjectWriteOperation write_op; - string target_oid(target_obj); - - /* reset data stream only */ - write_op.create(false); - write_op.truncate(0); - write_op.clone_range(0, oid, 0, size); - return target_ctx.operate(target_oid, &write_op); -} - static int do_copy_pool(Rados& rados, const char *src_pool, const char *target_pool) { IoCtx src_ctx, target_ctx; @@ -2639,55 +2618,6 @@ static int rados_tool_common(const std::map < std::string, std::string > &opts, cerr << "error copying " << pool_name << "/" << nargs[1] << " => " << target << "/" << target_obj << ": " << cpp_strerror(ret) << std::endl; goto out; } - } - else if (strcmp(nargs[0], "clonedata") == 0) { - if (!pool_name) - usage_exit(); - - if (nargs.size() < 2 || nargs.size() > 3) - usage_exit(); - - const char *target = target_pool_name; - if (!target) - target = pool_name; - - const char *target_obj; - if (nargs.size() < 3) { - if (strcmp(target, pool_name) == 0) { - cerr << "cannot copy object into itself" << std::endl; - ret = -1; - goto out; - } - target_obj = nargs[1]; - } else { - target_obj = nargs[2]; - } - - // open io context. - IoCtx target_ctx; - ret = rados.ioctx_create(target, target_ctx); - if (ret < 0) { - cerr << "error opening target pool " << target << ": " - << cpp_strerror(ret) << std::endl; - goto out; - } - if (oloc.size()) { - target_ctx.locator_set_key(oloc); - } else { - cerr << "must specify locator for clone" << std::endl; - ret = -1; - goto out; - } - if (nspace.size()) - target_ctx.set_namespace(nspace); - - ret = do_clone_data(io_ctx, nargs[1], target_ctx, target_obj); - if (ret < 0) { - string src_name = (nspace.size() ? nspace + "/" : "") + nargs[1]; - string target_name = (nspace.size() ? nspace + "/" : "") + target_obj; - cerr << "error cloning " << pool_name << ">" << src_name << " => " << target << ">" << target_name << ": " << cpp_strerror(ret) << std::endl; - goto out; - } } else if (strcmp(nargs[0], "rm") == 0) { if (!pool_name || nargs.size() < 2) usage_exit(); diff --git a/src/tools/scratchtoolpp.cc b/src/tools/scratchtoolpp.cc index f622d7a1eed8..f91424467878 100644 --- a/src/tools/scratchtoolpp.cc +++ b/src/tools/scratchtoolpp.cc @@ -190,13 +190,6 @@ int main(int argc, const char **argv) r = io_ctx.read(oid, bl, 0, 1); assert(r == -EOVERFLOW); - // test assert_src_version - r = io_ctx.read(oid, bl, 0, 1); - assert(r >= 0); - v = io_ctx.get_last_version(); - cout << oid << " version is " << v << std::endl; - io_ctx.set_assert_src_version(oid, v); - r = io_ctx.exec(oid, "crypto", "sha1", bl, bl2); cout << "exec returned " << r << std::endl; const unsigned char *sha1 = (const unsigned char *)bl2.c_str(); @@ -267,29 +260,8 @@ int main(int argc, const char **argv) assert(r == -ECANCELED); } - cout << "src_cmpxattr" << std::endl; - const char *oidb = "bar-clone"; - { - ObjectWriteOperation o; - o.src_cmpxattr(oid, "foo", CEPH_OSD_CMPXATTR_OP_EQ, val); - io_ctx.locator_set_key(oid); - o.write_full(val); - r = io_ctx.operate(oidb, &o); - cout << " got " << r << " wanted " << -ECANCELED << " (-ECANCELED)" << std::endl; - assert(r == -ECANCELED); - } - { - ObjectWriteOperation o; - o.src_cmpxattr(oid, "foo", CEPH_OSD_CMPXATTR_OP_NE, val); - io_ctx.locator_set_key(oid); - o.write_full(val); - r = io_ctx.operate(oidb, &o); - cout << " got " << r << " wanted >= 0" << std::endl; - assert(r >= 0); - } io_ctx.locator_set_key(string()); - cout << "iterating over objects..." << std::endl; int num_objs = 0; for (NObjectIterator iter = io_ctx.nobjects_begin(); diff --git a/src/tracing/librados.tp b/src/tracing/librados.tp index caa59959c06c..f56064cf0a14 100644 --- a/src/tracing/librados.tp +++ b/src/tracing/librados.tp @@ -876,32 +876,6 @@ TRACEPOINT_EVENT(librados, rados_writesame_exit, ) ) -TRACEPOINT_EVENT(librados, rados_clone_range_enter, - TP_ARGS( - rados_ioctx_t, ioctx, - const char*, dst, - uint64_t, dst_off, - const char*, src, - uint64_t, src_off, - size_t, len), - TP_FIELDS( - ctf_integer_hex(rados_ioctx_t, ioctx, ioctx) - ctf_string(dst, dst) - ctf_integer(uint64_t, dst_off, dst_off) - ctf_string(src, src) - ctf_integer(uint64_t, src_off, src_off) - ctf_integer(size_t, len, len) - ) -) - -TRACEPOINT_EVENT(librados, rados_clone_range_exit, - TP_ARGS( - int, retval), - TP_FIELDS( - ctf_integer(int, retval, retval) - ) -) - TRACEPOINT_EVENT(librados, rados_trunc_enter, TP_ARGS( rados_ioctx_t, ioctx,