Project

General

Profile

Bug #10458 ยป 20150122_10458_pool-name-caching-fix_v1.patch

Radoslaw Zarzynski, 01/23/2015 01:31 PM

View differences:

src/include/rados/librados.hpp
// get pool auid
int get_auid(uint64_t *auid_);
std::string get_pool_name();
std::string get_pool_name() const;
bool pool_requires_alignment();
uint64_t pool_required_alignment();
......
void set_assert_version(uint64_t ver);
void set_assert_src_version(const std::string& o, uint64_t ver);
const std::string& get_pool_name() const;
void locator_set_key(const std::string& key);
void set_namespace(const std::string& nspace);
src/librados/IoCtxImpl.cc
}
librados::IoCtxImpl::IoCtxImpl(RadosClient *c, Objecter *objecter,
int64_t poolid,
const char *pool_name, snapid_t s)
: ref_cnt(0), client(c), poolid(poolid), pool_name(pool_name), snap_seq(s),
int64_t poolid, snapid_t s)
: ref_cnt(0), client(c), poolid(poolid), snap_seq(s),
assert_ver(0), last_objver(0),
notify_timeout(c->cct->_conf->client_notify_timeout),
oloc(poolid),
src/librados/IoCtxImpl.h
atomic_t ref_cnt;
RadosClient *client;
int64_t poolid;
string pool_name;
snapid_t snap_seq;
::SnapContext snapc;
uint64_t assert_ver;
......
IoCtxImpl();
IoCtxImpl(RadosClient *c, Objecter *objecter,
int64_t poolid, const char *pool_name, snapid_t s);
int64_t poolid, snapid_t s);
void dup(const IoCtxImpl& rhs) {
// Copy everything except the ref count
client = rhs.client;
poolid = rhs.poolid;
pool_name = rhs.pool_name;
snap_seq = rhs.snap_seq;
snapc = rhs.snapc;
assert_ver = rhs.assert_ver;
src/librados/RadosClient.cc
}
}
*io = new librados::IoCtxImpl(this, objecter, poolid, name, CEPH_NOSNAP);
*io = new librados::IoCtxImpl(this, objecter, poolid, CEPH_NOSNAP);
return 0;
}
int librados::RadosClient::create_ioctx(int64_t pool_id, IoCtxImpl **io)
{
std::string pool_name;
int r = pool_get_name(pool_id, &pool_name);
if (r < 0) {
return r;
}
*io = new librados::IoCtxImpl(this, objecter, pool_id, pool_name.c_str(),
CEPH_NOSNAP);
*io = new librados::IoCtxImpl(this, objecter, pool_id, CEPH_NOSNAP);
return 0;
}
src/librados/librados.cc
return io_ctx_impl->client->pool_required_alignment(get_id());
}
std::string librados::IoCtx::get_pool_name()
std::string librados::IoCtx::get_pool_name() const
{
std::string s;
io_ctx_impl->client->pool_get_name(get_id(), &s);
io_ctx_impl->client->pool_get_name(io_ctx_impl->get_id(), &s);
return s;
}
......
io_ctx_impl->set_assert_src_version(obj, ver);
}
const std::string& librados::IoCtx::get_pool_name() const
{
return io_ctx_impl->pool_name;
}
void librados::IoCtx::locator_set_key(const string& key)
{
io_ctx_impl->oloc.key = key;
......
tracepoint(librados, rados_ioctx_pool_stat_enter, io);
librados::IoCtxImpl *io_ctx_impl = (librados::IoCtxImpl *)io;
list<string> ls;
ls.push_back(io_ctx_impl->pool_name);
std::string pool_name;
io_ctx_impl->client->pool_get_name(io_ctx_impl->get_id(), &pool_name);
ls.push_back(pool_name);
map<string, ::pool_stat_t> rawresult;
int err = io_ctx_impl->client->get_pool_stats(ls, rawresult);
......
return err;
}
::pool_stat_t& r = rawresult[io_ctx_impl->pool_name];
::pool_stat_t& r = rawresult[pool_name];
stats->num_kb = SHIFT_ROUND_UP(r.stats.sum.num_bytes, 10);
stats->num_bytes = r.stats.sum.num_bytes;
stats->num_objects = r.stats.sum.num_objects;
......
{
tracepoint(librados, rados_ioctx_get_pool_name_enter, io, maxlen);
librados::IoCtxImpl *ctx = (librados::IoCtxImpl *)io;
if (ctx->pool_name.length() >= maxlen) {
std::string pool_name;
ctx->client->pool_get_name(ctx->get_id(), &pool_name);
if (pool_name.length() >= maxlen) {
tracepoint(librados, rados_ioctx_get_pool_name_exit, -ERANGE, "");
return -ERANGE;
}
strcpy(s, ctx->pool_name.c_str());
int retval = ctx->pool_name.length();
strcpy(s, pool_name.c_str());
int retval = pool_name.length();
tracepoint(librados, rados_ioctx_get_pool_name_exit, retval, s);
return retval;
}
src/test/librados_test_stub/LibradosTestStub.cc
return ctx->get_last_version();
}
std::string IoCtx::get_pool_name() {
std::string IoCtx::get_pool_name() const {
TestIoCtxImpl *ctx = reinterpret_cast<TestIoCtxImpl*>(io_ctx_impl);
return ctx->get_pool_name();
}
    (1-1/1)