mirror of
https://github.com/ceph/ceph
synced 2025-02-22 10:37:15 +00:00
Merge pull request #37977 from dillaman/wip-48145
librbd: update hidden global config when removing pool config override Reviewed-by: Mykola Golub <mgolub@suse.com>
This commit is contained in:
commit
c721fe806d
@ -17,6 +17,32 @@
|
||||
namespace librbd {
|
||||
namespace api {
|
||||
|
||||
namespace {
|
||||
|
||||
void update_pool_timestamp(librados::IoCtx& io_ctx) {
|
||||
CephContext *cct = (CephContext *)io_ctx.cct();
|
||||
|
||||
auto now = ceph_clock_now();
|
||||
std::string cmd =
|
||||
R"({)"
|
||||
R"("prefix": "config set", )"
|
||||
R"("who": "global", )"
|
||||
R"("name": "rbd_config_pool_override_update_timestamp", )"
|
||||
R"("value": ")" + stringify(now.sec()) + R"(")"
|
||||
R"(})";
|
||||
|
||||
librados::Rados rados(io_ctx);
|
||||
bufferlist in_bl;
|
||||
std::string ss;
|
||||
int r = rados.mon_command(cmd, in_bl, nullptr, &ss);
|
||||
if (r < 0) {
|
||||
lderr(cct) << "failed to notify clients of pool config update: "
|
||||
<< cpp_strerror(r) << dendl;
|
||||
}
|
||||
}
|
||||
|
||||
} // anonymous namespace
|
||||
|
||||
template <typename I>
|
||||
int PoolMetadata<I>::get(librados::IoCtx& io_ctx,
|
||||
const std::string &key, std::string *value) {
|
||||
@ -36,7 +62,7 @@ int PoolMetadata<I>::set(librados::IoCtx& io_ctx, const std::string &key,
|
||||
const std::string &value) {
|
||||
CephContext *cct = (CephContext *)io_ctx.cct();
|
||||
|
||||
bool update_pool_timestamp = false;
|
||||
bool need_update_pool_timestamp = false;
|
||||
|
||||
std::string config_key;
|
||||
if (util::is_metadata_config_override(key, &config_key)) {
|
||||
@ -52,7 +78,7 @@ int PoolMetadata<I>::set(librados::IoCtx& io_ctx, const std::string &key,
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
update_pool_timestamp = true;
|
||||
need_update_pool_timestamp = true;
|
||||
}
|
||||
|
||||
ceph::bufferlist bl;
|
||||
@ -65,24 +91,8 @@ int PoolMetadata<I>::set(librados::IoCtx& io_ctx, const std::string &key,
|
||||
return r;
|
||||
}
|
||||
|
||||
if (update_pool_timestamp) {
|
||||
auto now = ceph_clock_now();
|
||||
std::string cmd =
|
||||
R"({)"
|
||||
R"("prefix": "config set", )"
|
||||
R"("who": "global", )"
|
||||
R"("name": "rbd_config_pool_override_update_timestamp", )"
|
||||
R"("value": ")" + stringify(now.sec()) + R"(")"
|
||||
R"(})";
|
||||
|
||||
librados::Rados rados(io_ctx);
|
||||
bufferlist in_bl;
|
||||
std::string ss;
|
||||
r = rados.mon_command(cmd, in_bl, nullptr, &ss);
|
||||
if (r < 0) {
|
||||
lderr(cct) << "failed to notify clients of pool config update: "
|
||||
<< cpp_strerror(r) << dendl;
|
||||
}
|
||||
if (need_update_pool_timestamp) {
|
||||
update_pool_timestamp(io_ctx);
|
||||
}
|
||||
|
||||
return 0;
|
||||
@ -111,6 +121,11 @@ int PoolMetadata<I>::remove(librados::IoCtx& io_ctx, const std::string &key) {
|
||||
return r;
|
||||
}
|
||||
|
||||
std::string config_key;
|
||||
if (util::is_metadata_config_override(key, &config_key)) {
|
||||
update_pool_timestamp(io_ctx);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user