Change st_cli to pointer

This commit is contained in:
Vitaliy Filippov
2026-06-13 19:56:06 +03:00
parent 80fa3094b3
commit 26fb08d7da
46 changed files with 503 additions and 501 deletions
+4 -4
View File
@@ -35,7 +35,7 @@ struct alloc_osd_t
{ "target", "VERSION" },
{ "version", 0 },
{ "key", base64_encode(
parent->cli->st_cli.etcd_prefix+"/osd/stats/"+std::to_string(new_id)
parent->cli->st_cli->etcd_prefix+"/osd/stats/"+std::to_string(new_id)
) },
},
} },
@@ -43,7 +43,7 @@ struct alloc_osd_t
json11::Json::object {
{ "request_put", json11::Json::object {
{ "key", base64_encode(
parent->cli->st_cli.etcd_prefix+"/osd/stats/"+std::to_string(new_id)
parent->cli->st_cli->etcd_prefix+"/osd/stats/"+std::to_string(new_id)
) },
{ "value", base64_encode("{}") },
} },
@@ -52,8 +52,8 @@ struct alloc_osd_t
{ "failure", json11::Json::array {
json11::Json::object {
{ "request_range", json11::Json::object {
{ "key", base64_encode(parent->cli->st_cli.etcd_prefix+"/osd/stats/") },
{ "range_end", base64_encode(parent->cli->st_cli.etcd_prefix+"/osd/stats0") },
{ "key", base64_encode(parent->cli->st_cli->etcd_prefix+"/osd/stats/") },
{ "range_end", base64_encode(parent->cli->st_cli->etcd_prefix+"/osd/stats0") },
{ "keys_only", true },
} },
},
+13 -13
View File
@@ -8,8 +8,8 @@
void cli_tool_t::change_parent(inode_t cur, inode_t new_parent, cli_result_t *result)
{
auto cur_cfg_it = cli->st_cli.inode_config.find(cur);
if (cur_cfg_it == cli->st_cli.inode_config.end())
auto cur_cfg_it = cli->st_cli->inode_config.find(cur);
if (cur_cfg_it == cli->st_cli->inode_config.end())
{
char buf[128];
snprintf(buf, 128, "Inode 0x%jx disappeared", cur);
@@ -18,13 +18,13 @@ void cli_tool_t::change_parent(inode_t cur, inode_t new_parent, cli_result_t *re
}
inode_config_t new_cfg = cur_cfg_it->second;
std::string cur_name = new_cfg.name;
std::string cur_cfg_key = base64_encode(cli->st_cli.etcd_prefix+
std::string cur_cfg_key = base64_encode(cli->st_cli->etcd_prefix+
"/config/inode/"+std::to_string(INODE_POOL(cur))+
"/"+std::to_string(INODE_NO_POOL(cur)));
new_cfg.parent_id = new_parent;
json11::Json::object cur_cfg_json = cli->st_cli.serialize_inode_cfg(&new_cfg);
json11::Json::object cur_cfg_json = cli->st_cli->serialize_inode_cfg(&new_cfg);
waiting++;
cli->st_cli.etcd_txn_slow(json11::Json::object {
cli->st_cli->etcd_txn_slow(json11::Json::object {
{ "compare", json11::Json::array {
json11::Json::object {
{ "target", "MOD" },
@@ -53,8 +53,8 @@ void cli_tool_t::change_parent(inode_t cur, inode_t new_parent, cli_result_t *re
}
else if (new_parent)
{
auto new_parent_it = cli->st_cli.inode_config.find(new_parent);
std::string new_parent_name = new_parent_it != cli->st_cli.inode_config.end()
auto new_parent_it = cli->st_cli->inode_config.find(new_parent);
std::string new_parent_name = new_parent_it != cli->st_cli->inode_config.end()
? new_parent_it->second.name : "<unknown>";
*result = (cli_result_t){
.text = "Parent of layer "+cur_name+" (inode "+std::to_string(INODE_NO_POOL(cur))+
@@ -77,7 +77,7 @@ void cli_tool_t::change_parent(inode_t cur, inode_t new_parent, cli_result_t *re
void cli_tool_t::etcd_txn(json11::Json txn)
{
waiting++;
cli->st_cli.etcd_txn_slow(txn, [this](std::string err, json11::Json res)
cli->st_cli->etcd_txn_slow(txn, [this](std::string err, json11::Json res)
{
waiting--;
if (err != "")
@@ -91,7 +91,7 @@ void cli_tool_t::etcd_txn(json11::Json txn)
inode_config_t* cli_tool_t::get_inode_cfg(const std::string & name)
{
for (auto & ic: cli->st_cli.inode_config)
for (auto & ic: cli->st_cli->inode_config)
{
if (ic.second.name == name)
{
@@ -171,11 +171,11 @@ void cli_tool_t::iterate_kvs_1(json11::Json kvs, const std::string & prefix, std
bool is_pool = prefix == "/pool/stats/";
for (auto & kv_item: kvs.array_items())
{
auto kv = cli->st_cli.parse_etcd_kv(kv_item);
auto kv = cli->st_cli->parse_etcd_kv(kv_item);
uint64_t num = 0;
char null_byte = 0;
// OSD or pool number
int scanned = sscanf(kv.key.substr(cli->st_cli.etcd_prefix.size() + prefix.size()).c_str(), "%ju%c", &num, &null_byte);
int scanned = sscanf(kv.key.substr(cli->st_cli->etcd_prefix.size() + prefix.size()).c_str(), "%ju%c", &num, &null_byte);
if (scanned != 1 || !num || is_pool && num >= POOL_ID_MAX)
{
fprintf(stderr, "Invalid key in etcd: %s\n", kv.key.c_str());
@@ -190,12 +190,12 @@ void cli_tool_t::iterate_kvs_2(json11::Json kvs, const std::string & prefix, std
bool is_inode = prefix == "/config/inode/" || prefix == "/inode/stats/";
for (auto & kv_item: kvs.array_items())
{
auto kv = cli->st_cli.parse_etcd_kv(kv_item);
auto kv = cli->st_cli->parse_etcd_kv(kv_item);
pool_id_t pool_id = 0;
uint64_t num = 0;
char null_byte = 0;
// pool+pg or pool+inode
int scanned = sscanf(kv.key.substr(cli->st_cli.etcd_prefix.size() + prefix.size()).c_str(),
int scanned = sscanf(kv.key.substr(cli->st_cli->etcd_prefix.size() + prefix.size()).c_str(),
"%u/%ju%c", &pool_id, &num, &null_byte);
if (scanned != 2 || !pool_id || is_inode && INODE_POOL(num) || !is_inode && num >= UINT32_MAX)
{
+29 -29
View File
@@ -46,7 +46,7 @@ struct image_creator_t
void loop()
{
auto & pools = parent->cli->st_cli.pool_config;
auto & pools = parent->cli->st_cli->pool_config;
if (state >= 1)
goto resume_1;
if (image_name == "")
@@ -117,7 +117,7 @@ struct image_creator_t
goto resume_2;
else if (state == 3)
goto resume_3;
for (auto & ic: parent->cli->st_cli.inode_config)
for (auto & ic: parent->cli->st_cli->inode_config)
{
if (ic.second.name == image_name)
{
@@ -193,7 +193,7 @@ resume_3:
} while (!parent->etcd_result["succeeded"].bool_value());
// Save into inode_config for library users to be able to take it from there immediately
new_cfg.mod_revision = parent->etcd_result["header"]["revision"].uint64_value();
parent->cli->st_cli.insert_inode_config(new_cfg);
parent->cli->st_cli->insert_inode_config(new_cfg);
result = (cli_result_t){
.err = 0,
.text = "Image "+image_name+" created",
@@ -215,8 +215,8 @@ resume_3:
goto resume_3;
else if (state == 4)
goto resume_4;
// FIXME: take all info from etcd requests, not mixed with st_cli.inode_config
for (auto & ic: parent->cli->st_cli.inode_config)
// FIXME: take all info from etcd requests, not mixed with st_cli->inode_config
for (auto & ic: parent->cli->st_cli->inode_config)
{
if (ic.second.name == image_name+"@"+new_snap)
{
@@ -271,7 +271,7 @@ resume_4:
} while (!parent->etcd_result["succeeded"].bool_value());
// Save into inode_config for library users to be able to take it from there immediately
new_cfg.mod_revision = parent->etcd_result["header"]["revision"].uint64_value();
parent->cli->st_cli.insert_inode_config(new_cfg);
parent->cli->st_cli->insert_inode_config(new_cfg);
result = (cli_result_t){
.err = 0,
.text = "Snapshot "+image_name+"@"+new_snap+" created",
@@ -291,7 +291,7 @@ resume_4:
return json11::Json::object {
{ "request_range", json11::Json::object {
{ "key", base64_encode(
parent->cli->st_cli.etcd_prefix+"/index/maxid/"+std::to_string(new_pool_id)
parent->cli->st_cli->etcd_prefix+"/index/maxid/"+std::to_string(new_pool_id)
) },
} },
};
@@ -303,13 +303,13 @@ resume_4:
max_id_mod_rev = 0;
if (response["response_range"]["kvs"].array_items().size() > 0)
{
auto kv = parent->cli->st_cli.parse_etcd_kv(response["response_range"]["kvs"][0]);
auto kv = parent->cli->st_cli->parse_etcd_kv(response["response_range"]["kvs"][0]);
new_id = 1+INODE_NO_POOL(kv.value.uint64_value());
max_id_mod_rev = kv.mod_revision;
}
// Also check existing inodes - for the case when some inodes are created without changing /index/maxid
auto ino_it = parent->cli->st_cli.inode_config.lower_bound(INODE_WITH_POOL(new_pool_id+1, 0));
if (ino_it != parent->cli->st_cli.inode_config.begin())
auto ino_it = parent->cli->st_cli->inode_config.lower_bound(INODE_WITH_POOL(new_pool_id+1, 0));
if (ino_it != parent->cli->st_cli->inode_config.begin())
{
ino_it--;
if (INODE_POOL(ino_it->first) == new_pool_id && new_id < 1+INODE_NO_POOL(ino_it->first))
@@ -325,7 +325,7 @@ resume_4:
goto resume_3;
if (!new_pool_id)
{
for (auto & ic: parent->cli->st_cli.inode_config)
for (auto & ic: parent->cli->st_cli->inode_config)
{
if (ic.second.name == image_name)
{
@@ -339,7 +339,7 @@ resume_4:
json11::Json::object {
{ "request_range", json11::Json::object {
{ "key", base64_encode(
parent->cli->st_cli.etcd_prefix+"/index/image/"+image_name
parent->cli->st_cli->etcd_prefix+"/index/image/"+image_name
) },
} },
},
@@ -360,7 +360,7 @@ resume_2:
cfg_mod_rev = idx_mod_rev = 0;
if (parent->etcd_result["responses"][1]["response_range"]["kvs"].array_items().size() == 0)
{
for (auto & ic: parent->cli->st_cli.inode_config)
for (auto & ic: parent->cli->st_cli->inode_config)
{
if (ic.second.name == image_name)
{
@@ -377,7 +377,7 @@ resume_2:
{
// FIXME: Parse kvs in etcd_state_client automatically
{
auto kv = parent->cli->st_cli.parse_etcd_kv(parent->etcd_result["responses"][1]["response_range"]["kvs"][0]);
auto kv = parent->cli->st_cli->parse_etcd_kv(parent->etcd_result["responses"][1]["response_range"]["kvs"][0]);
old_id = INODE_NO_POOL(kv.value["id"].uint64_value());
old_pool_id = (pool_id_t)kv.value["pool_id"].uint64_value();
idx_mod_rev = kv.mod_revision;
@@ -393,7 +393,7 @@ resume_2:
json11::Json::object {
{ "request_range", json11::Json::object {
{ "key", base64_encode(
parent->cli->st_cli.etcd_prefix+"/config/inode/"+
parent->cli->st_cli->etcd_prefix+"/config/inode/"+
std::to_string(old_pool_id)+"/"+std::to_string(old_id)
) },
} },
@@ -411,7 +411,7 @@ resume_3:
return;
}
{
auto kv = parent->cli->st_cli.parse_etcd_kv(parent->etcd_result["responses"][0]["response_range"]["kvs"][0]);
auto kv = parent->cli->st_cli->parse_etcd_kv(parent->etcd_result["responses"][0]["response_range"]["kvs"][0]);
size = kv.value["size"].uint64_value();
new_parent_id = kv.value["parent_id"].uint64_value();
uint64_t parent_pool_id = kv.value["parent_pool"].uint64_value();
@@ -439,7 +439,7 @@ resume_3:
{ "target", "VERSION" },
{ "version", 0 },
{ "key", base64_encode(
parent->cli->st_cli.etcd_prefix+"/config/inode/"+
parent->cli->st_cli->etcd_prefix+"/config/inode/"+
std::to_string(new_pool_id)+"/"+std::to_string(new_id)
) },
},
@@ -447,31 +447,31 @@ resume_3:
{ "target", "VERSION" },
{ "version", 0 },
{ "key", base64_encode(
parent->cli->st_cli.etcd_prefix+"/index/image/"+image_name+
parent->cli->st_cli->etcd_prefix+"/index/image/"+image_name+
(new_snap != "" ? "@"+new_snap : "")
) },
},
json11::Json::object {
{ "target", "MOD" },
{ "mod_revision", max_id_mod_rev },
{ "key", base64_encode(parent->cli->st_cli.etcd_prefix+"/index/maxid/"+std::to_string(new_pool_id)) },
{ "key", base64_encode(parent->cli->st_cli->etcd_prefix+"/index/maxid/"+std::to_string(new_pool_id)) },
},
};
json11::Json::array success = json11::Json::array {
json11::Json::object {
{ "request_put", json11::Json::object {
{ "key", base64_encode(
parent->cli->st_cli.etcd_prefix+"/config/inode/"+
parent->cli->st_cli->etcd_prefix+"/config/inode/"+
std::to_string(new_pool_id)+"/"+std::to_string(new_id)
) },
{ "value", base64_encode(
json11::Json(parent->cli->st_cli.serialize_inode_cfg(&new_cfg)).dump()
json11::Json(parent->cli->st_cli->serialize_inode_cfg(&new_cfg)).dump()
) },
} },
},
json11::Json::object {
{ "request_put", json11::Json::object {
{ "key", base64_encode(parent->cli->st_cli.etcd_prefix+"/index/image/"+image_name) },
{ "key", base64_encode(parent->cli->st_cli->etcd_prefix+"/index/image/"+image_name) },
{ "value", base64_encode(json11::Json(json11::Json::object{
{ "id", new_id },
{ "pool_id", (uint64_t)new_pool_id },
@@ -481,7 +481,7 @@ resume_3:
json11::Json::object {
{ "request_put", json11::Json::object {
{ "key", base64_encode(
parent->cli->st_cli.etcd_prefix+"/index/maxid/"+
parent->cli->st_cli->etcd_prefix+"/index/maxid/"+
std::to_string(new_pool_id)
) },
{ "value", base64_encode(std::to_string(new_id)) }
@@ -492,7 +492,7 @@ resume_3:
json11::Json::object {
{ "request_range", json11::Json::object {
{ "key", base64_encode(
parent->cli->st_cli.etcd_prefix+"/index/image/"+
parent->cli->st_cli->etcd_prefix+"/index/image/"+
image_name+(new_snap != "" ? "@"+new_snap : "")
) },
} },
@@ -511,29 +511,29 @@ resume_3:
{ "target", "MOD" },
{ "mod_revision", cfg_mod_rev },
{ "key", base64_encode(
parent->cli->st_cli.etcd_prefix+"/config/inode/"+
parent->cli->st_cli->etcd_prefix+"/config/inode/"+
std::to_string(old_pool_id)+"/"+std::to_string(old_id)
) },
});
checks.push_back(json11::Json::object {
{ "target", "MOD" },
{ "mod_revision", idx_mod_rev },
{ "key", base64_encode(parent->cli->st_cli.etcd_prefix+"/index/image/"+image_name) }
{ "key", base64_encode(parent->cli->st_cli->etcd_prefix+"/index/image/"+image_name) }
});
success.push_back(json11::Json::object {
{ "request_put", json11::Json::object {
{ "key", base64_encode(
parent->cli->st_cli.etcd_prefix+"/config/inode/"+
parent->cli->st_cli->etcd_prefix+"/config/inode/"+
std::to_string(old_pool_id)+"/"+std::to_string(old_id)
) },
{ "value", base64_encode(
json11::Json(parent->cli->st_cli.serialize_inode_cfg(&snap_cfg)).dump()
json11::Json(parent->cli->st_cli->serialize_inode_cfg(&snap_cfg)).dump()
) },
} },
});
success.push_back(json11::Json::object {
{ "request_put", json11::Json::object {
{ "key", base64_encode(parent->cli->st_cli.etcd_prefix+"/index/image/"+image_name+"@"+new_snap) },
{ "key", base64_encode(parent->cli->st_cli->etcd_prefix+"/index/image/"+image_name+"@"+new_snap) },
{ "value", base64_encode(json11::Json(json11::Json::object{
{ "id", old_id },
{ "pool_id", (uint64_t)old_pool_id },
+19 -19
View File
@@ -52,19 +52,19 @@ struct dd_in_info_t
in_seekable = true;
if (iimg != "")
{
iwatch = parent->cli->st_cli.watch_inode(iimg);
iwatch = parent->cli->st_cli->watch_inode(iimg);
if (!iwatch->cfg.num)
{
result = (cli_result_t){ .err = ENOENT, .text = "Image "+iimg+" does not exist" };
parent->cli->st_cli.close_watch(iwatch);
parent->cli->st_cli->close_watch(iwatch);
iwatch = NULL;
return;
}
auto pool_it = parent->cli->st_cli.pool_config.find(INODE_POOL(iwatch->cfg.num));
if (pool_it == parent->cli->st_cli.pool_config.end())
auto pool_it = parent->cli->st_cli->pool_config.find(INODE_POOL(iwatch->cfg.num));
if (pool_it == parent->cli->st_cli->pool_config.end())
{
result = (cli_result_t){ .err = ENOENT, .text = "Pool of image "+iimg+" does not exist" };
parent->cli->st_cli.close_watch(iwatch);
parent->cli->st_cli->close_watch(iwatch);
iwatch = NULL;
return;
}
@@ -131,7 +131,7 @@ struct dd_in_info_t
{
if (iimg != "")
{
parent->cli->st_cli.close_watch(iwatch);
parent->cli->st_cli->close_watch(iwatch);
iwatch = NULL;
}
else if (ifile != "")
@@ -163,11 +163,11 @@ struct dd_out_info_t
pool_config_t *find_pool(cli_tool_t *parent, const std::string & name)
{
if (name == "" && parent->cli->st_cli.pool_config.size() == 1)
if (name == "" && parent->cli->st_cli->pool_config.size() == 1)
{
return &parent->cli->st_cli.pool_config.begin()->second;
return &parent->cli->st_cli->pool_config.begin()->second;
}
for (auto & pp: parent->cli->st_cli.pool_config)
for (auto & pp: parent->cli->st_cli->pool_config)
{
if (pp.second.name == name)
{
@@ -186,14 +186,14 @@ struct dd_out_info_t
if (oimg != "")
{
out_seekable = true;
owatch = parent->cli->st_cli.watch_inode(oimg);
owatch = parent->cli->st_cli->watch_inode(oimg);
if (owatch->cfg.num)
{
auto pool_it = parent->cli->st_cli.pool_config.find(INODE_POOL(owatch->cfg.num));
if (pool_it == parent->cli->st_cli.pool_config.end())
auto pool_it = parent->cli->st_cli->pool_config.find(INODE_POOL(owatch->cfg.num));
if (pool_it == parent->cli->st_cli->pool_config.end())
{
result = (cli_result_t){ .err = ENOENT, .text = "Pool of image "+oimg+" does not exist" };
parent->cli->st_cli.close_watch(owatch);
parent->cli->st_cli->close_watch(owatch);
owatch = NULL;
return true;
}
@@ -209,7 +209,7 @@ struct dd_out_info_t
else
{
result = (cli_result_t){ .err = ENOENT, .text = "Pool to create output image "+oimg+" is not specified" };
parent->cli->st_cli.close_watch(owatch);
parent->cli->st_cli->close_watch(owatch);
owatch = NULL;
return true;
}
@@ -224,14 +224,14 @@ struct dd_out_info_t
if (!out_create)
{
result = (cli_result_t){ .err = ENOENT, .text = "Image "+oimg+" does not exist" };
parent->cli->st_cli.close_watch(owatch);
parent->cli->st_cli->close_watch(owatch);
owatch = NULL;
return true;
}
if (!out_size)
{
result = (cli_result_t){ .err = ENOENT, .text = "Input size is unknown, specify size to create output image "+oimg };
parent->cli->st_cli.close_watch(owatch);
parent->cli->st_cli->close_watch(owatch);
owatch = NULL;
return true;
}
@@ -247,7 +247,7 @@ struct dd_out_info_t
if (!out_size)
{
result = (cli_result_t){ .err = ENOENT, .text = "Input size is unknown, specify size to truncate output image" };
parent->cli->st_cli.close_watch(owatch);
parent->cli->st_cli->close_watch(owatch);
owatch = NULL;
return true;
}
@@ -275,7 +275,7 @@ resume_1:
sub_cb = NULL;
if (result.err)
{
parent->cli->st_cli.close_watch(owatch);
parent->cli->st_cli->close_watch(owatch);
owatch = NULL;
return true;
}
@@ -354,7 +354,7 @@ resume_2:
{
if (oimg != "")
{
parent->cli->st_cli.close_watch(owatch);
parent->cli->st_cli->close_watch(owatch);
owatch = NULL;
}
else
+2 -2
View File
@@ -60,7 +60,7 @@ struct cli_describe_t
only_pool = cfg["pool"].uint64_value();
if (!only_pool && cfg["pool"].is_string())
{
for (auto & pp: parent->cli->st_cli.pool_config)
for (auto & pp: parent->cli->st_cli->pool_config)
{
if (pp.second.name == cfg["pool"].string_value())
{
@@ -125,7 +125,7 @@ struct cli_describe_t
{
uint64_t min_pool = min_inode >> (64-POOL_ID_BITS);
uint64_t max_pool = max_inode >> (64-POOL_ID_BITS);
for (auto & pp: parent->cli->st_cli.pool_config)
for (auto & pp: parent->cli->st_cli->pool_config)
{
if (pp.first >= min_pool && (!max_pool || pp.first <= max_pool))
{
+2 -2
View File
@@ -134,8 +134,8 @@ struct cli_fix_t
return;
}
auto & obj = objects[processed_count++];
auto pool_cfg_it = parent->cli->st_cli.pool_config.find(INODE_POOL(obj.inode));
if (pool_cfg_it == parent->cli->st_cli.pool_config.end())
auto pool_cfg_it = parent->cli->st_cli->pool_config.find(INODE_POOL(obj.inode));
if (pool_cfg_it == parent->cli->st_cli->pool_config.end())
{
fprintf(stderr, "Object %jx:%jx is from unknown pool\n", obj.inode, obj.stripe);
continue;
+2 -2
View File
@@ -41,8 +41,8 @@ struct snap_flattener_t
chain_list.push_back(cur->num);
while (cur->parent_id != 0 && cur->parent_id != target_cfg->num)
{
auto it = parent->cli->st_cli.inode_config.find(cur->parent_id);
if (it == parent->cli->st_cli.inode_config.end())
auto it = parent->cli->st_cli->inode_config.find(cur->parent_id);
if (it == parent->cli->st_cli->inode_config.end())
{
result = (cli_result_t){
.err = ENOENT,
+18 -18
View File
@@ -37,7 +37,7 @@ struct image_lister_t
{
if (list_pool_name != "")
{
for (auto & ic: parent->cli->st_cli.pool_config)
for (auto & ic: parent->cli->st_cli->pool_config)
{
if (ic.second.name == list_pool_name)
{
@@ -52,14 +52,14 @@ struct image_lister_t
return;
}
}
for (auto & ic: parent->cli->st_cli.inode_config)
for (auto & ic: parent->cli->st_cli->inode_config)
{
if (list_pool_id && INODE_POOL(ic.second.num) != list_pool_id)
{
continue;
}
auto pool_it = parent->cli->st_cli.pool_config.find(INODE_POOL(ic.second.num));
bool good_pool = pool_it != parent->cli->st_cli.pool_config.end();
auto pool_it = parent->cli->st_cli->pool_config.find(INODE_POOL(ic.second.num));
bool good_pool = pool_it != parent->cli->st_cli->pool_config.end();
auto item = json11::Json::object {
{ "name", ic.second.name },
{ "size", ic.second.size },
@@ -73,8 +73,8 @@ struct image_lister_t
};
if (ic.second.parent_id)
{
auto p_it = parent->cli->st_cli.inode_config.find(ic.second.parent_id);
item["parent_name"] = p_it != parent->cli->st_cli.inode_config.end()
auto p_it = parent->cli->st_cli->inode_config.find(ic.second.parent_id);
item["parent_name"] = p_it != parent->cli->st_cli->inode_config.end()
? p_it->second.name : "";
item["parent_pool_id"] = (uint64_t)INODE_POOL(ic.second.parent_id);
item["parent_inode_num"] = INODE_NO_POOL(ic.second.parent_id);
@@ -96,21 +96,21 @@ struct image_lister_t
json11::Json::object {
{ "request_range", (list_pool_id
? json11::Json::object {
{ "key", base64_encode(parent->cli->st_cli.etcd_prefix+"/pool/stats/"+std::to_string(list_pool_id)) },
{ "key", base64_encode(parent->cli->st_cli->etcd_prefix+"/pool/stats/"+std::to_string(list_pool_id)) },
}
: json11::Json::object {
{ "key", base64_encode(parent->cli->st_cli.etcd_prefix+"/pool/stats/") },
{ "range_end", base64_encode(parent->cli->st_cli.etcd_prefix+"/pool/stats0") },
{ "key", base64_encode(parent->cli->st_cli->etcd_prefix+"/pool/stats/") },
{ "range_end", base64_encode(parent->cli->st_cli->etcd_prefix+"/pool/stats0") },
}) },
},
json11::Json::object {
{ "request_range", json11::Json::object {
{ "key", base64_encode(
parent->cli->st_cli.etcd_prefix+"/inode/stats"+
parent->cli->st_cli->etcd_prefix+"/inode/stats"+
(list_pool_id ? "/"+std::to_string(list_pool_id) : "")+"/"
) },
{ "range_end", base64_encode(
parent->cli->st_cli.etcd_prefix+"/inode/stats"+
parent->cli->st_cli->etcd_prefix+"/inode/stats"+
(list_pool_id ? "/"+std::to_string(list_pool_id) : "")+"0"
) },
} },
@@ -131,11 +131,11 @@ resume_1:
std::map<pool_id_t, uint64_t> pool_pg_real_size;
for (auto & kv_item: space_info["responses"][0]["response_range"]["kvs"].array_items())
{
auto kv = parent->cli->st_cli.parse_etcd_kv(kv_item);
auto kv = parent->cli->st_cli->parse_etcd_kv(kv_item);
// pool ID
pool_id_t pool_id;
char null_byte = 0;
int scanned = sscanf(kv.key.substr(parent->cli->st_cli.etcd_prefix.length()).c_str(), "/pool/stats/%u%c", &pool_id, &null_byte);
int scanned = sscanf(kv.key.substr(parent->cli->st_cli->etcd_prefix.length()).c_str(), "/pool/stats/%u%c", &pool_id, &null_byte);
if (scanned != 1 || !pool_id || pool_id >= POOL_ID_MAX)
{
fprintf(stderr, "Invalid key in etcd: %s\n", kv.key.c_str());
@@ -146,12 +146,12 @@ resume_1:
}
for (auto & kv_item: space_info["responses"][1]["response_range"]["kvs"].array_items())
{
auto kv = parent->cli->st_cli.parse_etcd_kv(kv_item);
auto kv = parent->cli->st_cli->parse_etcd_kv(kv_item);
// pool ID & inode number
pool_id_t pool_id;
inode_t only_inode_num;
char null_byte = 0;
int scanned = sscanf(kv.key.substr(parent->cli->st_cli.etcd_prefix.length()).c_str(),
int scanned = sscanf(kv.key.substr(parent->cli->st_cli->etcd_prefix.length()).c_str(),
"/inode/stats/%u/%ju%c", &pool_id, &only_inode_num, &null_byte);
if (scanned != 2 || !pool_id || pool_id >= POOL_ID_MAX || INODE_POOL(only_inode_num) != 0)
{
@@ -161,8 +161,8 @@ resume_1:
inode_t inode_num = INODE_WITH_POOL(pool_id, only_inode_num);
uint64_t used_size = kv.value["raw_used"].uint64_value();
// save stats
auto pool_it = parent->cli->st_cli.pool_config.find(pool_id);
if (pool_it != parent->cli->st_cli.pool_config.end())
auto pool_it = parent->cli->st_cli->pool_config.find(pool_id);
if (pool_it != parent->cli->st_cli->pool_config.end())
{
auto & pool_cfg = pool_it->second;
used_size = used_size / (pool_pg_real_size[pool_id] ? pool_pg_real_size[pool_id] : 1)
@@ -176,7 +176,7 @@ resume_1:
{ "size", 0 },
{ "readonly", false },
{ "pool_id", (uint64_t)INODE_POOL(inode_num) },
{ "pool_name", pool_it != parent->cli->st_cli.pool_config.end()
{ "pool_name", pool_it != parent->cli->st_cli->pool_config.end()
? (pool_it->second.name == "" ? "<Unnamed>" : pool_it->second.name) : "?" },
{ "inode_num", INODE_NO_POOL(inode_num) },
{ "inode_id", inode_num },
+6 -6
View File
@@ -110,8 +110,8 @@ struct snap_merger_t
cur->parent_id != to_cfg->num &&
cur->parent_id != 0)
{
auto it = parent->cli->st_cli.inode_config.find(cur->parent_id);
if (it == parent->cli->st_cli.inode_config.end())
auto it = parent->cli->st_cli->inode_config.find(cur->parent_id);
if (it == parent->cli->st_cli->inode_config.end())
{
result = (cli_result_t){
.err = ENOENT,
@@ -166,7 +166,7 @@ struct snap_merger_t
//
// <from> - <layer 1> - <target> - <to>
// \- <layer 2> <---------X-------- NOT ALLOWED
for (auto & ic: parent->cli->st_cli.inode_config)
for (auto & ic: parent->cli->st_cli->inode_config)
{
auto it = sources.find(ic.second.num);
if (it == sources.end() && ic.second.parent_id != 0)
@@ -182,7 +182,7 @@ struct snap_merger_t
.text = "Layers at or above "+(check_delete_source ? from_name : target_name)+
", but below "+to_name+" are not allowed to have other children, but "+
ic.second.name+" is a child of "+
parent->cli->st_cli.inode_config.at(ic.second.parent_id).name,
parent->cli->st_cli->inode_config.at(ic.second.parent_id).name,
};
state = 100;
return;
@@ -213,7 +213,7 @@ struct snap_merger_t
uint64_t get_block_size(inode_t inode, uint32_t *bitmap_granularity)
{
auto & pool_cfg = parent->cli->st_cli.pool_config.at(INODE_POOL(inode));
auto & pool_cfg = parent->cli->st_cli->pool_config.at(INODE_POOL(inode));
uint64_t pg_data_size = (pool_cfg.scheme == POOL_SCHEME_REPLICATED ? 1 : pool_cfg.pg_size-pool_cfg.parity_chunks);
if (bitmap_granularity)
*bitmap_granularity = pool_cfg.bitmap_granularity;
@@ -418,7 +418,7 @@ struct snap_merger_t
}
if (!pgs_left)
{
auto & name = parent->cli->st_cli.inode_config.at(src).name;
auto & name = parent->cli->st_cli->inode_config.at(src).name;
if (list_errcode.find(src) != list_errcode.end())
{
fprintf(stderr, "Failed to get listing of layer %s (inode %ju in pool %u): %s (code %d)\n",
+8 -8
View File
@@ -53,7 +53,7 @@ struct image_changer_t
state = 100;
return;
}
for (auto & ic: parent->cli->st_cli.inode_config)
for (auto & ic: parent->cli->st_cli->inode_config)
{
if (ic.second.name == image_name)
{
@@ -74,7 +74,7 @@ struct image_changer_t
state = 100;
return;
}
for (auto & ic: parent->cli->st_cli.inode_config)
for (auto & ic: parent->cli->st_cli->inode_config)
{
if (ic.second.parent_id == inode_num)
{
@@ -153,7 +153,7 @@ resume_1:
cfg.name = new_name;
}
{
std::string cur_cfg_key = base64_encode(parent->cli->st_cli.etcd_prefix+
std::string cur_cfg_key = base64_encode(parent->cli->st_cli->etcd_prefix+
"/config/inode/"+std::to_string(INODE_POOL(inode_num))+
"/"+std::to_string(INODE_NO_POOL(inode_num)));
checks.push_back(json11::Json::object {
@@ -166,7 +166,7 @@ resume_1:
{ "request_put", json11::Json::object {
{ "key", cur_cfg_key },
{ "value", base64_encode(json11::Json(
parent->cli->st_cli.serialize_inode_cfg(&cfg)
parent->cli->st_cli->serialize_inode_cfg(&cfg)
).dump()) },
} }
});
@@ -174,10 +174,10 @@ resume_1:
if (new_name != "")
{
std::string old_idx_key = base64_encode(
parent->cli->st_cli.etcd_prefix+"/index/image/"+image_name
parent->cli->st_cli->etcd_prefix+"/index/image/"+image_name
);
std::string new_idx_key = base64_encode(
parent->cli->st_cli.etcd_prefix+"/index/image/"+new_name
parent->cli->st_cli->etcd_prefix+"/index/image/"+new_name
);
checks.push_back(json11::Json::object {
{ "target", "MOD" },
@@ -229,9 +229,9 @@ resume_2:
cfg.mod_revision = parent->etcd_result["header"]["revision"].uint64_value();
if (new_name != "")
{
parent->cli->st_cli.inode_by_name.erase(image_name);
parent->cli->st_cli->inode_by_name.erase(image_name);
}
parent->cli->st_cli.insert_inode_config(cfg);
parent->cli->st_cli->insert_inode_config(cfg);
result = (cli_result_t){
.err = 0,
.text = "Image "+image_name+" modified",
+8 -8
View File
@@ -68,12 +68,12 @@ struct osd_changer_t
{ "success", json11::Json::array {
json11::Json::object {
{ "request_range", json11::Json::object {
{ "key", base64_encode(parent->cli->st_cli.etcd_prefix+"/osd/stats/"+std::to_string(osd_num)) },
{ "key", base64_encode(parent->cli->st_cli->etcd_prefix+"/osd/stats/"+std::to_string(osd_num)) },
} },
},
json11::Json::object {
{ "request_range", json11::Json::object {
{ "key", base64_encode(parent->cli->st_cli.etcd_prefix+"/config/osd/"+std::to_string(osd_num)) },
{ "key", base64_encode(parent->cli->st_cli->etcd_prefix+"/config/osd/"+std::to_string(osd_num)) },
} },
},
} },
@@ -89,14 +89,14 @@ resume_1:
return;
}
{
auto osd_stats = parent->cli->st_cli.parse_etcd_kv(parent->etcd_result["responses"][0]["response_range"]["kvs"][0]).value;
auto osd_stats = parent->cli->st_cli->parse_etcd_kv(parent->etcd_result["responses"][0]["response_range"]["kvs"][0]).value;
if (!osd_stats.is_object() && !force)
{
result = (cli_result_t){ .err = ENOENT, .text = "OSD "+std::to_string(osd_num)+" does not exist. Use --force to set configuration anyway" };
state = 100;
return;
}
auto kv = parent->cli->st_cli.parse_etcd_kv(parent->etcd_result["responses"][1]["response_range"]["kvs"][0]);
auto kv = parent->cli->st_cli->parse_etcd_kv(parent->etcd_result["responses"][1]["response_range"]["kvs"][0]);
osd_cfg_mod_rev = kv.mod_revision;
osd_cfg = kv.value.object_items();
if (set_reweight)
@@ -124,7 +124,7 @@ resume_1:
{
compare.push_back(json11::Json::object {
{ "target", "MOD" },
{ "key", base64_encode(parent->cli->st_cli.etcd_prefix+"/config/osd/"+std::to_string(osd_num)) },
{ "key", base64_encode(parent->cli->st_cli->etcd_prefix+"/config/osd/"+std::to_string(osd_num)) },
{ "result", "LESS" },
{ "mod_revision", osd_cfg_mod_rev+1 },
});
@@ -133,7 +133,7 @@ resume_1:
{
compare.push_back(json11::Json::object {
{ "target", "VERSION" },
{ "key", base64_encode(parent->cli->st_cli.etcd_prefix+"/config/osd/"+std::to_string(osd_num)) },
{ "key", base64_encode(parent->cli->st_cli->etcd_prefix+"/config/osd/"+std::to_string(osd_num)) },
{ "version", 0 },
});
}
@@ -141,7 +141,7 @@ resume_1:
{
success.push_back(json11::Json::object {
{ "request_delete_range", json11::Json::object {
{ "key", base64_encode(parent->cli->st_cli.etcd_prefix+"/config/osd/"+std::to_string(osd_num)) },
{ "key", base64_encode(parent->cli->st_cli->etcd_prefix+"/config/osd/"+std::to_string(osd_num)) },
} },
});
}
@@ -149,7 +149,7 @@ resume_1:
{
success.push_back(json11::Json::object {
{ "request_put", json11::Json::object {
{ "key", base64_encode(parent->cli->st_cli.etcd_prefix+"/config/osd/"+std::to_string(osd_num)) },
{ "key", base64_encode(parent->cli->st_cli->etcd_prefix+"/config/osd/"+std::to_string(osd_num)) },
{ "value", base64_encode(json11::Json(osd_cfg).dump()) },
} },
});
+7 -7
View File
@@ -62,19 +62,19 @@ struct osd_tree_printer_t
{ "success", json11::Json::array {
json11::Json::object {
{ "request_range", json11::Json::object {
{ "key", base64_encode(parent->cli->st_cli.etcd_prefix+"/config/node_placement") },
{ "key", base64_encode(parent->cli->st_cli->etcd_prefix+"/config/node_placement") },
} },
},
json11::Json::object {
{ "request_range", json11::Json::object {
{ "key", base64_encode(parent->cli->st_cli.etcd_prefix+"/config/osd/") },
{ "range_end", base64_encode(parent->cli->st_cli.etcd_prefix+"/config/osd0") },
{ "key", base64_encode(parent->cli->st_cli->etcd_prefix+"/config/osd/") },
{ "range_end", base64_encode(parent->cli->st_cli->etcd_prefix+"/config/osd0") },
} },
},
json11::Json::object {
{ "request_range", json11::Json::object {
{ "key", base64_encode(parent->cli->st_cli.etcd_prefix+"/osd/stats/") },
{ "range_end", base64_encode(parent->cli->st_cli.etcd_prefix+"/osd/stats0") },
{ "key", base64_encode(parent->cli->st_cli->etcd_prefix+"/osd/stats/") },
{ "range_end", base64_encode(parent->cli->st_cli->etcd_prefix+"/osd/stats0") },
} },
},
} },
@@ -91,7 +91,7 @@ resume_1:
}
for (auto & item: parent->etcd_result["responses"][0]["response_range"]["kvs"].array_items())
{
node_placement = parent->cli->st_cli.parse_etcd_kv(item).value;
node_placement = parent->cli->st_cli->parse_etcd_kv(item).value;
}
parent->iterate_kvs_1(parent->etcd_result["responses"][1]["response_range"]["kvs"], "/config/osd/", [&](uint64_t cur_osd, json11::Json value)
{
@@ -132,7 +132,7 @@ resume_1:
.parent = kv.second["host"].string_value(),
.size = kv.second["size"].uint64_value(),
.free = kv.second["free"].uint64_value(),
.up = parent->cli->st_cli.peer_states.find(kv.first) != parent->cli->st_cli.peer_states.end(),
.up = parent->cli->st_cli->peer_states.find(kv.first) != parent->cli->st_cli->peer_states.end(),
.reweight = 1,
.noout = false,
.block_size = (uint32_t)kv.second["data_block_size"].uint64_value(),
+4 -4
View File
@@ -32,7 +32,7 @@ struct pg_lister_t
if (pool_name != "")
{
pool_id = 0;
for (auto & pp: parent->cli->st_cli.pool_config)
for (auto & pp: parent->cli->st_cli->pool_config)
{
if (pp.second.name == pool_name)
{
@@ -51,8 +51,8 @@ struct pg_lister_t
{ "success", json11::Json::array {
json11::Json::object {
{ "request_range", json11::Json::object {
{ "key", base64_encode(parent->cli->st_cli.etcd_prefix+"/pgstats"+(pool_id ? "/"+std::to_string(pool_id)+"/" : "/")) },
{ "range_end", base64_encode(parent->cli->st_cli.etcd_prefix+"/pgstats"+(pool_id ? "/"+std::to_string(pool_id)+"0" : "0")) },
{ "key", base64_encode(parent->cli->st_cli->etcd_prefix+"/pgstats"+(pool_id ? "/"+std::to_string(pool_id)+"/" : "/")) },
{ "range_end", base64_encode(parent->cli->st_cli->etcd_prefix+"/pgstats"+(pool_id ? "/"+std::to_string(pool_id)+"0" : "0")) },
} },
},
} },
@@ -129,7 +129,7 @@ resume_1:
}
}
json11::Json::array pgs;
for (auto & pp: parent->cli->st_cli.pool_config)
for (auto & pp: parent->cli->st_cli->pool_config)
{
if ((!pool_id || pp.first == pool_id) && (pool_name == "" || pp.second.name == pool_name))
{
+21 -21
View File
@@ -60,8 +60,8 @@ struct pool_creator_t
// Validate pool parameters
{
auto new_cfg = cfg.object_items();
result.text = validate_pool_config(new_cfg, json11::Json(), parent->cli->st_cli.global_block_size,
parent->cli->st_cli.global_bitmap_granularity, force);
result.text = validate_pool_config(new_cfg, json11::Json(), parent->cli->st_cli->global_block_size,
parent->cli->st_cli->global_bitmap_granularity, force);
cfg = new_cfg;
}
if (result.text != "")
@@ -72,7 +72,7 @@ struct pool_creator_t
}
// Validate pool name
for (auto & pp: parent->cli->st_cli.pool_config)
for (auto & pp: parent->cli->st_cli->pool_config)
{
if (pp.second.name == cfg["name"].string_value())
{
@@ -95,13 +95,13 @@ resume_1:
{ "success", json11::Json::array {
json11::Json::object {
{ "request_range", json11::Json::object {
{ "key", base64_encode(parent->cli->st_cli.etcd_prefix+"/config/node_placement") },
{ "key", base64_encode(parent->cli->st_cli->etcd_prefix+"/config/node_placement") },
} },
},
json11::Json::object {
{ "request_range", json11::Json::object {
{ "key", base64_encode(parent->cli->st_cli.etcd_prefix+"/osd/stats/") },
{ "range_end", base64_encode(parent->cli->st_cli.etcd_prefix+"/osd/stats0") },
{ "key", base64_encode(parent->cli->st_cli->etcd_prefix+"/osd/stats/") },
{ "range_end", base64_encode(parent->cli->st_cli->etcd_prefix+"/osd/stats0") },
} },
},
} },
@@ -120,7 +120,7 @@ resume_2:
// Get state_node_tree based on node_placement and osd stats
{
auto node_placement_kv = parent->cli->st_cli.parse_etcd_kv(parent->etcd_result["responses"][0]["response_range"]["kvs"][0]);
auto node_placement_kv = parent->cli->st_cli->parse_etcd_kv(parent->etcd_result["responses"][0]["response_range"]["kvs"][0]);
timespec tv_now;
clock_gettime(CLOCK_REALTIME, &tv_now);
uint64_t osd_out_time = parent->cli->config["osd_out_time"].uint64_value();
@@ -145,7 +145,7 @@ resume_2:
{
osd_configs.push_back(json11::Json::object {
{ "request_range", json11::Json::object {
{ "key", base64_encode(parent->cli->st_cli.etcd_prefix+"/config/osd/"+osd_num.as_string()) },
{ "key", base64_encode(parent->cli->st_cli->etcd_prefix+"/config/osd/"+osd_num.as_string()) },
} }
});
}
@@ -168,7 +168,7 @@ resume_3:
std::vector<json11::Json> osd_configs;
for (auto & ocr: parent->etcd_result["responses"].array_items())
{
auto kv = parent->cli->st_cli.parse_etcd_kv(ocr["response_range"]["kvs"][0]);
auto kv = parent->cli->st_cli->parse_etcd_kv(ocr["response_range"]["kvs"][0]);
osd_configs.push_back(kv.value);
}
state_node_tree = filter_state_node_tree_by_tags(state_node_tree, osd_configs);
@@ -229,7 +229,7 @@ resume_5:
{ "success", json11::Json::array {
json11::Json::object {
{ "request_range", json11::Json::object {
{ "key", base64_encode(parent->cli->st_cli.etcd_prefix+"/config/pools") },
{ "key", base64_encode(parent->cli->st_cli->etcd_prefix+"/config/pools") },
} }
},
} },
@@ -246,7 +246,7 @@ resume_6:
}
{
// Add new pool
auto kv = parent->cli->st_cli.parse_etcd_kv(parent->etcd_result["responses"][0]["response_range"]["kvs"][0]);
auto kv = parent->cli->st_cli->parse_etcd_kv(parent->etcd_result["responses"][0]["response_range"]["kvs"][0]);
new_pools = create_pool(kv);
if (new_pools.is_string())
{
@@ -261,7 +261,7 @@ resume_6:
{ "compare", json11::Json::array {
json11::Json::object {
{ "target", "MOD" },
{ "key", base64_encode(parent->cli->st_cli.etcd_prefix+"/config/pools") },
{ "key", base64_encode(parent->cli->st_cli->etcd_prefix+"/config/pools") },
{ "result", "LESS" },
{ "mod_revision", new_pools_mod_rev+1 },
}
@@ -269,7 +269,7 @@ resume_6:
{ "success", json11::Json::array {
json11::Json::object {
{ "request_put", json11::Json::object {
{ "key", base64_encode(parent->cli->st_cli.etcd_prefix+"/config/pools") },
{ "key", base64_encode(parent->cli->st_cli->etcd_prefix+"/config/pools") },
{ "value", base64_encode(new_pools.dump()) },
} },
},
@@ -307,9 +307,9 @@ resume_8:
parent->waiting++;
parent->epmgr->tfd->set_timer(create_check.interval, false, [this](int timer_id)
{
if (parent->cli->st_cli.pool_config.find(new_id) != parent->cli->st_cli.pool_config.end())
if (parent->cli->st_cli->pool_config.find(new_id) != parent->cli->st_cli->pool_config.end())
{
auto & pool_cfg = parent->cli->st_cli.pool_config[new_id];
auto & pool_cfg = parent->cli->st_cli->pool_config[new_id];
create_check.passed = pool_cfg.real_pg_count > 0;
for (auto pg_it = pool_cfg.pg_config.begin(); pg_it != pool_cfg.pg_config.end(); pg_it++)
{
@@ -459,7 +459,7 @@ resume_8:
osd_bs = UINT32_MAX;
}
}
if (osd_bs && osd_bs != UINT32_MAX && osd_bs != parent->cli->st_cli.global_block_size)
if (osd_bs && osd_bs != UINT32_MAX && osd_bs != parent->cli->st_cli->global_block_size)
{
fprintf(stderr, "Auto-selecting block_size=%s because all pool OSDs use it\n", format_size(osd_bs, false, true).c_str());
upd["block_size"] = osd_bs;
@@ -478,7 +478,7 @@ resume_8:
osd_bg = UINT32_MAX;
}
}
if (osd_bg && osd_bg != UINT32_MAX && osd_bg != parent->cli->st_cli.global_bitmap_granularity)
if (osd_bg && osd_bg != UINT32_MAX && osd_bg != parent->cli->st_cli->global_bitmap_granularity)
{
fprintf(stderr, "Auto-selecting bitmap_granularity=%s because all pool OSDs use it\n", format_size(osd_bg, false, true).c_str());
upd["bitmap_granularity"] = osd_bg;
@@ -498,7 +498,7 @@ resume_8:
osd_imm = UINT32_MAX-1;
}
}
if (osd_imm < UINT32_MAX-1 && osd_imm != parent->cli->st_cli.global_immediate_commit)
if (osd_imm < UINT32_MAX-1 && osd_imm != parent->cli->st_cli->global_immediate_commit)
{
const char *imm_str = osd_imm == IMMEDIATE_NONE ? "none" : (osd_imm == IMMEDIATE_ALL ? "all" : "small");
fprintf(stderr, "Auto-selecting immediate_commit=%s because all pool OSDs use it\n", imm_str);
@@ -530,13 +530,13 @@ resume_8:
block_size = cfg["block_size"].uint64_value()
? cfg["block_size"].uint64_value()
: parent->cli->st_cli.global_block_size;
: parent->cli->st_cli->global_block_size;
bitmap_granularity = cfg["bitmap_granularity"].uint64_value()
? cfg["bitmap_granularity"].uint64_value()
: parent->cli->st_cli.global_bitmap_granularity;
: parent->cli->st_cli->global_bitmap_granularity;
immediate_commit = cfg["immediate_commit"].is_string()
? etcd_state_client_t::parse_immediate_commit(cfg["immediate_commit"].string_value(), IMMEDIATE_ALL)
: parent->cli->st_cli.global_immediate_commit;
: parent->cli->st_cli->global_immediate_commit;
for (auto osd_num_json: state_node_tree["osds"].array_items())
{
+14 -14
View File
@@ -63,37 +63,37 @@ struct pool_lister_t
json11::Json::object {
{ "request_range", json11::Json::object {
{ "key", base64_encode(
parent->cli->st_cli.etcd_prefix+"/pool/stats/"
parent->cli->st_cli->etcd_prefix+"/pool/stats/"
) },
{ "range_end", base64_encode(
parent->cli->st_cli.etcd_prefix+"/pool/stats0"
parent->cli->st_cli->etcd_prefix+"/pool/stats0"
) },
} },
},
json11::Json::object {
{ "request_range", json11::Json::object {
{ "key", base64_encode(
parent->cli->st_cli.etcd_prefix+"/osd/stats/"
parent->cli->st_cli->etcd_prefix+"/osd/stats/"
) },
{ "range_end", base64_encode(
parent->cli->st_cli.etcd_prefix+"/osd/stats0"
parent->cli->st_cli->etcd_prefix+"/osd/stats0"
) },
} },
},
json11::Json::object {
{ "request_range", json11::Json::object {
{ "key", base64_encode(
parent->cli->st_cli.etcd_prefix+"/config/pools"
parent->cli->st_cli->etcd_prefix+"/config/pools"
) },
} },
},
json11::Json::object {
{ "request_range", json11::Json::object {
{ "key", base64_encode(
parent->cli->st_cli.etcd_prefix+"/config/osd/"
parent->cli->st_cli->etcd_prefix+"/config/osd/"
) },
{ "range_end", base64_encode(
parent->cli->st_cli.etcd_prefix+"/config/osd0"
parent->cli->st_cli->etcd_prefix+"/config/osd0"
) },
} },
},
@@ -113,7 +113,7 @@ resume_1:
auto config_pools = space_info["responses"][2]["response_range"]["kvs"][0];
if (!config_pools.is_null())
{
config_pools = parent->cli->st_cli.parse_etcd_kv(config_pools).value;
config_pools = parent->cli->st_cli->parse_etcd_kv(config_pools).value;
}
parent->iterate_kvs_1(space_info["responses"][0]["response_range"]["kvs"], "/pool/stats/", [&](uint64_t pool_id, json11::Json value)
{
@@ -134,7 +134,7 @@ resume_1:
}
});
// Calculate max_avail for each pool
for (auto & pp: parent->cli->st_cli.pool_config)
for (auto & pp: parent->cli->st_cli->pool_config)
{
auto & pool_cfg = pp.second;
uint64_t pool_avail = UINT64_MAX;
@@ -238,10 +238,10 @@ resume_1:
json11::Json::object {
{ "request_range", json11::Json::object {
{ "key", base64_encode(
parent->cli->st_cli.etcd_prefix+"/pgstats/"
parent->cli->st_cli->etcd_prefix+"/pgstats/"
) },
{ "range_end", base64_encode(
parent->cli->st_cli.etcd_prefix+"/pgstats0"
parent->cli->st_cli->etcd_prefix+"/pgstats0"
) },
} },
},
@@ -289,10 +289,10 @@ resume_1:
json11::Json::object {
{ "request_range", json11::Json::object {
{ "key", base64_encode(
parent->cli->st_cli.etcd_prefix+"/inode/stats/"
parent->cli->st_cli->etcd_prefix+"/inode/stats/"
) },
{ "range_end", base64_encode(
parent->cli->st_cli.etcd_prefix+"/inode/stats0"
parent->cli->st_cli->etcd_prefix+"/inode/stats0"
) },
} },
},
@@ -478,7 +478,7 @@ resume_3:
auto total = st["object_count"].uint64_value();
auto obj_size = st["block_size"].uint64_value();
if (!obj_size)
obj_size = parent->cli->st_cli.global_block_size;
obj_size = parent->cli->st_cli->global_block_size;
if (st["scheme"] == "ec")
obj_size *= st["pg_size"].uint64_value() - st["parity_chunks"].uint64_value();
else if (st["scheme"] == "xor")
+9 -9
View File
@@ -56,7 +56,7 @@ resume_0:
{ "success", json11::Json::array {
json11::Json::object {
{ "request_range", json11::Json::object {
{ "key", base64_encode(parent->cli->st_cli.etcd_prefix+"/config/pools") },
{ "key", base64_encode(parent->cli->st_cli->etcd_prefix+"/config/pools") },
} }
},
} },
@@ -73,7 +73,7 @@ resume_1:
}
{
// Parse received pools from etcd
auto kv = parent->cli->st_cli.parse_etcd_kv(parent->etcd_result["responses"][0]["response_range"]["kvs"][0]);
auto kv = parent->cli->st_cli->parse_etcd_kv(parent->etcd_result["responses"][0]["response_range"]["kvs"][0]);
// Get pool by name or ID
old_cfg = json11::Json();
@@ -103,8 +103,8 @@ resume_1:
// Update pool
new_cfg = cfg;
result.text = validate_pool_config(new_cfg, old_cfg, parent->cli->st_cli.global_block_size,
parent->cli->st_cli.global_bitmap_granularity, force);
result.text = validate_pool_config(new_cfg, old_cfg, parent->cli->st_cli->global_block_size,
parent->cli->st_cli->global_bitmap_granularity, force);
if (result.text != "")
{
result.err = EINVAL;
@@ -115,8 +115,8 @@ resume_1:
if (new_cfg.find("used_for_app") != new_cfg.end() && !force)
{
// Check that pool doesn't have images
auto img_it = parent->cli->st_cli.inode_config.lower_bound(INODE_WITH_POOL(pool_id, 0));
if (img_it != parent->cli->st_cli.inode_config.end() &&
auto img_it = parent->cli->st_cli->inode_config.lower_bound(INODE_WITH_POOL(pool_id, 0));
if (img_it != parent->cli->st_cli->inode_config.end() &&
INODE_POOL(img_it->first) == pool_id &&
new_cfg["used_for_app"].string_value().substr(0, 3) == "fs:" &&
img_it->second.name == new_cfg["used_for_app"].string_value().substr(3))
@@ -124,7 +124,7 @@ resume_1:
// Only allow metadata image to exist in the FS pool
img_it++;
}
if (img_it != parent->cli->st_cli.inode_config.end() && INODE_POOL(img_it->first) == pool_id)
if (img_it != parent->cli->st_cli->inode_config.end() && INODE_POOL(img_it->first) == pool_id)
{
result = (cli_result_t){ .err = ENOENT, .text = "Pool "+pool_name+" has block images, delete them before using it for VitastorFS, S3 or another app" };
state = 100;
@@ -145,7 +145,7 @@ resume_1:
{ "compare", json11::Json::array {
json11::Json::object {
{ "target", "MOD" },
{ "key", base64_encode(parent->cli->st_cli.etcd_prefix+"/config/pools") },
{ "key", base64_encode(parent->cli->st_cli->etcd_prefix+"/config/pools") },
{ "result", "LESS" },
{ "mod_revision", pools_mod_rev+1 },
}
@@ -153,7 +153,7 @@ resume_1:
{ "success", json11::Json::array {
json11::Json::object {
{ "request_put", json11::Json::object {
{ "key", base64_encode(parent->cli->st_cli.etcd_prefix+"/config/pools") },
{ "key", base64_encode(parent->cli->st_cli->etcd_prefix+"/config/pools") },
{ "value", base64_encode(new_pools.dump()) },
} },
},
+7 -7
View File
@@ -56,7 +56,7 @@ struct pool_remover_t
// Get pool id by name (if name given)
if (pool_name != "")
{
for (auto & ic: parent->cli->st_cli.pool_config)
for (auto & ic: parent->cli->st_cli->pool_config)
{
if (ic.second.name == pool_name)
{
@@ -73,7 +73,7 @@ struct pool_remover_t
pool_name = "id " + std::to_string(pool_id);
// Look-up pool id in pool_config
if (parent->cli->st_cli.pool_config.find(pool_id) != parent->cli->st_cli.pool_config.end())
if (parent->cli->st_cli->pool_config.find(pool_id) != parent->cli->st_cli->pool_config.end())
{
pool_valid = 1;
}
@@ -92,7 +92,7 @@ struct pool_remover_t
{
std::string images;
for (auto & ic: parent->cli->st_cli.inode_config)
for (auto & ic: parent->cli->st_cli->inode_config)
{
if (pool_id && INODE_POOL(ic.second.num) != pool_id)
{
@@ -124,7 +124,7 @@ resume_1:
{ "success", json11::Json::array {
json11::Json::object {
{ "request_range", json11::Json::object {
{ "key", base64_encode(parent->cli->st_cli.etcd_prefix+"/config/pools") },
{ "key", base64_encode(parent->cli->st_cli->etcd_prefix+"/config/pools") },
} }
},
} },
@@ -141,7 +141,7 @@ resume_2:
}
{
// Parse received pools from etcd
auto kv = parent->cli->st_cli.parse_etcd_kv(parent->etcd_result["responses"][0]["response_range"]["kvs"][0]);
auto kv = parent->cli->st_cli->parse_etcd_kv(parent->etcd_result["responses"][0]["response_range"]["kvs"][0]);
// Remove pool
auto p = kv.value.object_items();
@@ -166,7 +166,7 @@ resume_2:
{ "compare", json11::Json::array {
json11::Json::object {
{ "target", "MOD" },
{ "key", base64_encode(parent->cli->st_cli.etcd_prefix+"/config/pools") },
{ "key", base64_encode(parent->cli->st_cli->etcd_prefix+"/config/pools") },
{ "result", "LESS" },
{ "mod_revision", pools_mod_rev+1 },
}
@@ -174,7 +174,7 @@ resume_2:
{ "success", json11::Json::array {
json11::Json::object {
{ "request_put", json11::Json::object {
{ "key", base64_encode(parent->cli->st_cli.etcd_prefix+"/config/pools") },
{ "key", base64_encode(parent->cli->st_cli->etcd_prefix+"/config/pools") },
{ "value", base64_encode(new_pools.dump()) },
} },
},
+3 -3
View File
@@ -82,8 +82,8 @@ struct cli_raw_ls_t
}
if (!pg_count || !pg_stripe_size || !osds.size())
{
auto pool_it = parent->cli->st_cli.pool_config.find(pool_id);
if (pool_it == parent->cli->st_cli.pool_config.end())
auto pool_it = parent->cli->st_cli->pool_config.find(pool_id);
if (pool_it == parent->cli->st_cli->pool_config.end())
{
result = (cli_result_t){ .err = EINVAL, .text = "pg_count, pg_stripe_size and osds are required if the pool does not exist" };
state = 100;
@@ -127,7 +127,7 @@ struct cli_raw_ls_t
for (; osd_pos < osd_list.size() && parent->waiting < parent->parallel_osds; osd_pos++)
{
uint64_t osd_num = osd_list[osd_pos];
if (parent->cli->st_cli.peer_states[osd_num].is_null())
if (parent->cli->st_cli->peer_states[osd_num].is_null())
{
fprintf(stderr, "OSD %ju is unavailable, skipping\n", osd_num);
continue;
+41 -41
View File
@@ -129,7 +129,7 @@ resume_1:
{
if (merge_children[current_child] == inverse_child)
continue;
rebased_images.push_back(parent->cli->st_cli.inode_config.at(merge_children[current_child]).name);
rebased_images.push_back(parent->cli->st_cli->inode_config.at(merge_children[current_child]).name);
start_merge_child(merge_children[current_child], merge_children[current_child]);
resume_2:
while (!wait_result(2))
@@ -176,8 +176,8 @@ resume_6:
if (chain_list[current_child] == inverse_parent)
continue;
{
auto parent_it = parent->cli->st_cli.inode_config.find(chain_list[current_child]);
if (parent_it != parent->cli->st_cli.inode_config.end())
auto parent_it = parent->cli->st_cli->inode_config.find(chain_list[current_child]);
if (parent_it != parent->cli->st_cli->inode_config.end())
deleted_images.push_back(parent_it->second.name);
deleted_ids.push_back(chain_list[current_child]);
}
@@ -264,8 +264,8 @@ resume_100:
chain_list.push_back(cur->num);
while (cur->num != from_cfg->num && cur->parent_id != 0)
{
auto it = parent->cli->st_cli.inode_config.find(cur->parent_id);
if (it == parent->cli->st_cli.inode_config.end())
auto it = parent->cli->st_cli->inode_config.find(cur->parent_id);
if (it == parent->cli->st_cli->inode_config.end())
{
char buf[1024];
snprintf(buf, 1024, "Parent inode of layer %s (id 0x%jx) not found", cur->name.c_str(), cur->parent_id);
@@ -288,7 +288,7 @@ resume_100:
{
sources[item] = i--;
}
for (auto & ic: parent->cli->st_cli.inode_config)
for (auto & ic: parent->cli->st_cli->inode_config)
{
if (!ic.second.parent_id)
{
@@ -319,7 +319,7 @@ resume_100:
reads.push_back(json11::Json::object {
{ "request_range", json11::Json::object {
{ "key", base64_encode(
parent->cli->st_cli.etcd_prefix+
parent->cli->st_cli->etcd_prefix+
"/inode/stats/"+std::to_string(INODE_POOL(inode))+
"/"+std::to_string(INODE_NO_POOL(inode))
) },
@@ -332,7 +332,7 @@ resume_100:
reads.push_back(json11::Json::object {
{ "request_range", json11::Json::object {
{ "key", base64_encode(
parent->cli->st_cli.etcd_prefix+
parent->cli->st_cli->etcd_prefix+
"/inode/stats/"+std::to_string(INODE_POOL(inode))+
"/"+std::to_string(INODE_NO_POOL(inode))
) },
@@ -340,7 +340,7 @@ resume_100:
});
}
parent->waiting++;
parent->cli->st_cli.etcd_txn_slow(json11::Json::object {
parent->cli->st_cli->etcd_txn_slow(json11::Json::object {
{ "success", reads },
}, [this](std::string err, json11::Json data)
{
@@ -357,19 +357,19 @@ resume_100:
{
continue;
}
auto kv = parent->cli->st_cli.parse_etcd_kv(inode_result["response_range"]["kvs"][0]);
auto kv = parent->cli->st_cli->parse_etcd_kv(inode_result["response_range"]["kvs"][0]);
pool_id_t pool_id = 0;
inode_t inode = 0;
char null_byte = 0;
int scanned = sscanf(kv.key.c_str() + parent->cli->st_cli.etcd_prefix.length()+13, "%u/%ju%c", &pool_id, &inode, &null_byte);
int scanned = sscanf(kv.key.c_str() + parent->cli->st_cli->etcd_prefix.length()+13, "%u/%ju%c", &pool_id, &inode, &null_byte);
if (scanned != 2 || !inode)
{
result = (cli_result_t){ .err = EIO, .text = "Bad key returned from etcd: "+kv.key };
state = 100;
return;
}
auto pool_cfg_it = parent->cli->st_cli.pool_config.find(pool_id);
if (pool_cfg_it == parent->cli->st_cli.pool_config.end())
auto pool_cfg_it = parent->cli->st_cli->pool_config.find(pool_id);
if (pool_cfg_it == parent->cli->st_cli->pool_config.end())
{
result = (cli_result_t){ .err = ENOENT, .text = "Pool "+std::to_string(pool_id)+" does not exist" };
state = 100;
@@ -412,8 +412,8 @@ resume_100:
void rename_inverse_parent()
{
auto child_it = parent->cli->st_cli.inode_config.find(inverse_child);
if (child_it == parent->cli->st_cli.inode_config.end())
auto child_it = parent->cli->st_cli->inode_config.find(inverse_child);
if (child_it == parent->cli->st_cli->inode_config.end())
{
char buf[1024];
snprintf(buf, 1024, "Inode 0x%jx disappeared", inverse_child);
@@ -421,8 +421,8 @@ resume_100:
state = 100;
return;
}
auto target_it = parent->cli->st_cli.inode_config.find(inverse_parent);
if (target_it == parent->cli->st_cli.inode_config.end())
auto target_it = parent->cli->st_cli->inode_config.find(inverse_parent);
if (target_it == parent->cli->st_cli->inode_config.end())
{
char buf[1024];
snprintf(buf, 1024, "Inode 0x%jx disappeared", inverse_parent);
@@ -435,17 +435,17 @@ resume_100:
inverse_child_name = child_cfg->name;
inverse_parent_name = target_cfg->name;
std::string child_cfg_key = base64_encode(
parent->cli->st_cli.etcd_prefix+
parent->cli->st_cli->etcd_prefix+
"/config/inode/"+std::to_string(INODE_POOL(inverse_child))+
"/"+std::to_string(INODE_NO_POOL(inverse_child))
);
std::string target_cfg_key = base64_encode(
parent->cli->st_cli.etcd_prefix+
parent->cli->st_cli->etcd_prefix+
"/config/inode/"+std::to_string(INODE_POOL(inverse_parent))+
"/"+std::to_string(INODE_NO_POOL(inverse_parent))
);
std::string target_idx_key = base64_encode(
parent->cli->st_cli.etcd_prefix+"/index/image/"+inverse_parent_name
parent->cli->st_cli->etcd_prefix+"/index/image/"+inverse_parent_name
);
// Fill new configuration
inode_config_t new_cfg = *child_cfg;
@@ -480,12 +480,12 @@ resume_100:
json11::Json::object {
{ "request_put", json11::Json::object {
{ "key", target_cfg_key },
{ "value", base64_encode(json11::Json(parent->cli->st_cli.serialize_inode_cfg(&new_cfg)).dump()) },
{ "value", base64_encode(json11::Json(parent->cli->st_cli->serialize_inode_cfg(&new_cfg)).dump()) },
} },
},
json11::Json::object {
{ "request_put", json11::Json::object {
{ "key", base64_encode(parent->cli->st_cli.etcd_prefix+"/index/image/"+child_cfg->name) },
{ "key", base64_encode(parent->cli->st_cli->etcd_prefix+"/index/image/"+child_cfg->name) },
{ "value", base64_encode(json11::Json({
{ "id", INODE_NO_POOL(inverse_parent) },
{ "pool_id", (uint64_t)INODE_POOL(inverse_parent) },
@@ -494,14 +494,14 @@ resume_100:
},
};
// Reparent children of inverse_child
for (auto & cp: parent->cli->st_cli.inode_config)
for (auto & cp: parent->cli->st_cli->inode_config)
{
if (cp.second.parent_id == child_cfg->num)
{
auto cp_cfg = cp.second;
cp_cfg.parent_id = inverse_parent;
auto cp_key = base64_encode(
parent->cli->st_cli.etcd_prefix+
parent->cli->st_cli->etcd_prefix+
"/config/inode/"+std::to_string(INODE_POOL(cp.second.num))+
"/"+std::to_string(INODE_NO_POOL(cp.second.num))
);
@@ -514,13 +514,13 @@ resume_100:
txn.push_back(json11::Json::object {
{ "request_put", json11::Json::object {
{ "key", cp_key },
{ "value", base64_encode(json11::Json(parent->cli->st_cli.serialize_inode_cfg(&cp_cfg)).dump()) },
{ "value", base64_encode(json11::Json(parent->cli->st_cli->serialize_inode_cfg(&cp_cfg)).dump()) },
} },
});
}
}
parent->waiting++;
parent->cli->st_cli.etcd_txn_slow(json11::Json::object {
parent->cli->st_cli->etcd_txn_slow(json11::Json::object {
{ "compare", cmp },
{ "success", txn },
}, [this](std::string err, json11::Json res)
@@ -550,8 +550,8 @@ resume_100:
void delete_inode_config(inode_t cur)
{
auto cur_cfg_it = parent->cli->st_cli.inode_config.find(cur);
if (cur_cfg_it == parent->cli->st_cli.inode_config.end())
auto cur_cfg_it = parent->cli->st_cli->inode_config.find(cur);
if (cur_cfg_it == parent->cli->st_cli->inode_config.end())
{
char buf[1024];
snprintf(buf, 1024, "Inode 0x%jx disappeared", cur);
@@ -562,12 +562,12 @@ resume_100:
inode_config_t *cur_cfg = &cur_cfg_it->second;
std::string cur_name = cur_cfg->name;
std::string cur_cfg_key = base64_encode(
parent->cli->st_cli.etcd_prefix+
parent->cli->st_cli->etcd_prefix+
"/config/inode/"+std::to_string(INODE_POOL(cur))+
"/"+std::to_string(INODE_NO_POOL(cur))
);
parent->waiting++;
parent->cli->st_cli.etcd_txn_slow(json11::Json::object {
parent->cli->st_cli->etcd_txn_slow(json11::Json::object {
{ "compare", json11::Json::array {
json11::Json::object {
{ "target", "MOD" },
@@ -584,7 +584,7 @@ resume_100:
},
json11::Json::object {
{ "request_delete_range", json11::Json::object {
{ "key", base64_encode(parent->cli->st_cli.etcd_prefix+"/index/image/"+cur_name) },
{ "key", base64_encode(parent->cli->st_cli->etcd_prefix+"/index/image/"+cur_name) },
} },
},
} },
@@ -604,8 +604,8 @@ resume_100:
return;
}
// Modify inode_config for library users to be able to take it from there immediately
parent->cli->st_cli.inode_by_name.erase(cur_name);
parent->cli->st_cli.inode_config.erase(cur);
parent->cli->st_cli->inode_by_name.erase(cur_name);
parent->cli->st_cli->inode_config.erase(cur);
if (parent->progress)
printf("Layer %s deleted\n", cur_name.c_str());
parent->ringloop->wakeup();
@@ -614,8 +614,8 @@ resume_100:
void start_merge_child(inode_t child_inode, inode_t target_inode)
{
auto child_it = parent->cli->st_cli.inode_config.find(child_inode);
if (child_it == parent->cli->st_cli.inode_config.end())
auto child_it = parent->cli->st_cli->inode_config.find(child_inode);
if (child_it == parent->cli->st_cli->inode_config.end())
{
char buf[1024];
snprintf(buf, 1024, "Inode 0x%jx disappeared", child_inode);
@@ -623,8 +623,8 @@ resume_100:
state = 100;
return;
}
auto target_it = parent->cli->st_cli.inode_config.find(target_inode);
if (target_it == parent->cli->st_cli.inode_config.end())
auto target_it = parent->cli->st_cli->inode_config.find(target_inode);
if (target_it == parent->cli->st_cli->inode_config.end())
{
char buf[1024];
snprintf(buf, 1024, "Inode 0x%jx disappeared", target_inode);
@@ -644,8 +644,8 @@ resume_100:
void start_mark_deleted(inode_t inode)
{
auto ino_it = parent->cli->st_cli.inode_config.find(inode);
if (ino_it == parent->cli->st_cli.inode_config.end())
auto ino_it = parent->cli->st_cli->inode_config.find(inode);
if (ino_it == parent->cli->st_cli->inode_config.end())
{
char buf[1024];
snprintf(buf, 1024, "Inode 0x%jx disappeared", inode);
@@ -665,8 +665,8 @@ resume_100:
void start_delete_source(inode_t inode)
{
auto source = parent->cli->st_cli.inode_config.find(inode);
if (source == parent->cli->st_cli.inode_config.end())
auto source = parent->cli->st_cli->inode_config.find(inode);
if (source == parent->cli->st_cli->inode_config.end())
{
char buf[1024];
snprintf(buf, 1024, "Inode 0x%jx disappeared", inode);
+5 -5
View File
@@ -44,8 +44,8 @@ struct rm_inode_t
void start_delete()
{
auto pool_it = parent->cli->st_cli.pool_config.find(pool_id);
if (pool_it == parent->cli->st_cli.pool_config.end())
auto pool_it = parent->cli->st_cli->pool_config.find(pool_id);
if (pool_it == parent->cli->st_cli->pool_config.end())
{
result = (cli_result_t){ .err = EINVAL, .text = "Pool does not exist" };
state = 100;
@@ -196,8 +196,8 @@ struct rm_inode_t
{
fprintf(stderr, "Warning: some OSDs don't indicate left_on_dead PG OSDs"
" in delete replies, falling back to simpler checks\n");
auto pool_it = parent->cli->st_cli.pool_config.find(pool_id);
if (pool_it != parent->cli->st_cli.pool_config.end())
auto pool_it = parent->cli->st_cli->pool_config.find(pool_id);
if (pool_it != parent->cli->st_cli->pool_config.end())
{
std::set<osd_num_t> all_peers;
for (auto pg_num: fallback_pgs)
@@ -217,7 +217,7 @@ struct rm_inode_t
all_peers.erase(0);
for (auto peer_osd: all_peers)
{
if (parent->cli->st_cli.peer_states[peer_osd].is_null())
if (parent->cli->st_cli->peer_states[peer_osd].is_null())
inactive_osds.insert(peer_osd);
}
}
+12 -12
View File
@@ -68,14 +68,14 @@ struct rm_osd_t
// Check if OSDs are still up
for (auto osd_id: to_remove)
{
if (parent->cli->st_cli.peer_states.find(osd_id) != parent->cli->st_cli.peer_states.end())
if (parent->cli->st_cli->peer_states.find(osd_id) != parent->cli->st_cli->peer_states.end())
{
is_warning = !allow_up;
still_up.push_back(osd_id);
}
}
// Check if OSDs are still used in data distribution
for (auto & pp: parent->cli->st_cli.pool_config)
for (auto & pp: parent->cli->st_cli->pool_config)
{
// Will OSD deletion make pool incomplete / down / degraded?
bool pool_incomplete = false, pool_down = false, pool_degraded = false;
@@ -189,14 +189,14 @@ struct rm_osd_t
json11::Json::object {
{ "request_range", json11::Json::object {
{ "key", base64_encode(
parent->cli->st_cli.etcd_prefix+"/pg/config"
parent->cli->st_cli->etcd_prefix+"/pg/config"
) },
} },
},
json11::Json::object {
{ "request_range", json11::Json::object {
{ "key", base64_encode(
parent->cli->st_cli.etcd_prefix+"/history/last_clean_pgs"
parent->cli->st_cli->etcd_prefix+"/history/last_clean_pgs"
) },
} },
},
@@ -212,10 +212,10 @@ struct rm_osd_t
return;
}
{
auto kv = parent->cli->st_cli.parse_etcd_kv(parent->etcd_result["responses"][0]["response_range"]["kvs"][0]);
auto kv = parent->cli->st_cli->parse_etcd_kv(parent->etcd_result["responses"][0]["response_range"]["kvs"][0]);
new_pgs = remove_osds_from_pgs(kv);
new_pgs_mod_rev = kv.mod_revision;
kv = parent->cli->st_cli.parse_etcd_kv(parent->etcd_result["responses"][1]["response_range"]["kvs"][0]);
kv = parent->cli->st_cli->parse_etcd_kv(parent->etcd_result["responses"][1]["response_range"]["kvs"][0]);
new_clean_pgs = remove_osds_from_pgs(kv);
new_clean_pgs_mod_rev = kv.mod_revision;
}
@@ -235,14 +235,14 @@ struct rm_osd_t
rm_items[i] = json11::Json::object {
{ "request_delete_range", json11::Json::object {
{ "key", base64_encode(
parent->cli->st_cli.etcd_prefix+rm_items[i].string_value()
parent->cli->st_cli->etcd_prefix+rm_items[i].string_value()
) },
} },
};
}
if (!new_pgs.is_null())
{
auto pgs_key = base64_encode(parent->cli->st_cli.etcd_prefix+"/pg/config");
auto pgs_key = base64_encode(parent->cli->st_cli->etcd_prefix+"/pg/config");
rm_items.push_back(json11::Json::object {
{ "request_put", json11::Json::object {
{ "key", pgs_key },
@@ -258,7 +258,7 @@ struct rm_osd_t
}
if (!new_clean_pgs.is_null())
{
auto pgs_key = base64_encode(parent->cli->st_cli.etcd_prefix+"/history/last_clean_pgs");
auto pgs_key = base64_encode(parent->cli->st_cli->etcd_prefix+"/history/last_clean_pgs");
rm_items.push_back(json11::Json::object {
{ "request_put", json11::Json::object {
{ "key", pgs_key },
@@ -375,7 +375,7 @@ struct rm_osd_t
goto resume_0;
history_updates.clear();
history_checks.clear();
for (auto & pp: parent->cli->st_cli.pool_config)
for (auto & pp: parent->cli->st_cli->pool_config)
{
bool update_pg_history = false;
auto & pool_cfg = pp.second;
@@ -420,7 +420,7 @@ struct rm_osd_t
if (update_pg_history)
{
std::string history_key = base64_encode(
parent->cli->st_cli.etcd_prefix+"/pg/history/"+
parent->cli->st_cli->etcd_prefix+"/pg/history/"+
std::to_string(pool_cfg.id)+"/"+std::to_string(pg_num)
);
auto hist = json11::Json::object {
@@ -440,7 +440,7 @@ struct rm_osd_t
{ "target", "MOD" },
{ "key", history_key },
{ "result", "LESS" },
{ "mod_revision", parent->cli->st_cli.etcd_watch_revision_pg+1 },
{ "mod_revision", parent->cli->st_cli->etcd_watch_revision_pg+1 },
});
}
}
+9 -9
View File
@@ -48,7 +48,7 @@ struct wildcard_remover_t
{
auto child_id = ino_it->first;
auto parent_id = ino_it->second;
auto & parent_cfg = parent->cli->st_cli.inode_config.at(parent_id);
auto & parent_cfg = parent->cli->st_cli->inode_config.at(parent_id);
if (parent_cfg.parent_id)
{
auto chain_it = chains.find(parent_cfg.parent_id);
@@ -71,7 +71,7 @@ struct wildcard_remover_t
std::vector<inode_rev_t> ver_chain;
do
{
auto & inode_cfg = parent->cli->st_cli.inode_config.at(child_id);
auto & inode_cfg = parent->cli->st_cli->inode_config.at(child_id);
ver_chain.push_back((inode_rev_t){ .inode_num = child_id, .meta_rev = inode_cfg.mod_revision });
if (child_id == parent_id)
break;
@@ -89,7 +89,7 @@ struct wildcard_remover_t
do
{
rank++;
cur_id = parent->cli->st_cli.inode_config.at(cur_id).parent_id;
cur_id = parent->cli->st_cli->inode_config.at(cur_id).parent_id;
} while (cur_id && cur_id != parent_id);
ranks[parent_id] = rank;
}
@@ -111,7 +111,7 @@ struct wildcard_remover_t
state = 0;
chains.clear();
// Select images to delete
for (auto & ic: parent->cli->st_cli.inode_config)
for (auto & ic: parent->cli->st_cli->inode_config)
{
for (auto & glob: globs)
{
@@ -131,11 +131,11 @@ struct wildcard_remover_t
// Check for parallel changes
for (auto & irev: versioned_chains[i])
{
auto inode_it = parent->cli->st_cli.inode_config.find(irev.inode_num);
if (inode_it == parent->cli->st_cli.inode_config.end() ||
auto inode_it = parent->cli->st_cli->inode_config.find(irev.inode_num);
if (inode_it == parent->cli->st_cli->inode_config.end() ||
inode_it->second.mod_revision > irev.meta_rev)
{
if (inode_it != parent->cli->st_cli.inode_config.end())
if (inode_it != parent->cli->st_cli->inode_config.end())
fprintf(stderr, "Warning: image %s modified by someone else during deletion, restarting wildcard deletion\n", inode_it->second.name.c_str());
else
fprintf(stderr, "Warning: inode %jx modified by someone else during deletion, retrying wildcard deletion\n", irev.inode_num);
@@ -144,8 +144,8 @@ struct wildcard_remover_t
}
// Delete
{
auto from_cfg = parent->cli->st_cli.inode_config.at(versioned_chains[i].back().inode_num);
auto to_cfg = parent->cli->st_cli.inode_config.at(versioned_chains[i].front().inode_num);
auto from_cfg = parent->cli->st_cli->inode_config.at(versioned_chains[i].back().inode_num);
auto to_cfg = parent->cli->st_cli->inode_config.at(versioned_chains[i].front().inode_num);
sub_cfg = cfg.object_items();
sub_cfg.erase("globs");
sub_cfg.erase("exact");
+16 -16
View File
@@ -37,14 +37,14 @@ struct status_printer_t
goto resume_2;
// etcd states
{
auto addrs = parent->cli->st_cli.get_addresses();
auto addrs = parent->cli->st_cli->get_addresses();
etcd_states.resize(addrs.size());
for (int i = 0; i < etcd_states.size(); i++)
{
parent->waiting++;
parent->cli->st_cli.etcd_call_oneshot(
parent->cli->st_cli->etcd_call_oneshot(
addrs[i], "/maintenance/status", json11::Json::object(),
parent->cli->st_cli.etcd_quick_timeout, [this, i](std::string err, json11::Json res)
parent->cli->st_cli->etcd_quick_timeout, [this, i](std::string err, json11::Json res)
{
parent->waiting--;
etcd_states[i] = err != "" ? json11::Json::object{ { "error", err } } : res;
@@ -62,23 +62,23 @@ resume_1:
{ "success", json11::Json::array {
json11::Json::object {
{ "request_range", json11::Json::object {
{ "key", base64_encode(parent->cli->st_cli.etcd_prefix+"/mon/") },
{ "range_end", base64_encode(parent->cli->st_cli.etcd_prefix+"/mon0") },
{ "key", base64_encode(parent->cli->st_cli->etcd_prefix+"/mon/") },
{ "range_end", base64_encode(parent->cli->st_cli->etcd_prefix+"/mon0") },
} },
},
json11::Json::object {
{ "request_range", json11::Json::object {
{ "key", base64_encode(
parent->cli->st_cli.etcd_prefix+"/osd/stats/"
parent->cli->st_cli->etcd_prefix+"/osd/stats/"
) },
{ "range_end", base64_encode(
parent->cli->st_cli.etcd_prefix+"/osd/stats0"
parent->cli->st_cli->etcd_prefix+"/osd/stats0"
) },
} },
},
json11::Json::object {
{ "request_range", json11::Json::object {
{ "key", base64_encode(parent->cli->st_cli.etcd_prefix+"/stats") },
{ "key", base64_encode(parent->cli->st_cli->etcd_prefix+"/stats") },
} },
},
} },
@@ -97,7 +97,7 @@ resume_2:
auto osd_stats = parent->etcd_result["responses"][1]["response_range"]["kvs"];
if (parent->etcd_result["responses"][2]["response_range"]["kvs"].array_items().size() > 0)
{
agg_stats = parent->cli->st_cli.parse_etcd_kv(parent->etcd_result["responses"][2]["response_range"]["kvs"][0]).value;
agg_stats = parent->cli->st_cli->parse_etcd_kv(parent->etcd_result["responses"][2]["response_range"]["kvs"][0]).value;
}
int etcd_alive = 0;
uint64_t etcd_db_size = 0;
@@ -120,8 +120,8 @@ resume_2:
std::string mon_master;
for (int i = 0; i < mon_members.size(); i++)
{
auto kv = parent->cli->st_cli.parse_etcd_kv(mon_members[i]);
kv.key = kv.key.substr(parent->cli->st_cli.etcd_prefix.size());
auto kv = parent->cli->st_cli->parse_etcd_kv(mon_members[i]);
kv.key = kv.key.substr(parent->cli->st_cli->etcd_prefix.size());
if (kv.key.substr(0, 12) == "/mon/member/")
mon_count++;
else if (kv.key == "/mon/master")
@@ -153,8 +153,8 @@ resume_2:
osds_nearfull++;
}
}
auto peer_it = parent->cli->st_cli.peer_states.find(stat_osd_num);
if (peer_it != parent->cli->st_cli.peer_states.end())
auto peer_it = parent->cli->st_cli->peer_states.find(stat_osd_num);
if (peer_it != parent->cli->st_cli->peer_states.end())
{
osd_up++;
if (value["slow_ops_primary"].uint64_value() > 0)
@@ -177,7 +177,7 @@ resume_2:
std::string backfillfull_pool_names;
std::map<std::string, int> pgs_by_state;
std::string pgs_by_state_str;
for (auto & pool_pair: parent->cli->st_cli.pool_config)
for (auto & pool_pair: parent->cli->st_cli->pool_config)
{
auto & pool_cfg = pool_pair.second;
bool active = pool_cfg.real_pg_count > 0;
@@ -262,7 +262,7 @@ resume_2:
std::string str(obj_states[i]);
uint64_t obj_n = agg_stats["object_bytes"][str].uint64_value();
if (!obj_n)
obj_n = agg_stats["object_counts"][str].uint64_value() * parent->cli->st_cli.global_block_size;
obj_n = agg_stats["object_counts"][str].uint64_value() * parent->cli->st_cli->global_block_size;
json_status[str+"_data"] = obj_n;
}
printf("%s\n", json11::Json(json_status).dump().c_str());
@@ -275,7 +275,7 @@ resume_2:
std::string str(obj_states[i]);
uint64_t obj_n = agg_stats["object_bytes"][str].uint64_value();
if (!obj_n)
obj_n = agg_stats["object_counts"][str].uint64_value() * parent->cli->st_cli.global_block_size;
obj_n = agg_stats["object_counts"][str].uint64_value() * parent->cli->st_cli->global_block_size;
if (!i || obj_n > 0)
more_states += format_size(obj_n)+" "+str+", ";
}