Loading include/common/rpc/rpc_util.hpp +6 −0 Original line number Diff line number Diff line Loading @@ -74,6 +74,12 @@ compress_bitset(const std::vector<uint8_t>& bytes); std::vector<uint8_t> decompress_bitset(const std::string& compressedString); std::string base64_encode(const std::string& data); std::string base64_decode_to_string(const std::string& encoded); } // namespace gkfs::rpc #endif // GEKKOFS_COMMON_RPC_UTILS_HPP src/client/gkfs_functions.cpp +1 −0 Original line number Diff line number Diff line Loading @@ -1100,6 +1100,7 @@ gkfs_do_write(gkfs::filemap::OpenFile& file, const char* buf, size_t count, md->size() <= gkfs::config::metadata::inline_data_size) { LOG(DEBUG, "{}() Migrating inline data to chunks. Size: {}", __func__, md->size()); // Write inline data to chunks auto err_migration = gkfs::rpc::forward_write( *path, md->inline_data().c_str(), 0, md->size(), 0); Loading src/client/rpc/forward_metadata.cpp +11 −3 Original line number Diff line number Diff line Loading @@ -1169,10 +1169,14 @@ forward_write_inline(const std::string& path, const void* buf, off64_t offset, // Construct std::string from buffer for serialization // Note: This copies data, which is acceptable for small inline writes std::string data(static_cast<const char*>(buf), write_size); // Base64 encode the data to ensure it is safe for RPC transmission (no // null bytes) std::string encoded_data = gkfs::rpc::base64_encode(data); auto out = ld_network_service ->post<gkfs::rpc::write_data_inline>( endp, path, offset, data, write_size, endp, path, offset, encoded_data, encoded_data.size(), bool_to_merc_bool(append_flag)) .get() .at(0); Loading Loading @@ -1214,10 +1218,14 @@ forward_read_inline(const std::string& path, void* buf, off64_t offset, // Copy data from string response to user buffer if(out.count() > 0 && !out.data().empty()) { std::memcpy(buf, out.data().c_str(), out.count()); // Decode Base64 string back to binary std::string decoded_data = gkfs::rpc::base64_decode_to_string(out.data()); std::memcpy(buf, decoded_data.c_str(), decoded_data.size()); return {0, decoded_data.size()}; } return {0, out.count()}; return {0, 0}; } catch(const std::exception& ex) { LOG(ERROR, "{}() Exception: '{}'", __func__, ex.what()); Loading src/common/CMakeLists.txt +1 −0 Original line number Diff line number Diff line Loading @@ -102,6 +102,7 @@ target_sources(metadata target_link_libraries(metadata PRIVATE fmt::fmt rpc_utils ) add_library(path_util STATIC) Loading src/common/metadata.cpp +4 −2 Original line number Diff line number Diff line Loading @@ -37,6 +37,7 @@ */ #include <common/metadata.hpp> #include <common/rpc/rpc_util.hpp> #include <config.hpp> #include <fmt/format.h> Loading Loading @@ -205,7 +206,8 @@ Metadata::Metadata(const std::string& binary_str) { if(gkfs::config::metadata::use_inline_data && ptr < end) { if(*ptr == MSP) ++ptr; // optional separator before payload inline_data_ = std::string(ptr, end - ptr); inline_data_ = gkfs::rpc::base64_decode_to_string(std::string(ptr, end - ptr)); } } Loading Loading @@ -248,7 +250,7 @@ Metadata::serialize() const { if(gkfs::config::metadata::use_inline_data && !inline_data_.empty()) { s += MSP; // Separator s += inline_data_; s += gkfs::rpc::base64_encode(inline_data_); } return s; } Loading Loading
include/common/rpc/rpc_util.hpp +6 −0 Original line number Diff line number Diff line Loading @@ -74,6 +74,12 @@ compress_bitset(const std::vector<uint8_t>& bytes); std::vector<uint8_t> decompress_bitset(const std::string& compressedString); std::string base64_encode(const std::string& data); std::string base64_decode_to_string(const std::string& encoded); } // namespace gkfs::rpc #endif // GEKKOFS_COMMON_RPC_UTILS_HPP
src/client/gkfs_functions.cpp +1 −0 Original line number Diff line number Diff line Loading @@ -1100,6 +1100,7 @@ gkfs_do_write(gkfs::filemap::OpenFile& file, const char* buf, size_t count, md->size() <= gkfs::config::metadata::inline_data_size) { LOG(DEBUG, "{}() Migrating inline data to chunks. Size: {}", __func__, md->size()); // Write inline data to chunks auto err_migration = gkfs::rpc::forward_write( *path, md->inline_data().c_str(), 0, md->size(), 0); Loading
src/client/rpc/forward_metadata.cpp +11 −3 Original line number Diff line number Diff line Loading @@ -1169,10 +1169,14 @@ forward_write_inline(const std::string& path, const void* buf, off64_t offset, // Construct std::string from buffer for serialization // Note: This copies data, which is acceptable for small inline writes std::string data(static_cast<const char*>(buf), write_size); // Base64 encode the data to ensure it is safe for RPC transmission (no // null bytes) std::string encoded_data = gkfs::rpc::base64_encode(data); auto out = ld_network_service ->post<gkfs::rpc::write_data_inline>( endp, path, offset, data, write_size, endp, path, offset, encoded_data, encoded_data.size(), bool_to_merc_bool(append_flag)) .get() .at(0); Loading Loading @@ -1214,10 +1218,14 @@ forward_read_inline(const std::string& path, void* buf, off64_t offset, // Copy data from string response to user buffer if(out.count() > 0 && !out.data().empty()) { std::memcpy(buf, out.data().c_str(), out.count()); // Decode Base64 string back to binary std::string decoded_data = gkfs::rpc::base64_decode_to_string(out.data()); std::memcpy(buf, decoded_data.c_str(), decoded_data.size()); return {0, decoded_data.size()}; } return {0, out.count()}; return {0, 0}; } catch(const std::exception& ex) { LOG(ERROR, "{}() Exception: '{}'", __func__, ex.what()); Loading
src/common/CMakeLists.txt +1 −0 Original line number Diff line number Diff line Loading @@ -102,6 +102,7 @@ target_sources(metadata target_link_libraries(metadata PRIVATE fmt::fmt rpc_utils ) add_library(path_util STATIC) Loading
src/common/metadata.cpp +4 −2 Original line number Diff line number Diff line Loading @@ -37,6 +37,7 @@ */ #include <common/metadata.hpp> #include <common/rpc/rpc_util.hpp> #include <config.hpp> #include <fmt/format.h> Loading Loading @@ -205,7 +206,8 @@ Metadata::Metadata(const std::string& binary_str) { if(gkfs::config::metadata::use_inline_data && ptr < end) { if(*ptr == MSP) ++ptr; // optional separator before payload inline_data_ = std::string(ptr, end - ptr); inline_data_ = gkfs::rpc::base64_decode_to_string(std::string(ptr, end - ptr)); } } Loading Loading @@ -248,7 +250,7 @@ Metadata::serialize() const { if(gkfs::config::metadata::use_inline_data && !inline_data_.empty()) { s += MSP; // Separator s += inline_data_; s += gkfs::rpc::base64_encode(inline_data_); } return s; } Loading