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
+26 -26
View File
@@ -61,7 +61,7 @@ static fattr3 get_dir_attributes(nfs_client_t *self, std::string dir)
static fattr3 get_file_attributes(nfs_client_t *self, inode_t inode_num)
{
auto & inode_cfg = self->parent->cli->st_cli.inode_config.at(inode_num);
auto & inode_cfg = self->parent->cli->st_cli->inode_config.at(inode_num);
uint64_t used = 0;
auto st_it = self->parent->inode_stats.find(inode_num);
if (st_it != self->parent->inode_stats.end())
@@ -125,8 +125,8 @@ static int block_nfs3_getattr_proc(void *opaque, rpc_op_t *rop)
auto inode_num_it = self->parent->blockfs->inode_by_hash.find(dirhash);
if (inode_num_it != self->parent->blockfs->inode_by_hash.end())
inode_num = inode_num_it->second;
auto inode_it = self->parent->cli->st_cli.inode_config.find(inode_num);
if (inode_num && inode_it != self->parent->cli->st_cli.inode_config.end())
auto inode_it = self->parent->cli->st_cli->inode_config.find(inode_num);
if (inode_num && inode_it != self->parent->cli->st_cli->inode_config.end())
{
// File info
auto & inode_cfg = inode_it->second;
@@ -191,7 +191,7 @@ static int block_nfs3_setattr_proc(void *opaque, rpc_op_t *rop)
}
if (args->new_attributes.size.set_it)
{
auto & inode_cfg = self->parent->cli->st_cli.inode_config.at(ino_it->second);
auto & inode_cfg = self->parent->cli->st_cli->inode_config.at(ino_it->second);
self->parent->cmd->loop_and_wait(self->parent->cmd->start_modify(json11::Json::object {
{ "image", inode_cfg.name },
{ "resize", (uint64_t)args->new_attributes.size.size },
@@ -219,7 +219,7 @@ static int block_nfs3_lookup_proc(void *opaque, rpc_op_t *rop)
if (full_name != "")
{
std::string fh = "S"+base64_encode(sha256(full_name));
for (auto & ic: self->parent->cli->st_cli.inode_config)
for (auto & ic: self->parent->cli->st_cli->inode_config)
{
if (ic.second.name == full_name)
{
@@ -304,9 +304,9 @@ static int block_nfs3_read_proc(void *opaque, rpc_op_t *rop)
rpc_queue_reply(rop);
return 0;
}
uint64_t alignment = self->parent->cli->st_cli.global_bitmap_granularity;
auto pool_cfg = self->parent->cli->st_cli.pool_config.find(INODE_POOL(ino_it->second));
if (pool_cfg != self->parent->cli->st_cli.pool_config.end())
uint64_t alignment = self->parent->cli->st_cli->global_bitmap_granularity;
auto pool_cfg = self->parent->cli->st_cli->pool_config.find(INODE_POOL(ino_it->second));
if (pool_cfg != self->parent->cli->st_cli->pool_config.end())
{
alignment = pool_cfg->second.bitmap_granularity;
}
@@ -380,9 +380,9 @@ static int block_nfs3_write_proc(void *opaque, rpc_op_t *rop)
return 0;
}
uint64_t count = args->count > args->data.size ? args->data.size : args->count;
uint64_t alignment = self->parent->cli->st_cli.global_bitmap_granularity;
auto pool_cfg = self->parent->cli->st_cli.pool_config.find(INODE_POOL(ino_it->second));
if (pool_cfg != self->parent->cli->st_cli.pool_config.end())
uint64_t alignment = self->parent->cli->st_cli->global_bitmap_granularity;
auto pool_cfg = self->parent->cli->st_cli->pool_config.find(INODE_POOL(ino_it->second));
if (pool_cfg != self->parent->cli->st_cli->pool_config.end())
{
alignment = pool_cfg->second.bitmap_granularity;
}
@@ -495,8 +495,8 @@ static void extend_inode(nfs_client_t *self, uint64_t inode, uint64_t new_size)
// Send an extend request
auto & ext = self->parent->blockfs->extends[inode];
ext.cur_extend = new_size;
auto inode_it = self->parent->cli->st_cli.inode_config.find(inode);
if (inode_it != self->parent->cli->st_cli.inode_config.end() &&
auto inode_it = self->parent->cli->st_cli->inode_config.find(inode);
if (inode_it != self->parent->cli->st_cli->inode_config.end() &&
inode_it->second.size < new_size)
{
self->parent->cmd->loop_and_wait(self->parent->cmd->start_modify(json11::Json::object {
@@ -561,8 +561,8 @@ static void nfs_do_write(nfs_client_t *self, std::multimap<extend_size_t, extend
static void nfs_resize_write(nfs_client_t *self, rpc_op_t *rop, uint64_t inode, uint64_t new_size, uint64_t offset, uint64_t count, void *buf)
{
// Check if we have to resize the inode during write
auto inode_it = self->parent->cli->st_cli.inode_config.find(inode);
if (inode_it != self->parent->cli->st_cli.inode_config.end() &&
auto inode_it = self->parent->cli->st_cli->inode_config.find(inode);
if (inode_it != self->parent->cli->st_cli->inode_config.end() &&
inode_it->second.size < new_size)
{
auto ewr_it = self->parent->blockfs->extend_writes.emplace((extend_size_t){
@@ -618,7 +618,7 @@ static int block_nfs3_create_proc(void *opaque, rpc_op_t *rop)
*reply = (CREATE3res){ .status = vitastor_nfs_map_err(r.err) };
if (!r.err)
{
auto inode_num = self->parent->cli->st_cli.inode_by_name.at(full_name);
auto inode_num = self->parent->cli->st_cli->inode_by_name.at(full_name);
reply->resok = (CREATE3resok){
.obj = {
.handle_follows = 1,
@@ -655,8 +655,8 @@ static int block_nfs3_mkdir_proc(void *opaque, rpc_op_t *rop)
rpc_queue_reply(rop);
return 0;
}
auto inode_it = self->parent->cli->st_cli.inode_by_name.find(full_name);
if (inode_it != self->parent->cli->st_cli.inode_by_name.end())
auto inode_it = self->parent->cli->st_cli->inode_by_name.find(full_name);
if (inode_it != self->parent->cli->st_cli->inode_by_name.end())
{
*reply = (MKDIR3res){ .status = NFS3ERR_EXIST };
rpc_queue_reply(rop);
@@ -765,7 +765,7 @@ static int block_nfs3_rmdir_proc(void *opaque, rpc_op_t *rop)
return 0;
}
std::string prefix = full_name+"/";
for (auto & ic: self->parent->cli->st_cli.inode_config)
for (auto & ic: self->parent->cli->st_cli->inode_config)
{
if (prefix != "" && ic.second.name.substr(0, prefix.size()) == prefix)
{
@@ -795,7 +795,7 @@ static int continue_dir_rename(nfs_dir_rename_state *rename_st)
if (!rename_st->items.size())
{
std::string old_prefix = rename_st->old_name+"/";
for (auto & ic: self->parent->cli->st_cli.inode_config)
for (auto & ic: self->parent->cli->st_cli->inode_config)
{
if (ic.second.name.substr(0, old_prefix.size()) == old_prefix)
rename_st->items.push_back(ic.second.name);
@@ -862,7 +862,7 @@ static int block_nfs3_rename_proc(void *opaque, rpc_op_t *rop)
bool old_is_dir = self->parent->blockfs->dir_info.find(old_name) != self->parent->blockfs->dir_info.end();
bool new_is_dir = self->parent->blockfs->dir_info.find(new_name) != self->parent->blockfs->dir_info.end();
bool old_is_file = false, new_is_file = false;
for (auto & ic: self->parent->cli->st_cli.inode_config)
for (auto & ic: self->parent->cli->st_cli->inode_config)
{
if (ic.second.name == new_name)
new_is_file = true;
@@ -1000,7 +1000,7 @@ static void block_nfs3_readdir_common(void *opaque, rpc_op_t *rop, bool is_plus)
}
std::string prefix = dir.size() ? dir+"/" : self->parent->blockfs->name_prefix;
std::map<std::string, struct entryplus3> entries;
for (auto & ic: self->parent->cli->st_cli.inode_config)
for (auto & ic: self->parent->cli->st_cli->inode_config)
{
auto & inode_cfg = ic.second;
if (prefix != "" && inode_cfg.name.substr(0, prefix.size()) != prefix)
@@ -1190,11 +1190,11 @@ void block_fs_state_t::init(nfs_proxy_t *proxy, json11::Json cfg)
.mod_rev = 0,
};
clock_gettime(CLOCK_REALTIME, &dir_info[""].mtime);
assert(proxy->cli->st_cli.on_inode_change_hook == NULL);
proxy->cli->st_cli.on_inode_change_hook = [this, proxy](inode_t changed_inode, bool removed)
assert(proxy->cli->st_cli->on_inode_change_hook == NULL);
proxy->cli->st_cli->on_inode_change_hook = [this, proxy](inode_t changed_inode, bool removed)
{
auto inode_cfg_it = proxy->cli->st_cli.inode_config.find(changed_inode);
if (inode_cfg_it == proxy->cli->st_cli.inode_config.end())
auto inode_cfg_it = proxy->cli->st_cli->inode_config.find(changed_inode);
if (inode_cfg_it == proxy->cli->st_cli->inode_config.end())
{
return;
}
+7 -7
View File
@@ -219,7 +219,7 @@ void nfs_kv_procs(nfs_client_t *self)
void kv_fs_state_t::init(nfs_proxy_t *proxy, json11::Json cfg)
{
this->proxy = proxy;
auto & pool_cfg = proxy->cli->st_cli.pool_config.at(proxy->default_pool_id);
auto & pool_cfg = proxy->cli->st_cli->pool_config.at(proxy->default_pool_id);
fs_kv_inode = cfg["fs"].uint64_value();
if (fs_kv_inode)
{
@@ -231,7 +231,7 @@ void kv_fs_state_t::init(nfs_proxy_t *proxy, json11::Json cfg)
}
else
{
for (auto & ic: proxy->cli->st_cli.inode_config)
for (auto & ic: proxy->cli->st_cli->inode_config)
{
if (ic.second.name == cfg["fs"].string_value())
{
@@ -245,9 +245,9 @@ void kv_fs_state_t::init(nfs_proxy_t *proxy, json11::Json cfg)
exit(1);
}
}
if (proxy->cli->st_cli.inode_config.find(fs_kv_inode) != proxy->cli->st_cli.inode_config.end())
if (proxy->cli->st_cli->inode_config.find(fs_kv_inode) != proxy->cli->st_cli->inode_config.end())
{
auto & name = proxy->cli->st_cli.inode_config.at(fs_kv_inode).name;
auto & name = proxy->cli->st_cli->inode_config.at(fs_kv_inode).name;
if (pool_cfg.used_for_app != "fs:"+name)
{
fprintf(stderr, "Please mark pool as used for this file system with `vitastor-cli modify-pool --used-for-app fs:%s %s`\n",
@@ -255,11 +255,11 @@ void kv_fs_state_t::init(nfs_proxy_t *proxy, json11::Json cfg)
exit(1);
}
}
auto img_it = proxy->cli->st_cli.inode_config.lower_bound(INODE_WITH_POOL(proxy->default_pool_id+1, 0));
if (img_it != proxy->cli->st_cli.inode_config.begin())
auto img_it = proxy->cli->st_cli->inode_config.lower_bound(INODE_WITH_POOL(proxy->default_pool_id+1, 0));
if (img_it != proxy->cli->st_cli->inode_config.begin())
{
img_it--;
if (img_it != proxy->cli->st_cli.inode_config.begin() && INODE_POOL(img_it->first) == proxy->default_pool_id)
if (img_it != proxy->cli->st_cli->inode_config.begin() && INODE_POOL(img_it->first) == proxy->default_pool_id)
{
idgen[proxy->default_pool_id].min_id = INODE_NO_POOL(img_it->first) + 1;
}
+2 -2
View File
@@ -260,8 +260,8 @@ void kv_fs_defrag_t::handle_read()
// Linear read all object headers, check which of them are still alive, move them away
void kv_fs_state_t::defrag_volume(inode_t ino, bool no_rm, bool dry_run, std::function<void(int, uint64_t, uint64_t, uint64_t)> cb)
{
auto pool_it = proxy->cli->st_cli.pool_config.find(INODE_POOL(ino));
if (pool_it == proxy->cli->st_cli.pool_config.end())
auto pool_it = proxy->cli->st_cli->pool_config.find(INODE_POOL(ino));
if (pool_it == proxy->cli->st_cli->pool_config.end())
{
fprintf(stderr, "Volume 0x%jx references a non-existing pool with ID %u, skipping\n", ino, INODE_POOL(ino));
cb(0, 0, 0, 0);
+24 -24
View File
@@ -451,21 +451,21 @@ void nfs_proxy_t::run_server(json11::Json cfg)
void nfs_proxy_t::watch_stats()
{
assert(cli->st_cli.on_start_watcher_hook == NULL);
cli->st_cli.on_start_watcher_hook = [this](http_co_t *etcd_watch_ws)
assert(cli->st_cli->on_start_watcher_hook == NULL);
cli->st_cli->on_start_watcher_hook = [this](http_co_t *etcd_watch_ws)
{
cli->st_cli.etcd_txn_slow(json11::Json::object {
cli->st_cli->etcd_txn_slow(json11::Json::object {
{ "success", json11::Json::array {
json11::Json::object {
{ "request_range", json11::Json::object {
{ "key", base64_encode(cli->st_cli.etcd_prefix+"/inode/stats/") },
{ "range_end", base64_encode(cli->st_cli.etcd_prefix+"/inode/stats0") },
{ "key", base64_encode(cli->st_cli->etcd_prefix+"/inode/stats/") },
{ "range_end", base64_encode(cli->st_cli->etcd_prefix+"/inode/stats0") },
} }
},
json11::Json::object {
{ "request_range", json11::Json::object {
{ "key", base64_encode(cli->st_cli.etcd_prefix+"/pool/stats/") },
{ "range_end", base64_encode(cli->st_cli.etcd_prefix+"/pool/stats0") },
{ "key", base64_encode(cli->st_cli->etcd_prefix+"/pool/stats/") },
{ "range_end", base64_encode(cli->st_cli->etcd_prefix+"/pool/stats0") },
} }
},
} },
@@ -475,26 +475,26 @@ void nfs_proxy_t::watch_stats()
{
for (auto & item: rsp["response_range"]["kvs"].array_items())
{
etcd_kv_t kv = cli->st_cli.parse_etcd_kv(item);
etcd_kv_t kv = cli->st_cli->parse_etcd_kv(item);
parse_stats(kv);
}
}
if (cli->st_cli.etcd_watch_ws)
if (cli->st_cli->etcd_watch_ws)
{
auto watch_rev = res["header"]["revision"].uint64_value()+1;
http_post_message(cli->st_cli.etcd_watch_ws, WS_TEXT, json11::Json(json11::Json::object {
http_post_message(cli->st_cli->etcd_watch_ws, WS_TEXT, json11::Json(json11::Json::object {
{ "create_request", json11::Json::object {
{ "key", base64_encode(cli->st_cli.etcd_prefix+"/inode/stats/") },
{ "range_end", base64_encode(cli->st_cli.etcd_prefix+"/inode/stats0") },
{ "key", base64_encode(cli->st_cli->etcd_prefix+"/inode/stats/") },
{ "range_end", base64_encode(cli->st_cli->etcd_prefix+"/inode/stats0") },
{ "start_revision", watch_rev },
{ "watch_id", ETCD_INODE_STATS_WATCH_ID },
{ "progress_notify", true },
} }
}).dump());
http_post_message(cli->st_cli.etcd_watch_ws, WS_TEXT, json11::Json(json11::Json::object {
http_post_message(cli->st_cli->etcd_watch_ws, WS_TEXT, json11::Json(json11::Json::object {
{ "create_request", json11::Json::object {
{ "key", base64_encode(cli->st_cli.etcd_prefix+"/pool/stats/") },
{ "range_end", base64_encode(cli->st_cli.etcd_prefix+"/pool/stats0") },
{ "key", base64_encode(cli->st_cli->etcd_prefix+"/pool/stats/") },
{ "range_end", base64_encode(cli->st_cli->etcd_prefix+"/pool/stats0") },
{ "start_revision", watch_rev },
{ "watch_id", ETCD_POOL_STATS_WATCH_ID },
{ "progress_notify", true },
@@ -503,7 +503,7 @@ void nfs_proxy_t::watch_stats()
}
});
};
cli->st_cli.on_change_hook = [this, old_hook = cli->st_cli.on_change_hook](std::map<std::string, etcd_kv_t> & changes)
cli->st_cli->on_change_hook = [this, old_hook = cli->st_cli->on_change_hook](std::map<std::string, etcd_kv_t> & changes)
{
for (auto & p: changes)
{
@@ -515,12 +515,12 @@ void nfs_proxy_t::watch_stats()
void nfs_proxy_t::parse_stats(etcd_kv_t & kv)
{
auto & key = kv.key;
if (key.substr(0, cli->st_cli.etcd_prefix.length()+13) == cli->st_cli.etcd_prefix+"/inode/stats/")
if (key.substr(0, cli->st_cli->etcd_prefix.length()+13) == cli->st_cli->etcd_prefix+"/inode/stats/")
{
pool_id_t pool_id = 0;
inode_t inode_num = 0;
char null_byte = 0;
int scanned = sscanf(key.c_str() + cli->st_cli.etcd_prefix.length()+13, "%u/%ju%c", &pool_id, &inode_num, &null_byte);
int scanned = sscanf(key.c_str() + cli->st_cli->etcd_prefix.length()+13, "%u/%ju%c", &pool_id, &inode_num, &null_byte);
if (scanned != 2 || !pool_id || pool_id >= POOL_ID_MAX)
{
fprintf(stderr, "Bad etcd key %s, ignoring\n", key.c_str());
@@ -530,11 +530,11 @@ void nfs_proxy_t::parse_stats(etcd_kv_t & kv)
inode_stats[INODE_WITH_POOL(pool_id, inode_num)] = kv.value;
}
}
else if (key.substr(0, cli->st_cli.etcd_prefix.length()+12) == cli->st_cli.etcd_prefix+"/pool/stats/")
else if (key.substr(0, cli->st_cli->etcd_prefix.length()+12) == cli->st_cli->etcd_prefix+"/pool/stats/")
{
pool_id_t pool_id = 0;
char null_byte = 0;
int scanned = sscanf(key.c_str() + cli->st_cli.etcd_prefix.length()+12, "%u%c", &pool_id, &null_byte);
int scanned = sscanf(key.c_str() + cli->st_cli->etcd_prefix.length()+12, "%u%c", &pool_id, &null_byte);
if (scanned != 1 || !pool_id || pool_id >= POOL_ID_MAX)
{
fprintf(stderr, "Bad etcd key %s, ignoring\n", key.c_str());
@@ -550,21 +550,21 @@ void nfs_proxy_t::check_default_pool()
{
if (default_pool == "")
{
if (cli->st_cli.pool_config.size() == 1)
if (cli->st_cli->pool_config.size() == 1)
{
auto pool_it = cli->st_cli.pool_config.begin();
auto pool_it = cli->st_cli->pool_config.begin();
default_pool_id = pool_it->first;
default_pool = pool_it->second.name;
}
else
{
fprintf(stderr, "There are %zu pools. Please select default pool with --pool option\n", cli->st_cli.pool_config.size());
fprintf(stderr, "There are %zu pools. Please select default pool with --pool option\n", cli->st_cli->pool_config.size());
exit(1);
}
}
else
{
for (auto & p: cli->st_cli.pool_config)
for (auto & p: cli->st_cli->pool_config)
{
if (p.second.name == default_pool)
{