Bug #10458 ยป 20150122_10458_pool-name-caching-fix_v1.patch
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();
|
||
}
|