mirror of
https://github.com/ceph/ceph
synced 2025-02-23 02:57:21 +00:00
osd: extract do_cmp_xattr()
to consolidate the logic to dispatch by op. Signed-off-by: Kefu Chai <kchai@redhat.com>
This commit is contained in:
parent
6e8fbc1373
commit
9fa07cb89e
@ -4900,6 +4900,31 @@ void PrimaryLogPG::snap_trimmer(epoch_t queued)
|
||||
return;
|
||||
}
|
||||
|
||||
namespace {
|
||||
|
||||
template<typename U, typename V>
|
||||
int do_cmp_xattr(int op, const U& lhs, const V& rhs)
|
||||
{
|
||||
switch (op) {
|
||||
case CEPH_OSD_CMPXATTR_OP_EQ:
|
||||
return lhs == rhs;
|
||||
case CEPH_OSD_CMPXATTR_OP_NE:
|
||||
return lhs != rhs;
|
||||
case CEPH_OSD_CMPXATTR_OP_GT:
|
||||
return lhs > rhs;
|
||||
case CEPH_OSD_CMPXATTR_OP_GTE:
|
||||
return lhs >= rhs;
|
||||
case CEPH_OSD_CMPXATTR_OP_LT:
|
||||
return lhs < rhs;
|
||||
case CEPH_OSD_CMPXATTR_OP_LTE:
|
||||
return lhs <= rhs;
|
||||
default:
|
||||
return -EINVAL;
|
||||
}
|
||||
}
|
||||
|
||||
} // anonymous namespace
|
||||
|
||||
int PrimaryLogPG::do_xattr_cmp_u64(int op, __u64 v1, bufferlist& xattr)
|
||||
{
|
||||
__u64 v2;
|
||||
@ -4911,47 +4936,14 @@ int PrimaryLogPG::do_xattr_cmp_u64(int op, __u64 v1, bufferlist& xattr)
|
||||
v2 = 0;
|
||||
|
||||
dout(20) << "do_xattr_cmp_u64 '" << v1 << "' vs '" << v2 << "' op " << op << dendl;
|
||||
|
||||
switch (op) {
|
||||
case CEPH_OSD_CMPXATTR_OP_EQ:
|
||||
return (v1 == v2);
|
||||
case CEPH_OSD_CMPXATTR_OP_NE:
|
||||
return (v1 != v2);
|
||||
case CEPH_OSD_CMPXATTR_OP_GT:
|
||||
return (v1 > v2);
|
||||
case CEPH_OSD_CMPXATTR_OP_GTE:
|
||||
return (v1 >= v2);
|
||||
case CEPH_OSD_CMPXATTR_OP_LT:
|
||||
return (v1 < v2);
|
||||
case CEPH_OSD_CMPXATTR_OP_LTE:
|
||||
return (v1 <= v2);
|
||||
default:
|
||||
return -EINVAL;
|
||||
}
|
||||
return do_cmp_xattr(op, v1, v2);
|
||||
}
|
||||
|
||||
int PrimaryLogPG::do_xattr_cmp_str(int op, string& v1s, bufferlist& xattr)
|
||||
{
|
||||
string v2s(xattr.c_str(), xattr.length());
|
||||
|
||||
string_view v2s(xattr.c_str(), xattr.length());
|
||||
dout(20) << "do_xattr_cmp_str '" << v1s << "' vs '" << v2s << "' op " << op << dendl;
|
||||
|
||||
switch (op) {
|
||||
case CEPH_OSD_CMPXATTR_OP_EQ:
|
||||
return (v1s.compare(v2s) == 0);
|
||||
case CEPH_OSD_CMPXATTR_OP_NE:
|
||||
return (v1s.compare(v2s) != 0);
|
||||
case CEPH_OSD_CMPXATTR_OP_GT:
|
||||
return (v1s.compare(v2s) > 0);
|
||||
case CEPH_OSD_CMPXATTR_OP_GTE:
|
||||
return (v1s.compare(v2s) >= 0);
|
||||
case CEPH_OSD_CMPXATTR_OP_LT:
|
||||
return (v1s.compare(v2s) < 0);
|
||||
case CEPH_OSD_CMPXATTR_OP_LTE:
|
||||
return (v1s.compare(v2s) <= 0);
|
||||
default:
|
||||
return -EINVAL;
|
||||
}
|
||||
return do_cmp_xattr(op, v1s, v2s);
|
||||
}
|
||||
|
||||
int PrimaryLogPG::do_writesame(OpContext *ctx, OSDOp& osd_op)
|
||||
|
Loading…
Reference in New Issue
Block a user