Change st_cli to pointer
This commit is contained in:
+26
-26
@@ -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
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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
@@ -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)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user