There are a few name collisions between Windows headers and ceph.
Where possible, we'll update Ceph code to avoid redefinitions.
The following names overlap with Windows headers:
* ERROR, NO_ERROR
* DELETE
* LocalLock
* LOCK_SHARED, LOCK_EXCLUSIVE
Signed-off-by: Lucian Petrut <lpetrut@cloudbasesolutions.com>
void Lock::assert_locked_shared(ObjectOperation *op)
{
- assert_locked(op, name, LOCK_SHARED, cookie, tag);
+ assert_locked(op, name, ClsLockType::SHARED, cookie, tag);
}
void Lock::assert_locked_exclusive(ObjectOperation *op)
{
- assert_locked(op, name, LOCK_EXCLUSIVE, cookie, tag);
+ assert_locked(op, name, ClsLockType::EXCLUSIVE, cookie, tag);
}
void Lock::assert_locked_exclusive_ephemeral(ObjectOperation *op)
{
- assert_locked(op, name, LOCK_EXCLUSIVE_EPHEMERAL, cookie, tag);
+ assert_locked(op, name, ClsLockType::EXCLUSIVE_EPHEMERAL, cookie, tag);
}
void Lock::lock_shared(ObjectWriteOperation *op)
{
- lock(op, name, LOCK_SHARED,
+ lock(op, name, ClsLockType::SHARED,
cookie, tag, description, duration, flags);
}
int Lock::lock_shared(IoCtx *ioctx, const std::string& oid)
{
- return lock(ioctx, oid, name, LOCK_SHARED,
+ return lock(ioctx, oid, name, ClsLockType::SHARED,
cookie, tag, description, duration, flags);
}
void Lock::lock_exclusive(ObjectWriteOperation *op)
{
- lock(op, name, LOCK_EXCLUSIVE,
+ lock(op, name, ClsLockType::EXCLUSIVE,
cookie, tag, description, duration, flags);
}
int Lock::lock_exclusive(IoCtx *ioctx, const std::string& oid)
{
- return lock(ioctx, oid, name, LOCK_EXCLUSIVE,
+ return lock(ioctx, oid, name, ClsLockType::EXCLUSIVE,
cookie, tag, description, duration, flags);
}
void Lock::lock_exclusive_ephemeral(ObjectWriteOperation *op)
{
- lock(op, name, LOCK_EXCLUSIVE_EPHEMERAL,
+ lock(op, name, ClsLockType::EXCLUSIVE_EPHEMERAL,
cookie, tag, description, duration, flags);
}
int Lock::lock_exclusive_ephemeral(IoCtx *ioctx, const std::string& oid)
{
- return lock(ioctx, oid, name, LOCK_EXCLUSIVE_EPHEMERAL,
+ return lock(ioctx, oid, name, ClsLockType::EXCLUSIVE_EPHEMERAL,
cookie, tag, description, duration, flags);
}
{
cls_lock_lock_op *i = new cls_lock_lock_op;
i->name = "name";
- i->type = LOCK_SHARED;
+ i->type = ClsLockType::SHARED;
i->cookie = "cookie";
i->tag = "tag";
i->description = "description";
void cls_lock_get_info_reply::generate_test_instances(list<cls_lock_get_info_reply*>& o)
{
cls_lock_get_info_reply *i = new cls_lock_get_info_reply;
- i->lock_type = LOCK_SHARED;
+ i->lock_type = ClsLockType::SHARED;
i->tag = "tag";
locker_id_t id1, id2;
entity_addr_t addr1, addr2;
{
cls_lock_assert_op *i = new cls_lock_assert_op;
i->name = "name";
- i->type = LOCK_SHARED;
+ i->type = ClsLockType::SHARED;
i->cookie = "cookie";
i->tag = "tag";
o.push_back(i);
{
cls_lock_set_cookie_op *i = new cls_lock_set_cookie_op;
i->name = "name";
- i->type = LOCK_SHARED;
+ i->type = ClsLockType::SHARED;
i->cookie = "cookie";
i->tag = "tag";
i->new_cookie = "new cookie";
utime_t duration;
uint8_t flags;
- cls_lock_lock_op() : type(LOCK_NONE), flags(0) {}
+ cls_lock_lock_op() : type(ClsLockType::NONE), flags(0) {}
void encode(ceph::buffer::list &bl) const {
ENCODE_START(1, 1, bl);
ClsLockType lock_type;
std::string tag;
- cls_lock_get_info_reply() : lock_type(LOCK_NONE) {}
+ cls_lock_get_info_reply() : lock_type(ClsLockType::NONE) {}
void encode(ceph::buffer::list &bl, uint64_t features) const {
ENCODE_START(1, 1, bl);
std::string cookie;
std::string tag;
- cls_lock_assert_op() : type(LOCK_NONE) {}
+ cls_lock_assert_op() : type(ClsLockType::NONE) {}
void encode(ceph::buffer::list &bl) const {
ENCODE_START(1, 1, bl);
std::string tag;
std::string new_cookie;
- cls_lock_set_cookie_op() : type(LOCK_NONE) {}
+ cls_lock_set_cookie_op() : type(ClsLockType::NONE) {}
void encode(ceph::buffer::list &bl) const {
ENCODE_START(1, 1, bl);
void lock_info_t::dump(ceph::Formatter *f) const
{
- f->dump_int("lock_type", lock_type);
+ f->dump_int("lock_type", static_cast<int>(lock_type));
f->dump_string("tag", tag);
f->open_array_section("lockers");
for (auto &i : lockers) {
generate_test_addr(info.addr, 1, 2);
info.description = "description";
i->lockers[id] = info;
- i->lock_type = LOCK_EXCLUSIVE;
+ i->lock_type = ClsLockType::EXCLUSIVE;
i->tag = "tag";
o.push_back(i);
o.push_back(new lock_info_t);
#define LOCK_FLAG_MAY_RENEW 0x1 /* idempotent lock acquire */
#define LOCK_FLAG_MUST_RENEW 0x2 /* lock must already be acquired */
-enum ClsLockType {
- LOCK_NONE = 0,
- LOCK_EXCLUSIVE = 1,
- LOCK_SHARED = 2,
- LOCK_EXCLUSIVE_EPHEMERAL = 3, /* lock object is removed @ unlock */
+enum class ClsLockType {
+ NONE = 0,
+ EXCLUSIVE = 1,
+ SHARED = 2,
+ EXCLUSIVE_EPHEMERAL = 3, /* lock object is removed @ unlock */
};
inline const char *cls_lock_type_str(ClsLockType type)
{
switch (type) {
- case LOCK_NONE:
+ case ClsLockType::NONE:
return "none";
- case LOCK_EXCLUSIVE:
+ case ClsLockType::EXCLUSIVE:
return "exclusive";
- case LOCK_SHARED:
+ case ClsLockType::SHARED:
return "shared";
- case LOCK_EXCLUSIVE_EPHEMERAL:
+ case ClsLockType::EXCLUSIVE_EPHEMERAL:
return "exclusive-ephemeral";
default:
return "<unknown>";
}
inline bool cls_lock_is_exclusive(ClsLockType type) {
- return LOCK_EXCLUSIVE == type || LOCK_EXCLUSIVE_EPHEMERAL == type;
+ return ClsLockType::EXCLUSIVE == type || ClsLockType::EXCLUSIVE_EPHEMERAL == type;
}
inline bool cls_lock_is_ephemeral(ClsLockType type) {
- return LOCK_EXCLUSIVE_EPHEMERAL == type;
+ return ClsLockType::EXCLUSIVE_EPHEMERAL == type;
}
inline bool cls_lock_is_valid(ClsLockType type) {
- return LOCK_SHARED == type ||
- LOCK_EXCLUSIVE == type ||
- LOCK_EXCLUSIVE_EPHEMERAL == type;
+ return ClsLockType::SHARED == type ||
+ ClsLockType::EXCLUSIVE == type ||
+ ClsLockType::EXCLUSIVE_EPHEMERAL == type;
}
namespace rados {
decode(tag, bl);
DECODE_FINISH(bl);
}
- lock_info_t() : lock_type(LOCK_NONE) {}
+
+ lock_info_t() : lock_type(ClsLockType::NONE) {}
void dump(ceph::Formatter *f) const;
static void generate_test_instances(std::list<lock_info_t *>& o);
};
#include "include/win32/winsock_compat.h"
+#include <windows.h>
+
+// There are a few name collisions between Windows headers and Ceph.
+// Updating Ceph definitions would be the prefferable fix in order to avoid
+// confussion, unless it requires too many changes, in which case we're going
+// to redefine Windows values by adding the "WIN32_" prefix.
+#define WIN32_DELETE 0x00010000L
+#undef DELETE
+
+#define WIN32_ERROR 0
+#undef ERROR
+
typedef _sigset_t sigset_t;
typedef int uid_t;
if (duration)
dur.set_from_timeval(duration);
- return rados::cls::lock::lock(this, oid, name, LOCK_EXCLUSIVE, cookie, "",
+ return rados::cls::lock::lock(this, oid, name, ClsLockType::EXCLUSIVE, cookie, "",
description, dur, flags);
}
if (duration)
dur.set_from_timeval(duration);
- return rados::cls::lock::lock(this, oid, name, LOCK_SHARED, cookie, tag,
+ return rados::cls::lock::lock(this, oid, name, ClsLockType::SHARED, cookie, tag,
description, dur, flags);
}
if (tag)
*tag = tmp_tag;
if (exclusive) {
- if (tmp_type == LOCK_EXCLUSIVE)
+ if (tmp_type == ClsLockType::EXCLUSIVE)
*exclusive = 1;
else
*exclusive = 0;
op.assert_exists();
std::string lockCookie = RadosStriperImpl::getUUID();
utime_t dur = utime_t();
- rados::cls::lock::lock(&op, RADOS_LOCK_NAME, LOCK_EXCLUSIVE, lockCookie, "", "", dur, 0);
+ rados::cls::lock::lock(&op, RADOS_LOCK_NAME, ClsLockType::EXCLUSIVE, lockCookie, "", "", dur, 0);
int rc = m_ioCtx.operate(firstObjOid, &op);
if (rc) return rc;
// load layout and size
op.assert_exists();
*lockCookie = getUUID();
utime_t dur = utime_t();
- rados::cls::lock::lock(&op, RADOS_LOCK_NAME, LOCK_SHARED, *lockCookie, "Tag", "", dur, 0);
+ rados::cls::lock::lock(&op, RADOS_LOCK_NAME, ClsLockType::SHARED, *lockCookie, "Tag", "", dur, 0);
std::string firstObjOid = getObjectId(soid, 0);
int rc = m_ioCtx.operate(firstObjOid, &op);
if (rc) {
op.assert_exists();
*lockCookie = getUUID();
utime_t dur = utime_t();
- rados::cls::lock::lock(&op, RADOS_LOCK_NAME, LOCK_SHARED, *lockCookie, "Tag", "", dur, 0);
+ rados::cls::lock::lock(&op, RADOS_LOCK_NAME, ClsLockType::SHARED, *lockCookie, "Tag", "", dur, 0);
std::string firstObjOid = getObjectId(soid, 0);
int rc = m_ioCtx.operate(firstObjOid, &op);
if (rc) {
{
std::lock_guard locker{m_lock};
rados::cls::lock::assert_locked(&op, RBD_LOCK_NAME,
- (m_mode == EXCLUSIVE ? LOCK_EXCLUSIVE :
- LOCK_SHARED),
+ (m_mode == EXCLUSIVE ? ClsLockType::EXCLUSIVE :
+ ClsLockType::SHARED),
m_cookie,
managed_lock::util::get_watcher_lock_tag());
}
librados::ObjectWriteOperation op;
if (m_snap_id == CEPH_NOSNAP) {
- rados::cls::lock::assert_locked(&op, RBD_LOCK_NAME, LOCK_EXCLUSIVE, "", "");
+ rados::cls::lock::assert_locked(&op, RBD_LOCK_NAME, ClsLockType::EXCLUSIVE, "", "");
}
cls_client::object_map_save(&op, m_object_map);
*result = rados::cls::lock::get_lock_info_finish(&it, &m_lockers,
&lock_type, &m_lock_tag);
if (*result == 0) {
- m_exclusive_locked = (lock_type == LOCK_EXCLUSIVE);
+ m_exclusive_locked = (lock_type == ClsLockType::EXCLUSIVE);
}
}
if (*result < 0) {
}
if (*result >= 0) {
- ClsLockType lock_type = LOCK_NONE;
+ ClsLockType lock_type = ClsLockType::NONE;
*result = rados::cls::lock::get_lock_info_finish(&it, &m_lockers,
&lock_type, &m_lock_tag);
if (*result == 0) {
- m_exclusive_locked = (lock_type == LOCK_EXCLUSIVE);
+ m_exclusive_locked = (lock_type == ClsLockType::EXCLUSIVE);
}
}
{
std::shared_lock locker{ictx->image_lock};
r = rados::cls::lock::lock(&ictx->md_ctx, ictx->header_oid, RBD_LOCK_NAME,
- exclusive ? LOCK_EXCLUSIVE : LOCK_SHARED,
+ exclusive ? ClsLockType::EXCLUSIVE : ClsLockType::SHARED,
cookie, tag, "", utime_t(), 0);
if (r < 0) {
return r;
librados::ObjectWriteOperation op;
rados::cls::lock::lock(&op, RBD_LOCK_NAME,
- m_exclusive ? LOCK_EXCLUSIVE : LOCK_SHARED, m_cookie,
+ m_exclusive ? ClsLockType::EXCLUSIVE : ClsLockType::SHARED, m_cookie,
util::get_watcher_lock_tag(), "", utime_t(), 0);
using klass = AcquireRequest;
std::map<rados::cls::lock::locker_id_t,
rados::cls::lock::locker_info_t> lockers;
- ClsLockType lock_type = LOCK_NONE;
+ ClsLockType lock_type = ClsLockType::NONE;
std::string lock_tag;
if (r == 0) {
auto it = m_out_bl.cbegin();
return;
}
- if (m_exclusive && lock_type == LOCK_SHARED) {
+ if (m_exclusive && lock_type == ClsLockType::SHARED) {
ldout(m_cct, 5) << "incompatible shared lock type detected" << dendl;
finish(-EBUSY);
return;
- } else if (!m_exclusive && lock_type == LOCK_EXCLUSIVE) {
+ } else if (!m_exclusive && lock_type == ClsLockType::EXCLUSIVE) {
ldout(m_cct, 5) << "incompatible exclusive lock type detected" << dendl;
finish(-EBUSY);
return;
librados::ObjectWriteOperation op;
rados::cls::lock::set_cookie(&op, RBD_LOCK_NAME,
- m_exclusive ? LOCK_EXCLUSIVE : LOCK_SHARED,
+ m_exclusive ? ClsLockType::EXCLUSIVE : ClsLockType::SHARED,
m_old_cookie, util::get_watcher_lock_tag(),
m_new_cookie);
ldout(cct, 10) << this << " " << __func__ << ": oid=" << oid << dendl;
librados::ObjectWriteOperation op;
- rados::cls::lock::lock(&op, RBD_LOCK_NAME, LOCK_EXCLUSIVE, "", "", "",
+ rados::cls::lock::lock(&op, RBD_LOCK_NAME, ClsLockType::EXCLUSIVE, "", "", "",
utime_t(), 0);
using klass = LockRequest<I>;
librados::ObjectWriteOperation op;
if (m_snap_id == CEPH_NOSNAP) {
- rados::cls::lock::assert_locked(&op, RBD_LOCK_NAME, LOCK_EXCLUSIVE, "", "");
+ rados::cls::lock::assert_locked(&op, RBD_LOCK_NAME, ClsLockType::EXCLUSIVE, "", "");
}
if (m_truncate_on_disk_object_map) {
op.truncate(0);
librados::ObjectWriteOperation op;
if (m_snap_id == CEPH_NOSNAP) {
- rados::cls::lock::assert_locked(&op, RBD_LOCK_NAME, LOCK_EXCLUSIVE, "", "");
+ rados::cls::lock::assert_locked(&op, RBD_LOCK_NAME, ClsLockType::EXCLUSIVE, "", "");
}
cls_client::object_map_resize(&op, m_num_objs, m_default_object_state);
m_state = STATE_ADD_SNAPSHOT;
librados::ObjectWriteOperation op;
- rados::cls::lock::assert_locked(&op, RBD_LOCK_NAME, LOCK_EXCLUSIVE, "", "");
+ rados::cls::lock::assert_locked(&op, RBD_LOCK_NAME, ClsLockType::EXCLUSIVE, "", "");
cls_client::object_map_snap_add(&op);
librados::AioCompletion *rados_completion = create_callback_completion();
librados::ObjectWriteOperation op;
if (m_next_snap_id == CEPH_NOSNAP) {
- rados::cls::lock::assert_locked(&op, RBD_LOCK_NAME, LOCK_EXCLUSIVE, "", "");
+ rados::cls::lock::assert_locked(&op, RBD_LOCK_NAME, ClsLockType::EXCLUSIVE, "", "");
}
cls_client::object_map_snap_remove(&op, m_snap_object_map);
m_state = STATE_WRITE_MAP;
librados::ObjectWriteOperation op;
- rados::cls::lock::assert_locked(&op, RBD_LOCK_NAME, LOCK_EXCLUSIVE, "", "");
+ rados::cls::lock::assert_locked(&op, RBD_LOCK_NAME, ClsLockType::EXCLUSIVE, "", "");
op.write_full(m_read_bl);
librados::AioCompletion *rados_completion = create_callback_completion();
librados::ObjectWriteOperation op;
if (m_snap_id == CEPH_NOSNAP) {
- rados::cls::lock::assert_locked(&op, RBD_LOCK_NAME, LOCK_EXCLUSIVE, "", "");
+ rados::cls::lock::assert_locked(&op, RBD_LOCK_NAME, ClsLockType::EXCLUSIVE, "", "");
}
cls_client::object_map_update(&op, m_update_start_object_no,
m_update_end_object_no, m_new_state,
#include "MDSCacheObject.h"
#include "MDSContext.h"
#include "SimpleLock.h"
-#include "LocalLock.h"
+#include "LocalLockC.h"
#include "ScrubHeader.h"
class CInode;
static LockType versionlock_type;
SimpleLock lock; // FIXME referenced containers not in mempool
- LocalLock versionlock; // FIXME referenced containers not in mempool
+ LocalLockC versionlock; // FIXME referenced containers not in mempool
mempool::mds_co::map<client_t,ClientLease*> client_lease_map;
std::map<int, std::unique_ptr<BatchOp>> batch_ops;
#include "CDentry.h"
#include "SimpleLock.h"
#include "ScatterLock.h"
-#include "LocalLock.h"
+#include "LocalLockC.h"
#include "Capability.h"
#include "SnapRealm.h"
#include "Mutation.h"
static LockType policylock_type;
// FIXME not part of mempool
- LocalLock versionlock;
+ LocalLockC versionlock;
SimpleLock authlock;
SimpleLock linklock;
ScatterLock dirfragtreelock;
+++ /dev/null
-// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
-// vim: ts=8 sw=2 smarttab
-/*
- * Ceph - scalable distributed file system
- *
- * Copyright (C) 2004-2006 Sage Weil <sage@newdream.net>
- *
- * This is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License version 2.1, as published by the Free Software
- * Foundation. See file COPYING.
- *
- */
-
-
-#ifndef CEPH_LOCALLOCK_H
-#define CEPH_LOCALLOCK_H
-
-#include "SimpleLock.h"
-
-class LocalLock : public SimpleLock {
-public:
- LocalLock(MDSCacheObject *o, LockType *t) :
- SimpleLock(o, t) {
- set_state(LOCK_LOCK); // always.
- }
-
- bool is_locallock() const override {
- return true;
- }
-
- bool can_xlock_local() const {
- return !is_wrlocked() && (get_xlock_by() == MutationRef());
- }
-
- bool can_wrlock() const {
- return !is_xlocked();
- }
- void get_wrlock(client_t client) {
- ceph_assert(can_wrlock());
- SimpleLock::get_wrlock();
- last_wrlock_client = client;
- }
- void put_wrlock() {
- SimpleLock::put_wrlock();
- if (get_num_wrlocks() == 0)
- last_wrlock_client = client_t();
- }
- client_t get_last_wrlock_client() const {
- return last_wrlock_client;
- }
-
- void print(std::ostream& out) const override {
- out << "(";
- _print(out);
- if (last_wrlock_client >= 0)
- out << " last_client=" << last_wrlock_client;
- out << ")";
- }
-
-private:
- client_t last_wrlock_client;
-};
-#endif
--- /dev/null
+// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
+// vim: ts=8 sw=2 smarttab
+/*
+ * Ceph - scalable distributed file system
+ *
+ * Copyright (C) 2004-2006 Sage Weil <sage@newdream.net>
+ *
+ * This is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1, as published by the Free Software
+ * Foundation. See file COPYING.
+ *
+ */
+
+
+#ifndef CEPH_LOCALLOCK_H
+#define CEPH_LOCALLOCK_H
+
+#include "SimpleLock.h"
+
+class LocalLockC : public SimpleLock {
+public:
+ LocalLockC(MDSCacheObject *o, LockType *t) :
+ SimpleLock(o, t) {
+ set_state(LOCK_LOCK); // always.
+ }
+
+ bool is_locallock() const override {
+ return true;
+ }
+
+ bool can_xlock_local() const {
+ return !is_wrlocked() && (get_xlock_by() == MutationRef());
+ }
+
+ bool can_wrlock() const {
+ return !is_xlocked();
+ }
+ void get_wrlock(client_t client) {
+ ceph_assert(can_wrlock());
+ SimpleLock::get_wrlock();
+ last_wrlock_client = client;
+ }
+ void put_wrlock() {
+ SimpleLock::put_wrlock();
+ if (get_num_wrlocks() == 0)
+ last_wrlock_client = client_t();
+ }
+ client_t get_last_wrlock_client() const {
+ return last_wrlock_client;
+ }
+
+ void print(std::ostream& out) const override {
+ out << "(";
+ _print(out);
+ if (last_wrlock_client >= 0)
+ out << " last_client=" << last_wrlock_client;
+ out << ")";
+ }
+
+private:
+ client_t last_wrlock_client;
+};
+#endif
{
if (lock->get_type() == CEPH_LOCK_IVERSION ||
lock->get_type() == CEPH_LOCK_DVERSION)
- return local_wrlock_grab(static_cast<LocalLock*>(lock), mut);
+ return local_wrlock_grab(static_cast<LocalLockC*>(lock), mut);
dout(7) << "wrlock_force on " << *lock
<< " on " << *lock->get_parent() << dendl;
SimpleLock *lock = op.lock;
if (lock->get_type() == CEPH_LOCK_IVERSION ||
lock->get_type() == CEPH_LOCK_DVERSION)
- return local_wrlock_start(static_cast<LocalLock*>(lock), mut);
+ return local_wrlock_start(static_cast<LocalLockC*>(lock), mut);
dout(10) << "wrlock_start " << *lock << " on " << *lock->get_parent() << dendl;
{
if (lock->get_type() == CEPH_LOCK_IVERSION ||
lock->get_type() == CEPH_LOCK_DVERSION)
- return local_xlock_start(static_cast<LocalLock*>(lock), mut);
+ return local_xlock_start(static_cast<LocalLockC*>(lock), mut);
dout(7) << "xlock_start on " << *lock << " on " << *lock->get_parent() << dendl;
client_t client = mut->get_client();
// ==========================================================================
// local lock
-void Locker::local_wrlock_grab(LocalLock *lock, MutationRef& mut)
+void Locker::local_wrlock_grab(LocalLockC *lock, MutationRef& mut)
{
dout(7) << "local_wrlock_grab on " << *lock
<< " on " << *lock->get_parent() << dendl;
ceph_assert(it->is_wrlock());
}
-bool Locker::local_wrlock_start(LocalLock *lock, MDRequestRef& mut)
+bool Locker::local_wrlock_start(LocalLockC *lock, MDRequestRef& mut)
{
dout(7) << "local_wrlock_start on " << *lock
<< " on " << *lock->get_parent() << dendl;
void Locker::local_wrlock_finish(const MutationImpl::lock_iterator& it, MutationImpl *mut)
{
ceph_assert(it->is_wrlock());
- LocalLock *lock = static_cast<LocalLock*>(it->lock);
+ LocalLockC *lock = static_cast<LocalLockC*>(it->lock);
dout(7) << "local_wrlock_finish on " << *lock
<< " on " << *lock->get_parent() << dendl;
lock->put_wrlock();
}
}
-bool Locker::local_xlock_start(LocalLock *lock, MDRequestRef& mut)
+bool Locker::local_xlock_start(LocalLockC *lock, MDRequestRef& mut)
{
dout(7) << "local_xlock_start on " << *lock
<< " on " << *lock->get_parent() << dendl;
void Locker::local_xlock_finish(const MutationImpl::lock_iterator& it, MutationImpl *mut)
{
ceph_assert(it->is_xlock());
- LocalLock *lock = static_cast<LocalLock*>(it->lock);
+ LocalLockC *lock = static_cast<LocalLockC*>(it->lock);
dout(7) << "local_xlock_finish on " << *lock
<< " on " << *lock->get_parent() << dendl;
lock->put_xlock();
class Capability;
class SimpleLock;
class ScatterLock;
-class LocalLock;
+class LocalLockC;
class Locker {
public:
bool is_revoking_any_caps_from(client_t client);
// local
- void local_wrlock_grab(LocalLock *lock, MutationRef& mut);
+ void local_wrlock_grab(LocalLockC *lock, MutationRef& mut);
// file
void file_eval(ScatterLock *lock, bool *need_issue);
void _do_cap_release(client_t client, inodeno_t ino, uint64_t cap_id, ceph_seq_t mseq, ceph_seq_t seq);
void caps_tick();
- bool local_wrlock_start(LocalLock *lock, MDRequestRef& mut);
+ bool local_wrlock_start(LocalLockC *lock, MDRequestRef& mut);
void local_wrlock_finish(const MutationImpl::lock_iterator& it, MutationImpl *mut);
- bool local_xlock_start(LocalLock *lock, MDRequestRef& mut);
+ bool local_xlock_start(LocalLockC *lock, MDRequestRef& mut);
void local_xlock_finish(const MutationImpl::lock_iterator& it, MutationImpl *mut);
void handle_file_lock(ScatterLock *lock, const cref_t<MLock> &m);
#include "include/mempool.h"
#include "msg/msg_types.h"
+#include "include/compat.h"
#include "include/types.h"
#include "include/utime.h"
#include "include/CompatSet.h"
void lock_info(IoCtx *ioctx, string& oid, string& name, map<locker_id_t, locker_info_t>& lockers,
ClsLockType *assert_type, string *assert_tag)
{
- ClsLockType lock_type = LOCK_NONE;
+ ClsLockType lock_type = ClsLockType::NONE;
string tag;
lockers.clear();
ASSERT_EQ(0, get_lock_info(ioctx, oid, name, &lockers, &lock_type, &tag));
ASSERT_EQ("", create_one_pool_pp(pool_name, cluster));
IoCtx ioctx;
cluster.ioctx_create(pool_name.c_str(), ioctx);
- ClsLockType lock_type_shared = LOCK_SHARED;
- ClsLockType lock_type_exclusive = LOCK_EXCLUSIVE;
+ ClsLockType lock_type_shared = ClsLockType::SHARED;
+ ClsLockType lock_type_exclusive = ClsLockType::EXCLUSIVE;
Rados cluster2;
string cookie = "cookie";
string new_cookie = "new cookie";
librados::ObjectWriteOperation op1;
- set_cookie(&op1, name, LOCK_SHARED, cookie, tag, new_cookie);
+ set_cookie(&op1, name, ClsLockType::SHARED, cookie, tag, new_cookie);
ASSERT_EQ(-ENOENT, ioctx.operate(oid, &op1));
librados::ObjectWriteOperation op2;
- lock(&op2, name, LOCK_SHARED, cookie, tag, "", utime_t{}, 0);
+ lock(&op2, name, ClsLockType::SHARED, cookie, tag, "", utime_t{}, 0);
ASSERT_EQ(0, ioctx.operate(oid, &op2));
librados::ObjectWriteOperation op3;
- lock(&op3, name, LOCK_SHARED, "cookie 2", tag, "", utime_t{}, 0);
+ lock(&op3, name, ClsLockType::SHARED, "cookie 2", tag, "", utime_t{}, 0);
ASSERT_EQ(0, ioctx.operate(oid, &op3));
librados::ObjectWriteOperation op4;
- set_cookie(&op4, name, LOCK_SHARED, cookie, tag, cookie);
+ set_cookie(&op4, name, ClsLockType::SHARED, cookie, tag, cookie);
ASSERT_EQ(-EBUSY, ioctx.operate(oid, &op4));
librados::ObjectWriteOperation op5;
- set_cookie(&op5, name, LOCK_SHARED, cookie, "wrong tag", new_cookie);
+ set_cookie(&op5, name, ClsLockType::SHARED, cookie, "wrong tag", new_cookie);
ASSERT_EQ(-EBUSY, ioctx.operate(oid, &op5));
librados::ObjectWriteOperation op6;
- set_cookie(&op6, name, LOCK_SHARED, "wrong cookie", tag, new_cookie);
+ set_cookie(&op6, name, ClsLockType::SHARED, "wrong cookie", tag, new_cookie);
ASSERT_EQ(-EBUSY, ioctx.operate(oid, &op6));
librados::ObjectWriteOperation op7;
- set_cookie(&op7, name, LOCK_EXCLUSIVE, cookie, tag, new_cookie);
+ set_cookie(&op7, name, ClsLockType::EXCLUSIVE, cookie, tag, new_cookie);
ASSERT_EQ(-EBUSY, ioctx.operate(oid, &op7));
librados::ObjectWriteOperation op8;
- set_cookie(&op8, name, LOCK_SHARED, cookie, tag, "cookie 2");
+ set_cookie(&op8, name, ClsLockType::SHARED, cookie, tag, "cookie 2");
ASSERT_EQ(-EBUSY, ioctx.operate(oid, &op8));
librados::ObjectWriteOperation op9;
- set_cookie(&op9, name, LOCK_SHARED, cookie, tag, new_cookie);
+ set_cookie(&op9, name, ClsLockType::SHARED, cookie, tag, new_cookie);
ASSERT_EQ(0, ioctx.operate(oid, &op9));
ASSERT_EQ(0, destroy_one_pool_pp(pool_name, cluster));
bl.share(arg);
auto iter = bl.cbegin();
decode(op, iter);
- return op.type == (exclusive ? LOCK_EXCLUSIVE : LOCK_SHARED);
+ return op.type == (exclusive ? ClsLockType::EXCLUSIVE : ClsLockType::SHARED);
}
} // anonymous namespace
InSequence seq;
expect_get_lock_info(mock_image_ctx, 0, entity_name_t::CLIENT(1), "1.2.3.4",
"auto 123", util::get_watcher_lock_tag(),
- LOCK_EXCLUSIVE);
+ ClsLockType::EXCLUSIVE);
C_SaferCond ctx;
Locker locker;
InSequence seq;
expect_get_lock_info(mock_image_ctx, 0, entity_name_t::CLIENT(1), "1.2.3.4",
"auto 123", util::get_watcher_lock_tag(),
- LOCK_SHARED);
+ ClsLockType::SHARED);
C_SaferCond ctx;
Locker locker;
InSequence seq;
expect_get_lock_info(mock_image_ctx, -EINVAL, entity_name_t::CLIENT(1), "",
- "", "", LOCK_EXCLUSIVE);
+ "", "", ClsLockType::EXCLUSIVE);
C_SaferCond ctx;
Locker locker;
InSequence seq;
expect_get_lock_info(mock_image_ctx, -ENOENT, entity_name_t::CLIENT(1), "",
- "", "", LOCK_EXCLUSIVE);
+ "", "", ClsLockType::EXCLUSIVE);
C_SaferCond ctx;
Locker locker;
InSequence seq;
expect_get_lock_info(mock_image_ctx, 0, entity_name_t::CLIENT(1), "1.2.3.4",
- "auto 123", "external tag", LOCK_EXCLUSIVE);
+ "auto 123", "external tag", ClsLockType::EXCLUSIVE);
C_SaferCond ctx;
Locker locker;
InSequence seq;
expect_get_lock_info(mock_image_ctx, 0, entity_name_t::CLIENT(1), "1.2.3.4",
"auto 123", util::get_watcher_lock_tag(),
- LOCK_SHARED);
+ ClsLockType::SHARED);
C_SaferCond ctx;
Locker locker;
InSequence seq;
expect_get_lock_info(mock_image_ctx, 0, entity_name_t::CLIENT(1), "1.2.3.4",
"auto 123", util::get_watcher_lock_tag(),
- LOCK_EXCLUSIVE);
+ ClsLockType::EXCLUSIVE);
C_SaferCond ctx;
Locker locker;
InSequence seq;
expect_get_lock_info(mock_image_ctx, 0, entity_name_t::CLIENT(1), "1.2.3.4",
"external cookie", util::get_watcher_lock_tag(),
- LOCK_EXCLUSIVE);
+ ClsLockType::EXCLUSIVE);
C_SaferCond ctx;
Locker locker;
bl.share(arg);
auto iter = bl.cbegin();
decode(op, iter);
- return op.type == (exclusive ? LOCK_EXCLUSIVE : LOCK_SHARED);
+ return op.type == (exclusive ? ClsLockType::EXCLUSIVE : ClsLockType::SHARED);
}
} // anonymous namespace
ASSERT_EQ(0, open_image(m_image_name, &ictx));
ASSERT_EQ(0, register_image_watch(*ictx));
- ASSERT_EQ(0, lock_image(*ictx, LOCK_EXCLUSIVE,
+ ASSERT_EQ(0, lock_image(*ictx, ClsLockType::EXCLUSIVE,
"auto " + stringify(m_watch_ctx->get_handle())));
m_notify_acks = {{NOTIFY_OP_FLATTEN, create_response_message(0)}};
ASSERT_EQ(0, open_image(m_image_name, &ictx));
ASSERT_EQ(0, register_image_watch(*ictx));
- ASSERT_EQ(0, lock_image(*ictx, LOCK_EXCLUSIVE,
+ ASSERT_EQ(0, lock_image(*ictx, ClsLockType::EXCLUSIVE,
"auto " + stringify(m_watch_ctx->get_handle())));
m_notify_acks = {{NOTIFY_OP_RESIZE, create_response_message(0)}};
ASSERT_EQ(0, open_image(m_image_name, &ictx));
ASSERT_EQ(0, register_image_watch(*ictx));
- ASSERT_EQ(0, lock_image(*ictx, LOCK_EXCLUSIVE,
+ ASSERT_EQ(0, lock_image(*ictx, ClsLockType::EXCLUSIVE,
"auto " + stringify(m_watch_ctx->get_handle())));
m_notify_acks = {{NOTIFY_OP_REBUILD_OBJECT_MAP, create_response_message(0)}};
ASSERT_EQ(0, open_image(m_image_name, &ictx));
ASSERT_EQ(0, register_image_watch(*ictx));
- ASSERT_EQ(0, lock_image(*ictx, LOCK_EXCLUSIVE,
+ ASSERT_EQ(0, lock_image(*ictx, ClsLockType::EXCLUSIVE,
"auto " + stringify(m_watch_ctx->get_handle())));
m_notify_acks = {{NOTIFY_OP_SNAP_CREATE, create_response_message(0)}};
ASSERT_EQ(0, open_image(m_image_name, &ictx));
ASSERT_EQ(0, register_image_watch(*ictx));
- ASSERT_EQ(0, lock_image(*ictx, LOCK_EXCLUSIVE,
+ ASSERT_EQ(0, lock_image(*ictx, ClsLockType::EXCLUSIVE,
"auto " + stringify(m_watch_ctx->get_handle())));
m_notify_acks = {{NOTIFY_OP_SNAP_CREATE, create_response_message(-EEXIST)}};
ASSERT_EQ(0, open_image(m_image_name, &ictx));
ASSERT_EQ(0, register_image_watch(*ictx));
- ASSERT_EQ(0, lock_image(*ictx, LOCK_EXCLUSIVE,
+ ASSERT_EQ(0, lock_image(*ictx, ClsLockType::EXCLUSIVE,
"auto " + stringify(m_watch_ctx->get_handle())));
m_notify_acks = {{NOTIFY_OP_SNAP_RENAME, create_response_message(0)}};
ASSERT_EQ(0, open_image(m_image_name, &ictx));
ASSERT_EQ(0, register_image_watch(*ictx));
- ASSERT_EQ(0, lock_image(*ictx, LOCK_EXCLUSIVE,
+ ASSERT_EQ(0, lock_image(*ictx, ClsLockType::EXCLUSIVE,
"auto " + stringify(m_watch_ctx->get_handle())));
m_notify_acks = {{NOTIFY_OP_SNAP_RENAME, create_response_message(-EEXIST)}};
ASSERT_EQ(0, open_image(m_image_name, &ictx));
ASSERT_EQ(0, register_image_watch(*ictx));
- ASSERT_EQ(0, lock_image(*ictx, LOCK_EXCLUSIVE,
+ ASSERT_EQ(0, lock_image(*ictx, ClsLockType::EXCLUSIVE,
"auto " + stringify(m_watch_ctx->get_handle())));
m_notify_acks = {{NOTIFY_OP_SNAP_REMOVE, create_response_message(0)}};
ASSERT_EQ(0, open_image(m_image_name, &ictx));
ASSERT_EQ(0, register_image_watch(*ictx));
- ASSERT_EQ(0, lock_image(*ictx, LOCK_EXCLUSIVE,
+ ASSERT_EQ(0, lock_image(*ictx, ClsLockType::EXCLUSIVE,
"auto " + stringify(m_watch_ctx->get_handle())));
m_notify_acks = {{NOTIFY_OP_SNAP_PROTECT, create_response_message(0)}};
ASSERT_EQ(0, open_image(m_image_name, &ictx));
ASSERT_EQ(0, register_image_watch(*ictx));
- ASSERT_EQ(0, lock_image(*ictx, LOCK_EXCLUSIVE,
+ ASSERT_EQ(0, lock_image(*ictx, ClsLockType::EXCLUSIVE,
"auto " + stringify(m_watch_ctx->get_handle())));
m_notify_acks = {{NOTIFY_OP_SNAP_UNPROTECT, create_response_message(0)}};
ASSERT_EQ(0, open_image(m_image_name, &ictx));
ASSERT_EQ(0, register_image_watch(*ictx));
- ASSERT_EQ(0, lock_image(*ictx, LOCK_EXCLUSIVE,
+ ASSERT_EQ(0, lock_image(*ictx, ClsLockType::EXCLUSIVE,
"auto " + stringify(m_watch_ctx->get_handle())));
m_notify_acks = {{NOTIFY_OP_RENAME, create_response_message(0)}};
ASSERT_EQ(0, open_image(m_image_name, &ictx));
ASSERT_EQ(0, register_image_watch(*ictx));
- ASSERT_EQ(0, lock_image(*ictx, LOCK_EXCLUSIVE,
+ ASSERT_EQ(0, lock_image(*ictx, ClsLockType::EXCLUSIVE,
"auto " + stringify(m_watch_ctx->get_handle())));
m_notify_acks = {{NOTIFY_OP_FLATTEN, {}}};
ASSERT_EQ(0, open_image(m_image_name, &ictx));
ASSERT_EQ(0, register_image_watch(*ictx));
- ASSERT_EQ(0, lock_image(*ictx, LOCK_EXCLUSIVE,
+ ASSERT_EQ(0, lock_image(*ictx, ClsLockType::EXCLUSIVE,
"auto " + stringify(m_watch_ctx->get_handle())));
m_notify_acks = {{NOTIFY_OP_FLATTEN, create_response_message(-EIO)}};
ASSERT_EQ(0, open_image(m_image_name, &ictx));
ASSERT_EQ(0, register_image_watch(*ictx));
- ASSERT_EQ(0, lock_image(*ictx, LOCK_EXCLUSIVE,
+ ASSERT_EQ(0, lock_image(*ictx, ClsLockType::EXCLUSIVE,
"auto " + stringify(m_watch_ctx->get_handle())));
m_notify_acks = {{NOTIFY_OP_FLATTEN, create_response_message(0)}};
ictx->config.set_val("rbd_request_timed_out_seconds", "0");
ASSERT_EQ(0, register_image_watch(*ictx));
- ASSERT_EQ(0, lock_image(*ictx, LOCK_EXCLUSIVE,
+ ASSERT_EQ(0, lock_image(*ictx, ClsLockType::EXCLUSIVE,
"auto " + stringify(m_watch_ctx->get_handle())));
m_notify_acks = {{NOTIFY_OP_FLATTEN, create_response_message(0)}};
librbd::ImageCtx *ictx;
ASSERT_EQ(0, open_image(m_image_name, &ictx));
- ASSERT_EQ(0, lock_image(*ictx, LOCK_EXCLUSIVE, "manually locked"));
+ ASSERT_EQ(0, lock_image(*ictx, ClsLockType::EXCLUSIVE, "manually locked"));
librbd::NoOpProgressContext no_op;
ASSERT_EQ(-EROFS, ictx->operations->resize(m_image_size >> 1, true, no_op));
librbd::ImageCtx *ictx;
ASSERT_EQ(0, open_image(m_image_name, &ictx));
- ASSERT_EQ(0, lock_image(*ictx, LOCK_EXCLUSIVE, "manually locked"));
+ ASSERT_EQ(0, lock_image(*ictx, ClsLockType::EXCLUSIVE, "manually locked"));
ASSERT_EQ(-EROFS, snap_create(*ictx, "snap1"));
}
librbd::ImageCtx *ictx;
ASSERT_EQ(0, open_image(m_image_name, &ictx));
- ASSERT_EQ(0, lock_image(*ictx, LOCK_EXCLUSIVE, "manually locked"));
+ ASSERT_EQ(0, lock_image(*ictx, ClsLockType::EXCLUSIVE, "manually locked"));
librbd::NoOpProgressContext no_op;
ASSERT_EQ(-EROFS,
} BOOST_SCOPE_EXIT_END;
ASSERT_EQ(0, open_image(clone_name, &ictx2));
- ASSERT_EQ(0, lock_image(*ictx2, LOCK_EXCLUSIVE, "manually locked"));
+ ASSERT_EQ(0, lock_image(*ictx2, ClsLockType::EXCLUSIVE, "manually locked"));
librbd::NoOpProgressContext no_op;
ASSERT_EQ(-EROFS, ictx2->operations->flatten(no_op));
librbd::ImageCtx *ictx;
ASSERT_EQ(0, open_image(m_image_name, &ictx));
- ASSERT_EQ(0, lock_image(*ictx, LOCK_EXCLUSIVE, "manually locked"));
+ ASSERT_EQ(0, lock_image(*ictx, ClsLockType::EXCLUSIVE, "manually locked"));
std::string buffer(256, '1');
Context *ctx = new DummyContext();
librbd::ImageCtx *ictx;
ASSERT_EQ(0, open_image(m_image_name, &ictx));
- ASSERT_EQ(0, lock_image(*ictx, LOCK_EXCLUSIVE, "manually locked"));
+ ASSERT_EQ(0, lock_image(*ictx, ClsLockType::EXCLUSIVE, "manually locked"));
Context *ctx = new DummyContext();
auto c = librbd::io::AioCompletion::create(ctx);
string lock_cookie;
string lock_description;
int lock_duration = 0;
- ClsLockType lock_type = LOCK_EXCLUSIVE;
+ ClsLockType lock_type = ClsLockType::EXCLUSIVE;
map<string, string>::const_iterator i;
i = opts.find("lock-tag");
if (i != opts.end()) {
const string& type_str = i->second;
if (type_str.compare("exclusive") == 0) {
- lock_type = LOCK_EXCLUSIVE;
+ lock_type = ClsLockType::EXCLUSIVE;
} else if (type_str.compare("shared") == 0) {
- lock_type = LOCK_SHARED;
+ lock_type = ClsLockType::SHARED;
} else {
cerr << "unknown lock type was specified, aborting" << std::endl;
return -EINVAL;
if (cmd.compare("info") == 0) {
map<rados::cls::lock::locker_id_t, rados::cls::lock::locker_info_t> lockers;
- ClsLockType type = LOCK_NONE;
+ ClsLockType type = ClsLockType::NONE;
string tag;
int ret = rados::cls::lock::get_lock_info(ioctx, oid, lock_name, &lockers, &type, &tag);
if (ret < 0) {
l.set_description(lock_description);
int ret;
switch (lock_type) {
- case LOCK_SHARED:
+ case ClsLockType::SHARED:
ret = l.lock_shared(ioctx, oid);
break;
default:
void add_no_error_option(boost::program_options::options_description *opt) {
opt->add_options()
- (NO_ERROR.c_str(), po::bool_switch(), "continue after error");
+ (NO_ERR.c_str(), po::bool_switch(), "continue after error");
}
void add_export_format_option(boost::program_options::options_description *opt) {
static const std::string FORMAT("format");
static const std::string PRETTY_FORMAT("pretty-format");
static const std::string VERBOSE("verbose");
-static const std::string NO_ERROR("no-error");
+static const std::string NO_ERR("no-error");
static const std::string LIMIT("limit");
static const std::string IGNORE_QUIESCE_ERROR("ignore-quiesce-error");
static const std::set<std::string> SWITCH_ARGUMENTS = {
- WHOLE_OBJECT, NO_PROGRESS, PRETTY_FORMAT, VERBOSE, NO_ERROR, SKIP_QUIESCE,
+ WHOLE_OBJECT, NO_PROGRESS, PRETTY_FORMAT, VERBOSE, NO_ERR, SKIP_QUIESCE,
IGNORE_QUIESCE_ERROR
};
return r;
}
- r = do_export_journal(io_ctx, journal_name, path, vm[at::NO_ERROR].as<bool>(),
+ r = do_export_journal(io_ctx, journal_name, path, vm[at::NO_ERR].as<bool>(),
vm[at::VERBOSE].as<bool>());
if (r < 0) {
std::cerr << "rbd: journal export: " << cpp_strerror(r) << std::endl;
return r;
}
- r = do_import_journal(io_ctx, journal_name, path, vm[at::NO_ERROR].as<bool>(),
+ r = do_import_journal(io_ctx, journal_name, path, vm[at::NO_ERR].as<bool>(),
vm[at::VERBOSE].as<bool>());
if (r < 0) {
std::cerr << "rbd: journal import: " << cpp_strerror(r) << std::endl;