Loading include/proxy/proxy_data.hpp +1 −0 Original line number Diff line number Diff line Loading @@ -30,6 +30,7 @@ struct margo_client_ids { hg_id_t rpc_remove_id; hg_id_t rpc_decr_size_id; hg_id_t rpc_remove_data_id; hg_id_t rpc_get_metadentry_size_id; hg_id_t rpc_update_metadentry_size_id; hg_id_t rpc_write_id; hg_id_t rpc_read_id; Loading src/daemon/daemon.cpp +2 −0 Original line number Diff line number Diff line Loading @@ -253,6 +253,8 @@ register_proxy_server_rpcs(margo_instance_id mid) { rpc_err_out_t, rpc_srv_decr_size); MARGO_REGISTER(mid, gkfs::rpc::tag::remove_data, rpc_rm_node_in_t, rpc_err_out_t, rpc_srv_remove_data); MARGO_REGISTER(mid, gkfs::rpc::tag::get_metadentry_size, rpc_path_only_in_t, rpc_get_metadentry_size_out_t, rpc_srv_get_metadentry_size); MARGO_REGISTER(mid, gkfs::rpc::tag::update_metadentry_size, rpc_update_metadentry_size_in_t, rpc_update_metadentry_size_out_t, Loading src/proxy/proxy.cpp +3 −0 Original line number Diff line number Diff line Loading @@ -156,6 +156,9 @@ register_client_rpcs(margo_instance_id mid) { PROXY_DATA->rpc_client_ids().rpc_remove_data_id = MARGO_REGISTER(mid, gkfs::rpc::tag::remove_data, rpc_rm_node_in_t, rpc_err_out_t, NULL); PROXY_DATA->rpc_client_ids().rpc_get_metadentry_size_id = MARGO_REGISTER( mid, gkfs::rpc::tag::get_metadentry_size, rpc_path_only_in_t, rpc_get_metadentry_size_out_t, NULL); PROXY_DATA->rpc_client_ids().rpc_update_metadentry_size_id = MARGO_REGISTER(mid, gkfs::rpc::tag::update_metadentry_size, rpc_update_metadentry_size_in_t, Loading src/proxy/rpc/forward_metadata.cpp +46 −2 Original line number Diff line number Diff line Loading @@ -294,8 +294,52 @@ forward_decr_size(const std::string& path, size_t length) { pair<int, off64_t> forward_get_metadentry_size(const string& path) { // return default return make_pair(0, 0); hg_handle_t rpc_handle = nullptr; rpc_path_only_in_t daemon_in{}; rpc_get_metadentry_size_out_t daemon_out{}; int err = 0; off64_t ret_offset = 0; // fill in daemon_in.path = path.c_str(); // Create handle PROXY_DATA->log()->debug("{}() Creating Margo handle ...", __func__); auto endp = PROXY_DATA->rpc_endpoints().at( PROXY_DATA->distributor()->locate_file_metadata(path, 0)); auto ret = margo_create( PROXY_DATA->client_rpc_mid(), endp, PROXY_DATA->rpc_client_ids().rpc_get_metadentry_size_id, &rpc_handle); if(ret != HG_SUCCESS) { PROXY_DATA->log()->error("{}() Critical error", __func__); return make_pair(EBUSY, 0); ; } ret = margo_forward(rpc_handle, &daemon_in); if(ret == HG_SUCCESS) { // Get response PROXY_DATA->log()->trace("{}() Waiting for response", __func__); ret = margo_get_output(rpc_handle, &daemon_out); if(ret == HG_SUCCESS) { PROXY_DATA->log()->debug( "{}() Got response success err '{}' ret_size '{}'", __func__, daemon_out.err, daemon_out.ret_size); err = daemon_out.err; ret_offset = daemon_out.ret_size; margo_free_output(rpc_handle, &daemon_out); } else { // something is wrong err = EBUSY; PROXY_DATA->log()->error("{}() while getting rpc output", __func__); } } else { // something is wrong err = EBUSY; PROXY_DATA->log()->error("{}() sending rpc failed", __func__); } /* clean up resources consumed by this rpc */ margo_destroy(rpc_handle); return make_pair(err, ret_offset); } pair<int, off64_t> Loading Loading
include/proxy/proxy_data.hpp +1 −0 Original line number Diff line number Diff line Loading @@ -30,6 +30,7 @@ struct margo_client_ids { hg_id_t rpc_remove_id; hg_id_t rpc_decr_size_id; hg_id_t rpc_remove_data_id; hg_id_t rpc_get_metadentry_size_id; hg_id_t rpc_update_metadentry_size_id; hg_id_t rpc_write_id; hg_id_t rpc_read_id; Loading
src/daemon/daemon.cpp +2 −0 Original line number Diff line number Diff line Loading @@ -253,6 +253,8 @@ register_proxy_server_rpcs(margo_instance_id mid) { rpc_err_out_t, rpc_srv_decr_size); MARGO_REGISTER(mid, gkfs::rpc::tag::remove_data, rpc_rm_node_in_t, rpc_err_out_t, rpc_srv_remove_data); MARGO_REGISTER(mid, gkfs::rpc::tag::get_metadentry_size, rpc_path_only_in_t, rpc_get_metadentry_size_out_t, rpc_srv_get_metadentry_size); MARGO_REGISTER(mid, gkfs::rpc::tag::update_metadentry_size, rpc_update_metadentry_size_in_t, rpc_update_metadentry_size_out_t, Loading
src/proxy/proxy.cpp +3 −0 Original line number Diff line number Diff line Loading @@ -156,6 +156,9 @@ register_client_rpcs(margo_instance_id mid) { PROXY_DATA->rpc_client_ids().rpc_remove_data_id = MARGO_REGISTER(mid, gkfs::rpc::tag::remove_data, rpc_rm_node_in_t, rpc_err_out_t, NULL); PROXY_DATA->rpc_client_ids().rpc_get_metadentry_size_id = MARGO_REGISTER( mid, gkfs::rpc::tag::get_metadentry_size, rpc_path_only_in_t, rpc_get_metadentry_size_out_t, NULL); PROXY_DATA->rpc_client_ids().rpc_update_metadentry_size_id = MARGO_REGISTER(mid, gkfs::rpc::tag::update_metadentry_size, rpc_update_metadentry_size_in_t, Loading
src/proxy/rpc/forward_metadata.cpp +46 −2 Original line number Diff line number Diff line Loading @@ -294,8 +294,52 @@ forward_decr_size(const std::string& path, size_t length) { pair<int, off64_t> forward_get_metadentry_size(const string& path) { // return default return make_pair(0, 0); hg_handle_t rpc_handle = nullptr; rpc_path_only_in_t daemon_in{}; rpc_get_metadentry_size_out_t daemon_out{}; int err = 0; off64_t ret_offset = 0; // fill in daemon_in.path = path.c_str(); // Create handle PROXY_DATA->log()->debug("{}() Creating Margo handle ...", __func__); auto endp = PROXY_DATA->rpc_endpoints().at( PROXY_DATA->distributor()->locate_file_metadata(path, 0)); auto ret = margo_create( PROXY_DATA->client_rpc_mid(), endp, PROXY_DATA->rpc_client_ids().rpc_get_metadentry_size_id, &rpc_handle); if(ret != HG_SUCCESS) { PROXY_DATA->log()->error("{}() Critical error", __func__); return make_pair(EBUSY, 0); ; } ret = margo_forward(rpc_handle, &daemon_in); if(ret == HG_SUCCESS) { // Get response PROXY_DATA->log()->trace("{}() Waiting for response", __func__); ret = margo_get_output(rpc_handle, &daemon_out); if(ret == HG_SUCCESS) { PROXY_DATA->log()->debug( "{}() Got response success err '{}' ret_size '{}'", __func__, daemon_out.err, daemon_out.ret_size); err = daemon_out.err; ret_offset = daemon_out.ret_size; margo_free_output(rpc_handle, &daemon_out); } else { // something is wrong err = EBUSY; PROXY_DATA->log()->error("{}() while getting rpc output", __func__); } } else { // something is wrong err = EBUSY; PROXY_DATA->log()->error("{}() sending rpc failed", __func__); } /* clean up resources consumed by this rpc */ margo_destroy(rpc_handle); return make_pair(err, ret_offset); } pair<int, off64_t> Loading