From 673d62eb6ebb6b1d401aae6901bcd09ea9be6580 Mon Sep 17 00:00:00 2001 From: Marco Edoardo Santimaria Date: Thu, 5 Feb 2026 11:48:18 +0000 Subject: [PATCH 1/3] Update CAPIO-CL to version v1.3.4 --- capio/server/CMakeLists.txt | 4 ++-- capio/server/capio_server.cpp | 22 ++++++++++--------- capio/server/include/handlers/close.hpp | 2 +- capio/server/include/handlers/exig.hpp | 2 +- .../server/include/utils/capiocl_adapter.hpp | 3 ++- capio/server/src/client_manager.cpp | 12 +++++----- 6 files changed, 24 insertions(+), 21 deletions(-) diff --git a/capio/server/CMakeLists.txt b/capio/server/CMakeLists.txt index 0e2f3aa2f..3255015a3 100644 --- a/capio/server/CMakeLists.txt +++ b/capio/server/CMakeLists.txt @@ -22,7 +22,7 @@ set(ARGS_BUILD_UNITTESTS OFF CACHE INTERNAL "") FetchContent_Declare( capio_cl GIT_REPOSITORY https://github.com/High-Performance-IO/CAPIO-CL.git - GIT_TAG v1.1.1 + GIT_TAG v1.3.4 ) FetchContent_MakeAvailable(args capio_cl) @@ -84,4 +84,4 @@ IF (ENABLE_COVERAGE) ELSE (CMAKE_BUILD_TYPE STREQUAL "Debug") message(WARNING "Code coverage is disabled in release mode.") ENDIF (CMAKE_BUILD_TYPE STREQUAL "Debug") -ENDIF (ENABLE_COVERAGE) \ No newline at end of file +ENDIF (ENABLE_COVERAGE) diff --git a/capio/server/capio_server.cpp b/capio/server/capio_server.cpp index 41e46d8cd..c0c29afa8 100644 --- a/capio/server/capio_server.cpp +++ b/capio/server/capio_server.cpp @@ -1,3 +1,5 @@ + + #include #include #include @@ -18,10 +20,11 @@ #include #include +#include "capiocl.hpp" +#include "capiocl/engine.h" +#include "capiocl/parser.h" #include "utils/capiocl_adapter.hpp" -std::string workflow_name; - #include "client-manager/client_manager.hpp" #include "common/env.hpp" #include "common/logger.hpp" @@ -57,8 +60,8 @@ std::mutex nfiles_mutex; * can only access it through a const reference. This prevents any modifications to the engine * outside of those permitted by the capiocl::Engine class itself. */ -capiocl::Engine *capio_cl_engine; -const capiocl::Engine &CapioCLEngine::get() { return *capio_cl_engine; } +capiocl::engine::Engine *capio_cl_engine; +const capiocl::engine::Engine &CapioCLEngine::get() { return *capio_cl_engine; } static constexpr std::array build_request_handlers_table() { std::array _request_handlers{0}; @@ -226,11 +229,10 @@ int parseCLI(int argc, char **argv) { std::cout << CAPIO_LOG_SERVER_CLI_LEVEL_INFO << "parsing config file: " << token << std::endl; - std::tie(workflow_name, capio_cl_engine) = - capiocl::Parser::parse(token, resolve_path, store_all_in_memory); + capio_cl_engine = capiocl::parser::Parser::parse(token, resolve_path, store_all_in_memory); } else if (noConfigFile) { - workflow_name = std::string_view(get_capio_workflow_name()); - capio_cl_engine = new capiocl::Engine(); + capio_cl_engine = new capiocl::engine::Engine(); + capio_cl_engine->setWorkflowName(get_capio_workflow_name()); if (store_all_in_memory) { capio_cl_engine->setAllStoreInMemory(); } @@ -239,7 +241,7 @@ int parseCLI(int argc, char **argv) { << std::endl << CAPIO_LOG_SERVER_CLI_LEVEL_WARNING << "Obtained from environment variable current workflow name: " - << workflow_name.data() << std::endl; + << capio_cl_engine->getWorkflowName() << std::endl; } else { std::cout << CAPIO_LOG_SERVER_CLI_LEVEL_ERROR << "Error: no config file provided. To skip config file use --no-config option!" @@ -293,7 +295,7 @@ int main(int argc, char **argv) { open_files_location(); - shm_canary = new CapioShmCanary(workflow_name); + shm_canary = new CapioShmCanary(capio_cl_engine->getWorkflowName()); storage_manager = new StorageManager(); client_manager = new ClientManager(); diff --git a/capio/server/include/handlers/close.hpp b/capio/server/include/handlers/close.hpp index 99703d80c..b3478fd5d 100644 --- a/capio/server/include/handlers/close.hpp +++ b/capio/server/include/handlers/close.hpp @@ -51,7 +51,7 @@ inline void handle_close(int tid, int fd) { c_file.close(); LOG("File was closed", path.c_str()); - if (CapioCLEngine::get().getCommitRule(path) == capiocl::commit_rules::ON_CLOSE && + if (CapioCLEngine::get().getCommitRule(path) == capiocl::commitRules::ON_CLOSE && c_file.is_closed()) { LOG("Capio File %s is closed and commit rule is on_close. setting it to complete and " "starting batch handling", diff --git a/capio/server/include/handlers/exig.hpp b/capio/server/include/handlers/exig.hpp index 83351397b..c41cc0ffd 100644 --- a/capio/server/include/handlers/exig.hpp +++ b/capio/server/include/handlers/exig.hpp @@ -12,7 +12,7 @@ inline void handle_exit_group(int tid) { for (auto &path : files) { LOG("Handling file %s", path.c_str()); - if (CapioCLEngine::get().getCommitRule(path) == capiocl::commit_rules::ON_TERMINATION) { + if (CapioCLEngine::get().getCommitRule(path) == capiocl::commitRules::ON_TERMINATION) { CapioFile &c_file = storage_manager->get(path); if (c_file.is_dir()) { LOG("file %s is dir", path.c_str()); diff --git a/capio/server/include/utils/capiocl_adapter.hpp b/capio/server/include/utils/capiocl_adapter.hpp index d9a83387d..34a4b885a 100644 --- a/capio/server/include/utils/capiocl_adapter.hpp +++ b/capio/server/include/utils/capiocl_adapter.hpp @@ -2,11 +2,12 @@ #define CAPIO_CAPIOCL_ADAPTER_HPP #include "capiocl.hpp" +#include "capiocl/engine.h" /// @brief const wrapper to class instance of capiocl::Engine class CapioCLEngine final { public: /// @brief Get a const reference to capiocl::Engine instance - const static capiocl::Engine &get(); + const static capiocl::engine::Engine &get(); }; #endif // CAPIO_CAPIOCL_ADAPTER_HPP \ No newline at end of file diff --git a/capio/server/src/client_manager.cpp b/capio/server/src/client_manager.cpp index adf38eb85..df69215a9 100644 --- a/capio/server/src/client_manager.cpp +++ b/capio/server/src/client_manager.cpp @@ -2,15 +2,15 @@ #include "utils/capiocl_adapter.hpp" -extern std::string workflow_name; - #include "client-manager/client_manager.hpp" #include "common/constants.hpp" #include "common/queue.hpp" +#include "utils/capiocl_adapter.hpp" #include "utils/common.hpp" ClientManager::ClientManager() - : requests{SHM_COMM_CHAN_NAME, CAPIO_REQ_BUFF_CNT, CAPIO_REQ_MAX_SIZE, workflow_name} { + : requests{SHM_COMM_CHAN_NAME, CAPIO_REQ_BUFF_CNT, CAPIO_REQ_MAX_SIZE, + CapioCLEngine::get().getWorkflowName()} { server_println(CAPIO_LOG_SERVER_CLI_LEVEL_INFO, "ClientManager initialization completed."); } @@ -23,9 +23,9 @@ void ClientManager::registerClient(pid_t tid, const std::string &app_name, const ClientDataBuffers buffers{ new SPSCQueue(SHM_SPSC_PREFIX_WRITE + std::to_string(tid), get_cache_lines(), - get_cache_line_size(), workflow_name), + get_cache_line_size(), CapioCLEngine::get().getWorkflowName()), new SPSCQueue(SHM_SPSC_PREFIX_READ + std::to_string(tid), get_cache_lines(), - get_cache_line_size(), workflow_name)}; + get_cache_line_size(), CapioCLEngine::get().getWorkflowName())}; data_buffers.emplace(tid, buffers); app_names.emplace(tid, app_name); @@ -33,7 +33,7 @@ void ClientManager::registerClient(pid_t tid, const std::string &app_name, const files_created_by_app_name.emplace(app_name, std::initializer_list{}); responses.try_emplace(tid, SHM_COMM_CHAN_NAME_RESP + std::to_string(tid), CAPIO_REQ_BUFF_CNT, - sizeof(off_t), workflow_name); + sizeof(off_t), CapioCLEngine::get().getWorkflowName()); if (wait) { std::thread t([&, target_tid = tid]() { From d60ead7fb568c6820cca4e76a17313cf1a0bbdee Mon Sep 17 00:00:00 2001 From: = <=> Date: Mon, 16 Feb 2026 12:25:16 +0100 Subject: [PATCH 2/3] Refactored structure of client handlers --- capio/server/capio_server.cpp | 86 ++++--------------- .../client_manager.hpp => client/manager.hpp} | 0 capio/server/include/client/request.hpp | 53 ++++++++++++ capio/server/include/handlers.hpp | 24 ------ capio/server/include/remote/backend.hpp | 4 +- capio/server/include/remote/backend/mpi.hpp | 1 + capio/server/include/remote/handlers/stat.hpp | 2 +- capio/server/include/remote/listener.hpp | 4 +- capio/server/include/remote/requests.hpp | 3 + capio/server/include/utils/capio_file.hpp | 1 + capio/server/include/utils/common.hpp | 2 +- capio/server/include/utils/env.hpp | 4 +- capio/server/include/utils/location.hpp | 2 + capio/server/include/utils/signals.hpp | 9 +- capio/server/include/utils/types.hpp | 2 - .../client_handlers/access.cpp} | 5 +- .../client_handlers/clone.cpp} | 6 +- .../client_handlers/close.cpp} | 16 +++- .../dup.hpp => src/client_handlers/dup.cpp} | 4 +- .../exig.hpp => src/client_handlers/exig.cpp} | 12 ++- .../client_handlers/getdents.cpp} | 7 +- .../client_handlers/handshake.cpp} | 10 ++- .../client_handlers/mkdir.cpp} | 5 +- .../open.hpp => src/client_handlers/open.cpp} | 11 ++- .../read.hpp => src/client_handlers/read.cpp} | 6 +- .../client_handlers/rename.cpp} | 5 +- .../client_handlers/rmdir.cpp} | 6 +- .../seek.hpp => src/client_handlers/seek.cpp} | 22 ++--- .../stat.hpp => src/client_handlers/stat.cpp} | 20 ++--- .../client_handlers/unlink.cpp} | 7 +- .../client_handlers/write.cpp} | 8 +- capio/server/src/client_manager.cpp | 2 +- capio/server/src/client_request.cpp | 63 ++++++++++++++ 33 files changed, 254 insertions(+), 158 deletions(-) rename capio/server/include/{client-manager/client_manager.hpp => client/manager.hpp} (100%) create mode 100644 capio/server/include/client/request.hpp delete mode 100644 capio/server/include/handlers.hpp rename capio/server/{include/handlers/access.hpp => src/client_handlers/access.cpp} (75%) rename capio/server/{include/handlers/clone.hpp => src/client_handlers/clone.cpp} (72%) rename capio/server/{include/handlers/close.hpp => src/client_handlers/close.cpp} (83%) rename capio/server/{include/handlers/dup.hpp => src/client_handlers/dup.cpp} (74%) rename capio/server/{include/handlers/exig.hpp => src/client_handlers/exig.cpp} (79%) rename capio/server/{include/handlers/getdents.hpp => src/client_handlers/getdents.cpp} (96%) rename capio/server/{include/handlers/handshake.hpp => src/client_handlers/handshake.cpp} (58%) rename capio/server/{include/handlers/mkdir.hpp => src/client_handlers/mkdir.cpp} (74%) rename capio/server/{include/handlers/open.hpp => src/client_handlers/open.cpp} (90%) rename capio/server/{include/handlers/read.hpp => src/client_handlers/read.cpp} (97%) rename capio/server/{include/handlers/rename.hpp => src/client_handlers/rename.cpp} (89%) rename capio/server/{include/handlers/rmdir.hpp => src/client_handlers/rmdir.cpp} (80%) rename capio/server/{include/handlers/seek.hpp => src/client_handlers/seek.cpp} (68%) rename capio/server/{include/handlers/stat.hpp => src/client_handlers/stat.cpp} (87%) rename capio/server/{include/handlers/unlink.hpp => src/client_handlers/unlink.cpp} (80%) rename capio/server/{include/handlers/write.hpp => src/client_handlers/write.cpp} (84%) create mode 100644 capio/server/src/client_request.cpp diff --git a/capio/server/capio_server.cpp b/capio/server/capio_server.cpp index c0c29afa8..c0787941b 100644 --- a/capio/server/capio_server.cpp +++ b/capio/server/capio_server.cpp @@ -25,7 +25,8 @@ #include "capiocl/parser.h" #include "utils/capiocl_adapter.hpp" -#include "client-manager/client_manager.hpp" +#include "client/manager.hpp" +#include "client/request.hpp" #include "common/env.hpp" #include "common/logger.hpp" #include "common/requests.hpp" @@ -37,6 +38,7 @@ ClientManager *client_manager; StorageManager *storage_manager; +ClientRequestManager *request_manager; int n_servers; // name of the node @@ -49,7 +51,6 @@ CSClientsRemotePendingNFilesMap_t clients_remote_pending_nfiles; std::mutex nfiles_mutex; -#include "handlers.hpp" #include "utils/location.hpp" #include "utils/signals.hpp" @@ -63,66 +64,6 @@ std::mutex nfiles_mutex; capiocl::engine::Engine *capio_cl_engine; const capiocl::engine::Engine &CapioCLEngine::get() { return *capio_cl_engine; } -static constexpr std::array build_request_handlers_table() { - std::array _request_handlers{0}; - - _request_handlers[CAPIO_REQUEST_ACCESS] = access_handler; - _request_handlers[CAPIO_REQUEST_CLONE] = clone_handler; - _request_handlers[CAPIO_REQUEST_CLOSE] = close_handler; - _request_handlers[CAPIO_REQUEST_CREATE] = create_handler; - _request_handlers[CAPIO_REQUEST_CREATE_EXCLUSIVE] = create_exclusive_handler; - _request_handlers[CAPIO_REQUEST_DUP] = dup_handler; - _request_handlers[CAPIO_REQUEST_EXIT_GROUP] = exit_group_handler; - _request_handlers[CAPIO_REQUEST_FSTAT] = fstat_handler; - _request_handlers[CAPIO_REQUEST_GETDENTS] = getdents_handler; - _request_handlers[CAPIO_REQUEST_GETDENTS64] = getdents_handler; - _request_handlers[CAPIO_REQUEST_HANDSHAKE_NAMED] = handshake_named_handler; - _request_handlers[CAPIO_REQUEST_HANDSHAKE_ANONYMOUS] = handshake_anonymous_handler; - _request_handlers[CAPIO_REQUEST_MKDIR] = mkdir_handler; - _request_handlers[CAPIO_REQUEST_OPEN] = open_handler; - _request_handlers[CAPIO_REQUEST_READ] = read_handler; - _request_handlers[CAPIO_REQUEST_RENAME] = rename_handler; - _request_handlers[CAPIO_REQUEST_RMDIR] = rmdir_handler; - _request_handlers[CAPIO_REQUEST_SEEK] = lseek_handler; - _request_handlers[CAPIO_REQUEST_SEEK_DATA] = seek_data_handler; - _request_handlers[CAPIO_REQUEST_SEEK_END] = seek_end_handler; - _request_handlers[CAPIO_REQUEST_SEEK_HOLE] = seek_hole_handler; - _request_handlers[CAPIO_REQUEST_STAT] = stat_handler; - _request_handlers[CAPIO_REQUEST_UNLINK] = unlink_handler; - _request_handlers[CAPIO_REQUEST_WRITE] = write_handler; - - return _request_handlers; -} - -[[noreturn]] void capio_server(Semaphore &internal_server_sem) { - static const std::array request_handlers = - build_request_handlers_table(); - - START_LOG(gettid(), "call()"); - - MPI_Comm_size(MPI_COMM_WORLD, &n_servers); - setup_signal_handlers(); - backend->handshake_servers(); - - storage_manager->addDirectory(getpid(), get_capio_dir()); - - internal_server_sem.unlock(); - - auto str = std::unique_ptr(new char[CAPIO_REQ_MAX_SIZE]); - while (true) { - LOG(CAPIO_LOG_SERVER_REQUEST_START); - int code = client_manager->readNextRequest(str.get()); - if (code < 0 || code > CAPIO_NR_REQUESTS) { - std::cout << CAPIO_LOG_SERVER_CLI_LEVEL_ERROR << "Received invalid code: " << code - << std::endl; - - ERR_EXIT("Error: received invalid request code"); - } - request_handlers[code](str.get()); - LOG(CAPIO_LOG_SERVER_REQUEST_END); - } -} - int parseCLI(int argc, char **argv) { Logger *log; @@ -278,17 +219,17 @@ int parseCLI(int argc, char **argv) { } backend = select_backend(backend_name_str, argc, argv); - std::cout << CAPIO_LOG_SERVER_CLI_LEVEL_INFO << "server initialization completed!" << std::endl + std::cout << CAPIO_LOG_SERVER_CLI_LEVEL_INFO << "Completed parse of CLI args!" << std::endl << std::flush; return 0; } int main(int argc, char **argv) { - Semaphore internal_server_sem(0); - std::cout << CAPIO_LOG_SERVER_BANNER; + setup_signal_handlers(); + parseCLI(argc, argv); START_LOG(gettid(), "call()"); @@ -298,14 +239,21 @@ int main(int argc, char **argv) { shm_canary = new CapioShmCanary(capio_cl_engine->getWorkflowName()); storage_manager = new StorageManager(); client_manager = new ClientManager(); + request_manager = new ClientRequestManager(); + + backend->handshake_servers(); + storage_manager->addDirectory(getpid(), get_capio_dir()); - std::thread server_thread(capio_server, std::ref(internal_server_sem)); - LOG("capio_server thread started"); - std::thread remote_listener_thread(capio_remote_listener, std::ref(internal_server_sem)); + std::thread remote_listener_thread(capio_remote_listener); LOG("capio_remote_listener thread started."); - server_thread.join(); + + request_manager->start(); remote_listener_thread.join(); delete backend; + delete storage_manager; + delete client_manager; + delete request_manager; + return 0; } \ No newline at end of file diff --git a/capio/server/include/client-manager/client_manager.hpp b/capio/server/include/client/manager.hpp similarity index 100% rename from capio/server/include/client-manager/client_manager.hpp rename to capio/server/include/client/manager.hpp diff --git a/capio/server/include/client/request.hpp b/capio/server/include/client/request.hpp new file mode 100644 index 000000000..0d8a77a7f --- /dev/null +++ b/capio/server/include/client/request.hpp @@ -0,0 +1,53 @@ +#ifndef CAPIO_REQUEST_HPP +#define CAPIO_REQUEST_HPP +#include "common/requests.hpp" +#include "utils/types.hpp" + +class ClientRequestManager { + + typedef void (*CSHandler_t)(const char *const); + + struct ClientHandlers { + static void access_handler(const char *const str); + static void clone_handler(const char *const str); + static void close_handler(const char *const str); + static void create_handler(const char *const str); + static void create_exclusive_handler(const char *const str); + static void dup_handler(const char *const str); + static void exit_group_handler(const char *const str); + static void fstat_handler(const char *const str); + static void getdents_handler(const char *const str); + static void handshake_named_handler(const char *const str); + static void handshake_anonymous_handler(const char *const str); + static void mkdir_handler(const char *const str); + static void open_handler(const char *const str); + static void read_handler(const char *const str); + static void rename_handler(const char *const str); + static void rmdir_handler(const char *const str); + static void lseek_handler(const char *const str); + static void seek_data_handler(const char *const str); + static void seek_end_handler(const char *const str); + static void seek_hole_handler(const char *const str); + static void stat_handler(const char *const str); + static void unlink_handler(const char *const str); + static void write_handler(const char *const str); + }; + + struct ClientUtilities { + static void reply_stat(int tid, const std::filesystem::path &path); + static void handle_close(int tid, int fd); + static void handle_exit_group(int fd); + static void handle_seek_end(int tid, int fd); + + }; + + const std::array request_handlers; + + static constexpr std::array build_request_handlers_table(); + + public: + ClientRequestManager(); + void start() const; +}; + +#endif // CAPIO_REQUEST_HPP diff --git a/capio/server/include/handlers.hpp b/capio/server/include/handlers.hpp deleted file mode 100644 index 58ba56a23..000000000 --- a/capio/server/include/handlers.hpp +++ /dev/null @@ -1,24 +0,0 @@ -#ifndef CAPIO_SERVER_HANDLERS_HPP -#define CAPIO_SERVER_HANDLERS_HPP - -// TODO: remove these headers from here and ensure all handlers are -// self-contained - -#include "handlers/access.hpp" -#include "handlers/clone.hpp" -#include "handlers/close.hpp" -#include "handlers/dup.hpp" -#include "handlers/exig.hpp" -#include "handlers/getdents.hpp" -#include "handlers/handshake.hpp" -#include "handlers/mkdir.hpp" -#include "handlers/open.hpp" -#include "handlers/read.hpp" -#include "handlers/rename.hpp" -#include "handlers/rmdir.hpp" -#include "handlers/seek.hpp" -#include "handlers/stat.hpp" -#include "handlers/unlink.hpp" -#include "handlers/write.hpp" - -#endif // CAPIO_SERVER_HANDLERS_HPP diff --git a/capio/server/include/remote/backend.hpp b/capio/server/include/remote/backend.hpp index 43ad8f5bb..4f52b5caa 100644 --- a/capio/server/include/remote/backend.hpp +++ b/capio/server/include/remote/backend.hpp @@ -1,7 +1,9 @@ #ifndef CAPIO_SERVER_REMOTE_BACKEND_HPP #define CAPIO_SERVER_REMOTE_BACKEND_HPP -#include "common/logger.hpp" #include +#include + +#include "common/logger.hpp" class RemoteRequest { private: diff --git a/capio/server/include/remote/backend/mpi.hpp b/capio/server/include/remote/backend/mpi.hpp index cda73bc91..ca7bae92a 100644 --- a/capio/server/include/remote/backend/mpi.hpp +++ b/capio/server/include/remote/backend/mpi.hpp @@ -38,6 +38,7 @@ class MPIBackend : public Backend { nodes.emplace(node_name); rank_nodes_equivalence[std::to_string(rank)] = node_name; rank_nodes_equivalence[node_name] = std::to_string(rank); + MPI_Comm_size(MPI_COMM_WORLD, &n_servers); } ~MPIBackend() override { diff --git a/capio/server/include/remote/handlers/stat.hpp b/capio/server/include/remote/handlers/stat.hpp index f9cc7b231..6a23fbad4 100644 --- a/capio/server/include/remote/handlers/stat.hpp +++ b/capio/server/include/remote/handlers/stat.hpp @@ -1,7 +1,7 @@ #ifndef CAPIO_SERVER_REMOTE_HANDLERS_STAT_HPP #define CAPIO_SERVER_REMOTE_HANDLERS_STAT_HPP -#include "client-manager/client_manager.hpp" +#include "client/manager.hpp" #include "remote/backend.hpp" #include "remote/requests.hpp" #include "storage/manager.hpp" diff --git a/capio/server/include/remote/listener.hpp b/capio/server/include/remote/listener.hpp index 90c908edd..3921631f0 100644 --- a/capio/server/include/remote/listener.hpp +++ b/capio/server/include/remote/listener.hpp @@ -56,14 +56,12 @@ inline Backend *select_backend(const std::string &backend_name, int argc, char * return new MPIBackend(argc, argv); } -[[noreturn]] void capio_remote_listener(Semaphore &internal_server_sem) { +[[noreturn]] void capio_remote_listener() { static const std::array server_request_handlers = build_server_request_handlers_table(); START_LOG(gettid(), "call()"); - internal_server_sem.lock(); - while (true) { auto request = backend->read_next_request(); diff --git a/capio/server/include/remote/requests.hpp b/capio/server/include/remote/requests.hpp index b7175cbd7..4e9bf6047 100644 --- a/capio/server/include/remote/requests.hpp +++ b/capio/server/include/remote/requests.hpp @@ -2,8 +2,11 @@ #define CAPIO_REMOTE_REQUESTS_HPP #include "storage/manager.hpp" +#include "common/requests.hpp" +#include "utils/location.hpp" extern StorageManager *storage_manager; +extern char *node_name; inline void serve_remote_stat_request(const std::filesystem::path &path, int source_tid, off64_t file_size, bool is_dir, const std::string &dest) { diff --git a/capio/server/include/utils/capio_file.hpp b/capio/server/include/utils/capio_file.hpp index ed68732ff..15cbebbc8 100644 --- a/capio/server/include/utils/capio_file.hpp +++ b/capio/server/include/utils/capio_file.hpp @@ -6,6 +6,7 @@ #include #include #include +#include #include #include diff --git a/capio/server/include/utils/common.hpp b/capio/server/include/utils/common.hpp index f850b7122..5bb0755de 100644 --- a/capio/server/include/utils/common.hpp +++ b/capio/server/include/utils/common.hpp @@ -5,7 +5,7 @@ #include #include "capiocl_adapter.hpp" -#include "client-manager/client_manager.hpp" +#include "client/manager.hpp" #include "common/dirent.hpp" #include "storage/manager.hpp" #include "utils/capio_file.hpp" diff --git a/capio/server/include/utils/env.hpp b/capio/server/include/utils/env.hpp index ca41cb36d..acbc02805 100644 --- a/capio/server/include/utils/env.hpp +++ b/capio/server/include/utils/env.hpp @@ -5,7 +5,7 @@ #include "common/constants.hpp" -off64_t get_file_initial_size() { +inline off64_t get_file_initial_size() { START_LOG(gettid(), "call()"); static off64_t file_initial_size = 0; if (file_initial_size == 0) { @@ -21,7 +21,7 @@ off64_t get_file_initial_size() { return file_initial_size; } -off64_t get_prefetch_data_size() { +inline off64_t get_prefetch_data_size() { START_LOG(gettid(), "call()"); static off64_t prefetch_data_size = -1; if (prefetch_data_size == -1) { diff --git a/capio/server/include/utils/location.hpp b/capio/server/include/utils/location.hpp index c43489a7e..e7d771ebc 100644 --- a/capio/server/include/utils/location.hpp +++ b/capio/server/include/utils/location.hpp @@ -5,7 +5,9 @@ #include #include "utils/types.hpp" +#include "remote/backend.hpp" +extern Backend *backend; extern char *node_name; constexpr char CAPIO_SERVER_FILES_LOCATION_NAME[] = "files_location_%s.txt"; diff --git a/capio/server/include/utils/signals.hpp b/capio/server/include/utils/signals.hpp index 4919b04fb..3d436c006 100644 --- a/capio/server/include/utils/signals.hpp +++ b/capio/server/include/utils/signals.hpp @@ -4,12 +4,17 @@ #include #include "remote/backend.hpp" +#include "client/manager.hpp" +#include "client/request.hpp" + +extern ClientManager *client_manager; +extern StorageManager *storage_manager; #ifdef CAPIO_COVERAGE extern "C" void __gcov_dump(void); #endif -void sig_term_handler(int signum, siginfo_t *info, void *ptr) { +inline void sig_term_handler(int signum, siginfo_t *info, void *ptr) { START_LOG(gettid(), "call(signal=[%d] (%s) from process with pid=%ld)", signum, strsignal(signum), info != nullptr ? info->si_pid : -1); @@ -41,7 +46,7 @@ void sig_term_handler(int signum, siginfo_t *info, void *ptr) { exit(EXIT_SUCCESS); } -void setup_signal_handlers() { +inline void setup_signal_handlers() { START_LOG(gettid(), "call()"); static struct sigaction sigact; memset(&sigact, 0, sizeof(sigact)); diff --git a/capio/server/include/utils/types.hpp b/capio/server/include/utils/types.hpp index c9f815e31..ff5b9d35d 100644 --- a/capio/server/include/utils/types.hpp +++ b/capio/server/include/utils/types.hpp @@ -16,6 +16,4 @@ typedef std::unordered_map *, Semaphore *>>> CSClientsRemotePendingNFilesMap_t; -typedef void (*CSHandler_t)(const char *const); - #endif // CAPIO_SERVER_UTILS_TYPES_HPP diff --git a/capio/server/include/handlers/access.hpp b/capio/server/src/client_handlers/access.cpp similarity index 75% rename from capio/server/include/handlers/access.hpp rename to capio/server/src/client_handlers/access.cpp index b00c8f702..eff97e0b1 100644 --- a/capio/server/include/handlers/access.hpp +++ b/capio/server/src/client_handlers/access.cpp @@ -1,11 +1,14 @@ #ifndef CAPIO_SERVER_HANDLERS_ACCESS_HPP #define CAPIO_SERVER_HANDLERS_ACCESS_HPP +#include "client/manager.hpp" +#include "client/request.hpp" +#include "utils/capiocl_adapter.hpp" #include "utils/location.hpp" extern ClientManager *client_manager; -void access_handler(const char *const str) { +void ClientRequestManager::ClientHandlers::access_handler(const char *const str) { START_LOG(gettid(), "call(str=%s)", str); long tid; char path[PATH_MAX]; diff --git a/capio/server/include/handlers/clone.hpp b/capio/server/src/client_handlers/clone.cpp similarity index 72% rename from capio/server/include/handlers/clone.hpp rename to capio/server/src/client_handlers/clone.cpp index 1975e78ff..c95973790 100644 --- a/capio/server/include/handlers/clone.hpp +++ b/capio/server/src/client_handlers/clone.cpp @@ -1,9 +1,13 @@ #ifndef CAPIO_SERVER_HANDLERS_CLONE_HPP #define CAPIO_SERVER_HANDLERS_CLONE_HPP +#include "client/manager.hpp" +#include "client/request.hpp" #include "storage/manager.hpp" +extern ClientManager *client_manager; extern StorageManager *storage_manager; -void clone_handler(const char *const str) { + +void ClientRequestManager::ClientHandlers::clone_handler(const char *const str) { pid_t parent_tid, child_tid; sscanf(str, "%d %d", &parent_tid, &child_tid); START_LOG(gettid(), "call(parent_tid=%d, child_tid=%d)", parent_tid, child_tid); diff --git a/capio/server/include/handlers/close.hpp b/capio/server/src/client_handlers/close.cpp similarity index 83% rename from capio/server/include/handlers/close.hpp rename to capio/server/src/client_handlers/close.cpp index b3478fd5d..a96bee35d 100644 --- a/capio/server/include/handlers/close.hpp +++ b/capio/server/src/client_handlers/close.cpp @@ -1,10 +1,18 @@ #ifndef CAPIO_SERVER_HANDLERS_CLOSE_HPP #define CAPIO_SERVER_HANDLERS_CLOSE_HPP -#include "read.hpp" +#include "client/request.hpp" +#include "storage/manager.hpp" +#include "utils/capiocl_adapter.hpp" +#include "utils/location.hpp" extern StorageManager *storage_manager; +// TODO: refactor and remove the n_files code +extern std::mutex nfiles_mutex; +extern CSFilesSentMap_t files_sent; +extern CSClientsRemotePendingNFilesMap_t clients_remote_pending_nfiles; + inline void handle_pending_remote_nfiles(const std::filesystem::path &path) { START_LOG(gettid(), "call(%s)", path.c_str()); @@ -37,7 +45,7 @@ inline void handle_pending_remote_nfiles(const std::filesystem::path &path) { } } -inline void handle_close(int tid, int fd) { +void ClientRequestManager::ClientUtilities::handle_close(int tid, int fd) { START_LOG(gettid(), "call(tid=%d, fd=%d)", tid, fd); const std::filesystem::path path = storage_manager->getPath(tid, fd); @@ -65,10 +73,10 @@ inline void handle_close(int tid, int fd) { storage_manager->removeFromTid(tid, fd); } -void close_handler(const char *str) { +void ClientRequestManager::ClientHandlers::close_handler(const char *str) { int tid, fd; sscanf(str, "%d %d", &tid, &fd); - handle_close(tid, fd); + ClientUtilities::handle_close(tid, fd); } #endif // CAPIO_SERVER_HANDLERS_CLOSE_HPP diff --git a/capio/server/include/handlers/dup.hpp b/capio/server/src/client_handlers/dup.cpp similarity index 74% rename from capio/server/include/handlers/dup.hpp rename to capio/server/src/client_handlers/dup.cpp index f4fac5a9b..1fcdfa999 100644 --- a/capio/server/include/handlers/dup.hpp +++ b/capio/server/src/client_handlers/dup.cpp @@ -1,9 +1,11 @@ #ifndef CAPIO_SERVER_HANDLERS_DUP_HPP #define CAPIO_SERVER_HANDLERS_DUP_HPP +#include "client/request.hpp" +#include "storage/manager.hpp" extern StorageManager *storage_manager; -void dup_handler(const char *const str) { +void ClientRequestManager::ClientHandlers::dup_handler(const char *const str) { int tid, old_fd, new_fd; sscanf(str, "%d %d %d", &tid, &old_fd, &new_fd); START_LOG(gettid(), "call(tid=%d, old_fd=%d, new_fd=%d)", tid, old_fd, new_fd); diff --git a/capio/server/include/handlers/exig.hpp b/capio/server/src/client_handlers/exig.cpp similarity index 79% rename from capio/server/include/handlers/exig.hpp rename to capio/server/src/client_handlers/exig.cpp index c41cc0ffd..927bd3716 100644 --- a/capio/server/include/handlers/exig.hpp +++ b/capio/server/src/client_handlers/exig.cpp @@ -1,10 +1,14 @@ #ifndef CAPIO_SERVER_HANDLERS_EXITG_HPP #define CAPIO_SERVER_HANDLERS_EXITG_HPP - +#include "client/manager.hpp" +#include "client/request.hpp" #include "storage/manager.hpp" +#include "utils/capiocl_adapter.hpp" + +extern ClientManager *client_manager; extern StorageManager *storage_manager; -inline void handle_exit_group(int tid) { +void ClientRequestManager::ClientUtilities::handle_exit_group(int tid) { START_LOG(gettid(), "call(tid=%d)", tid); LOG("retrieving files from writers for process with pid = %d", tid); @@ -36,10 +40,10 @@ inline void handle_exit_group(int tid) { client_manager->removeClient(tid); } -void exit_group_handler(const char *const str) { +void ClientRequestManager::ClientHandlers::exit_group_handler(const char *const str) { int tid; sscanf(str, "%d", &tid); - handle_exit_group(tid); + ClientUtilities::handle_exit_group(tid); } #endif // CAPIO_SERVER_HANDLERS_EXITG_HPP diff --git a/capio/server/include/handlers/getdents.hpp b/capio/server/src/client_handlers/getdents.cpp similarity index 96% rename from capio/server/include/handlers/getdents.hpp rename to capio/server/src/client_handlers/getdents.cpp index 797943802..cd513834f 100644 --- a/capio/server/include/handlers/getdents.hpp +++ b/capio/server/src/client_handlers/getdents.cpp @@ -3,10 +3,11 @@ #include +#include "client/manager.hpp" +#include "client/request.hpp" #include "posix/utils/env.hpp" - -#include "remote/backend.hpp" #include "remote/requests.hpp" +#include "utils/common.hpp" #include "utils/location.hpp" extern StorageManager *storage_manager; @@ -96,7 +97,7 @@ inline void handle_getdents(int tid, int fd, long int count) { } } -void getdents_handler(const char *const str) { +void ClientRequestManager::ClientHandlers::getdents_handler(const char *const str) { int tid, fd; off64_t count; sscanf(str, "%d %d %ld", &tid, &fd, &count); diff --git a/capio/server/include/handlers/handshake.hpp b/capio/server/src/client_handlers/handshake.cpp similarity index 58% rename from capio/server/include/handlers/handshake.hpp rename to capio/server/src/client_handlers/handshake.cpp index 44ab913ce..38e50bcd0 100644 --- a/capio/server/include/handlers/handshake.hpp +++ b/capio/server/src/client_handlers/handshake.cpp @@ -1,14 +1,18 @@ #ifndef CAPIO_SERVER_HANDLERS_HANDSHAKE_HPP #define CAPIO_SERVER_HANDLERS_HANDSHAKE_HPP -#include "clone.hpp" +#include -void handshake_anonymous_handler(const char *const str) { +#include "client/manager.hpp" +#include "client/request.hpp" + +extern ClientManager *client_manager; +void ClientRequestManager::ClientHandlers::handshake_anonymous_handler(const char *const str) { int tid, pid; sscanf(str, "%d %d", &tid, &pid); client_manager->registerClient(tid); } -void handshake_named_handler(const char *const str) { +void ClientRequestManager::ClientHandlers::handshake_named_handler(const char *const str) { int tid, pid, wait; char app_name[1024]; sscanf(str, "%d %d %s %d", &tid, &pid, app_name, &wait); diff --git a/capio/server/include/handlers/mkdir.hpp b/capio/server/src/client_handlers/mkdir.cpp similarity index 74% rename from capio/server/include/handlers/mkdir.hpp rename to capio/server/src/client_handlers/mkdir.cpp index f3eca5c73..13eb70a04 100644 --- a/capio/server/include/handlers/mkdir.hpp +++ b/capio/server/src/client_handlers/mkdir.cpp @@ -1,13 +1,14 @@ #ifndef CAPIO_SERVER_HANDLERS_MKDIR_HPP #define CAPIO_SERVER_HANDLERS_MKDIR_HPP -#include "client-manager/client_manager.hpp" +#include "client/manager.hpp" +#include "client/request.hpp" #include "storage/manager.hpp" extern ClientManager *client_manager; extern StorageManager *storage_manager; -void mkdir_handler(const char *const str) { +void ClientRequestManager::ClientHandlers::mkdir_handler(const char *const str) { pid_t tid; char pathname[PATH_MAX]; sscanf(str, "%d %s", &tid, pathname); diff --git a/capio/server/include/handlers/open.hpp b/capio/server/src/client_handlers/open.cpp similarity index 90% rename from capio/server/include/handlers/open.hpp rename to capio/server/src/client_handlers/open.cpp index a6c6a6896..80790273b 100644 --- a/capio/server/include/handlers/open.hpp +++ b/capio/server/src/client_handlers/open.cpp @@ -1,6 +1,11 @@ #ifndef CAPIO_SERVER_HANDLERS_OPEN_HPP #define CAPIO_SERVER_HANDLERS_OPEN_HPP +#include "client/manager.hpp" +#include "client/request.hpp" +#include "storage/manager.hpp" +#include "utils/capiocl_adapter.hpp" +#include "utils/env.hpp" #include "utils/location.hpp" extern ClientManager *client_manager; @@ -68,7 +73,7 @@ inline void handle_open(int tid, int fd, const std::filesystem::path &path) { } } -void create_handler(const char *const str) { +void ClientRequestManager::ClientHandlers::create_handler(const char *const str) { int tid, fd; char path[PATH_MAX]; sscanf(str, "%d %d %s", &tid, &fd, path); @@ -79,7 +84,7 @@ void create_handler(const char *const str) { handle_create(tid, fd, path); } -void create_exclusive_handler(const char *const str) { +void ClientRequestManager::ClientHandlers::create_exclusive_handler(const char *const str) { int tid, fd; char path[PATH_MAX]; sscanf(str, "%d %d %s", &tid, &fd, path); @@ -90,7 +95,7 @@ void create_exclusive_handler(const char *const str) { handle_create_exclusive(tid, fd, path); } -void open_handler(const char *const str) { +void ClientRequestManager::ClientHandlers::open_handler(const char *const str) { int tid, fd; char path[PATH_MAX]; sscanf(str, "%d %d %s", &tid, &fd, path); diff --git a/capio/server/include/handlers/read.hpp b/capio/server/src/client_handlers/read.cpp similarity index 97% rename from capio/server/include/handlers/read.hpp rename to capio/server/src/client_handlers/read.cpp index e1944d200..24b8a639b 100644 --- a/capio/server/include/handlers/read.hpp +++ b/capio/server/src/client_handlers/read.cpp @@ -4,9 +4,11 @@ #include #include +#include "client/manager.hpp" +#include "client/request.hpp" #include "remote/backend.hpp" #include "remote/requests.hpp" - +#include "utils/capiocl_adapter.hpp" #include "utils/location.hpp" std::mutex local_read_mutex; @@ -182,7 +184,7 @@ inline void handle_read(int tid, int fd, off64_t count) { } } -void read_handler(const char *const str) { +void ClientRequestManager::ClientHandlers::read_handler(const char *const str) { int tid, fd; off64_t count; sscanf(str, "%d %d %ld", &tid, &fd, &count); diff --git a/capio/server/include/handlers/rename.hpp b/capio/server/src/client_handlers/rename.cpp similarity index 89% rename from capio/server/include/handlers/rename.hpp rename to capio/server/src/client_handlers/rename.cpp index 2cb4238c5..7d449d1ad 100644 --- a/capio/server/include/handlers/rename.hpp +++ b/capio/server/src/client_handlers/rename.cpp @@ -1,6 +1,7 @@ #ifndef CAPIO_SERVER_HANDLERS_RENAME_HPP #define CAPIO_SERVER_HANDLERS_RENAME_HPP -#include "client-manager/client_manager.hpp" +#include "client/manager.hpp" +#include "client/request.hpp" #include "storage/manager.hpp" #include "utils/location.hpp" @@ -26,7 +27,7 @@ void handle_rename(int tid, const std::filesystem::path &oldpath, } } -void rename_handler(const char *const str) { +void ClientRequestManager::ClientHandlers::rename_handler(const char *const str) { char oldpath[PATH_MAX]; char newpath[PATH_MAX]; int tid; diff --git a/capio/server/include/handlers/rmdir.hpp b/capio/server/src/client_handlers/rmdir.cpp similarity index 80% rename from capio/server/include/handlers/rmdir.hpp rename to capio/server/src/client_handlers/rmdir.cpp index 917aff207..b8bbdaea1 100644 --- a/capio/server/include/handlers/rmdir.hpp +++ b/capio/server/src/client_handlers/rmdir.cpp @@ -1,13 +1,15 @@ #ifndef CAPIO_SERVER_HANDLERS_RMDIR_HPP #define CAPIO_SERVER_HANDLERS_RMDIR_HPP -#include "client-manager/client_manager.hpp" +#include "client/manager.hpp" +#include "client/request.hpp" #include "storage/manager.hpp" +#include "utils/capiocl_adapter.hpp" #include "utils/location.hpp" extern ClientManager *client_manager; extern StorageManager *storage_manager; -void rmdir_handler(const char *const str) { +void ClientRequestManager::ClientHandlers::rmdir_handler(const char *const str) { char dir_to_remove[PATH_MAX]; int tid; sscanf(str, "%s %d", dir_to_remove, &tid); diff --git a/capio/server/include/handlers/seek.hpp b/capio/server/src/client_handlers/seek.cpp similarity index 68% rename from capio/server/include/handlers/seek.hpp rename to capio/server/src/client_handlers/seek.cpp index 9335d44a5..f7789088a 100644 --- a/capio/server/include/handlers/seek.hpp +++ b/capio/server/src/client_handlers/seek.cpp @@ -1,14 +1,14 @@ #ifndef CAPIO_SERVER_HANDLERS_SEEK_HPP #define CAPIO_SERVER_HANDLERS_SEEK_HPP -#include "client-manager/client_manager.hpp" -#include "stat.hpp" +#include "client/manager.hpp" +#include "client/request.hpp" #include "storage/manager.hpp" extern ClientManager *client_manager; extern StorageManager *storage_manager; -inline void handle_lseek(int tid, int fd, off64_t offset) { +void handle_lseek(int tid, int fd, off64_t offset) { START_LOG(gettid(), "call(tid=%d, fd=%d, offset=%ld)", tid, fd, offset); storage_manager->setFileOffset(tid, fd, offset); @@ -24,14 +24,14 @@ void handle_seek_data(int tid, int fd, off64_t offset) { client_manager->replyToClient(tid, offset); } -inline void handle_seek_end(int tid, int fd) { +void ClientRequestManager::ClientUtilities::handle_seek_end(int tid, int fd) { START_LOG(gettid(), "call(tid=%d, fd=%d)", tid, fd); // seek_end here behaves as stat because we want the file size - reply_stat(tid, storage_manager->getPath(tid, fd)); + ClientRequestManager::ClientUtilities::reply_stat(tid, storage_manager->getPath(tid, fd)); } -inline void handle_seek_hole(int tid, int fd, off64_t offset) { +void handle_seek_hole(int tid, int fd, off64_t offset) { START_LOG(gettid(), "call(tid=%d, fd=%d, offset=%ld)", tid, fd, offset); CapioFile &c_file = storage_manager->get(tid, fd); @@ -40,27 +40,27 @@ inline void handle_seek_hole(int tid, int fd, off64_t offset) { client_manager->replyToClient(tid, offset); } -void lseek_handler(const char *const str) { +void ClientRequestManager::ClientHandlers::lseek_handler(const char *const str) { int tid, fd; off64_t offset; sscanf(str, "%d %d %ld", &tid, &fd, &offset); handle_lseek(tid, fd, offset); } -void seek_data_handler(const char *const str) { +void ClientRequestManager::ClientHandlers::seek_data_handler(const char *const str) { int tid, fd; off64_t offset; sscanf(str, "%d %d %ld", &tid, &fd, &offset); handle_seek_data(tid, fd, offset); } -void seek_end_handler(const char *const str) { +void ClientRequestManager::ClientHandlers::seek_end_handler(const char *const str) { int tid, fd; sscanf(str, "%d %d", &tid, &fd); - handle_seek_end(tid, fd); + ClientUtilities::handle_seek_end(tid, fd); } -void seek_hole_handler(const char *const str) { +void ClientRequestManager::ClientHandlers::seek_hole_handler(const char *const str) { int tid, fd; off64_t offset; sscanf(str, "%d %d %ld", &tid, &fd, &offset); diff --git a/capio/server/include/handlers/stat.hpp b/capio/server/src/client_handlers/stat.cpp similarity index 87% rename from capio/server/include/handlers/stat.hpp rename to capio/server/src/client_handlers/stat.cpp index e4fb06cf5..1f615922d 100644 --- a/capio/server/include/handlers/stat.hpp +++ b/capio/server/src/client_handlers/stat.cpp @@ -4,16 +4,16 @@ #include #include +#include "client/manager.hpp" +#include "client/request.hpp" #include "remote/backend.hpp" - #include "remote/requests.hpp" - +#include "storage/manager.hpp" +#include "utils/capiocl_adapter.hpp" +#include "utils/env.hpp" #include "utils/location.hpp" #include "utils/types.hpp" -#include "client-manager/client_manager.hpp" -#include "storage/manager.hpp" - extern StorageManager *storage_manager; extern ClientManager *client_manager; @@ -36,7 +36,7 @@ void wait_for_file_completion(int tid, const std::filesystem::path &path) { } } -inline void reply_stat(int tid, const std::filesystem::path &path) { +void ClientRequestManager::ClientUtilities::reply_stat(int tid, const std::filesystem::path &path) { START_LOG(gettid(), "call(tid=%d, path=%s)", tid, path.c_str()); auto file_location_opt = get_file_location_opt(path); @@ -85,14 +85,14 @@ inline void reply_stat(int tid, const std::filesystem::path &path) { } } -void fstat_handler(const char *const str) { +void ClientRequestManager::ClientHandlers::fstat_handler(const char *const str) { int tid, fd; sscanf(str, "%d %d", &tid, &fd); - reply_stat(tid, storage_manager->getPath(tid, fd)); + ClientUtilities::reply_stat(tid, storage_manager->getPath(tid, fd)); } -void stat_handler(const char *const str) { +void ClientRequestManager::ClientHandlers::stat_handler(const char *const str) { char path[2048]; int tid; sscanf(str, "%d %s", &tid, path); @@ -100,7 +100,7 @@ void stat_handler(const char *const str) { client_manager->replyToClient(tid, CAPIO_POSIX_SYSCALL_REQUEST_SKIP); return; } - reply_stat(tid, path); + ClientUtilities::reply_stat(tid, path); } #endif // CAPIO_SERVER_HANDLERS_STAT_HPP diff --git a/capio/server/include/handlers/unlink.hpp b/capio/server/src/client_handlers/unlink.cpp similarity index 80% rename from capio/server/include/handlers/unlink.hpp rename to capio/server/src/client_handlers/unlink.cpp index 22b670001..109f06050 100644 --- a/capio/server/include/handlers/unlink.hpp +++ b/capio/server/src/client_handlers/unlink.cpp @@ -1,12 +1,15 @@ #ifndef CAPIO_SERVER_HANDLERS_UNLINK_HPP #define CAPIO_SERVER_HANDLERS_UNLINK_HPP -#include "client-manager/client_manager.hpp" +#include "client/manager.hpp" +#include "client/request.hpp" #include "storage/manager.hpp" +#include "utils/capiocl_adapter.hpp" +#include "utils/location.hpp" extern StorageManager *storage_manager; extern ClientManager *client_manager; -void unlink_handler(const char *const str) { +void ClientRequestManager::ClientHandlers::unlink_handler(const char *const str) { char path[PATH_MAX]; int tid; sscanf(str, "%d %s", &tid, path); diff --git a/capio/server/include/handlers/write.hpp b/capio/server/src/client_handlers/write.cpp similarity index 84% rename from capio/server/include/handlers/write.hpp rename to capio/server/src/client_handlers/write.cpp index b9233ccd2..81009b4b8 100644 --- a/capio/server/include/handlers/write.hpp +++ b/capio/server/src/client_handlers/write.cpp @@ -1,9 +1,15 @@ #ifndef CAPIO_SERVER_HANDLERS_WRITE_HPP #define CAPIO_SERVER_HANDLERS_WRITE_HPP +#include "client/manager.hpp" +#include "client/request.hpp" +#include "storage/manager.hpp" #include "utils/location.hpp" -void write_handler(const char *const str) { +extern StorageManager *storage_manager; +extern ClientManager *client_manager; + +void ClientRequestManager::ClientHandlers::write_handler(const char *const str) { std::string request; int tid, fd; off64_t count; diff --git a/capio/server/src/client_manager.cpp b/capio/server/src/client_manager.cpp index df69215a9..c0d725fd0 100644 --- a/capio/server/src/client_manager.cpp +++ b/capio/server/src/client_manager.cpp @@ -2,7 +2,7 @@ #include "utils/capiocl_adapter.hpp" -#include "client-manager/client_manager.hpp" +#include "client/manager.hpp" #include "common/constants.hpp" #include "common/queue.hpp" #include "utils/capiocl_adapter.hpp" diff --git a/capio/server/src/client_request.cpp b/capio/server/src/client_request.cpp new file mode 100644 index 000000000..d31e4abf7 --- /dev/null +++ b/capio/server/src/client_request.cpp @@ -0,0 +1,63 @@ +#include "client/manager.hpp" +#include "client/request.hpp" +#include "storage/manager.hpp" +#include "utils/common.hpp" +#include "utils/signals.hpp" + +extern ClientManager *client_manager; +extern StorageManager *storage_manager; + +constexpr std::array +ClientRequestManager::build_request_handlers_table() { + std::array _request_handlers{0}; + + _request_handlers[CAPIO_REQUEST_ACCESS] = ClientHandlers::access_handler; + _request_handlers[CAPIO_REQUEST_CLONE] = ClientHandlers::clone_handler; + _request_handlers[CAPIO_REQUEST_CLOSE] = ClientHandlers::close_handler; + _request_handlers[CAPIO_REQUEST_CREATE] = ClientHandlers::create_handler; + _request_handlers[CAPIO_REQUEST_CREATE_EXCLUSIVE] = ClientHandlers::create_exclusive_handler; + _request_handlers[CAPIO_REQUEST_DUP] = ClientHandlers::dup_handler; + _request_handlers[CAPIO_REQUEST_EXIT_GROUP] = ClientHandlers::exit_group_handler; + _request_handlers[CAPIO_REQUEST_FSTAT] = ClientHandlers::fstat_handler; + _request_handlers[CAPIO_REQUEST_GETDENTS] = ClientHandlers::getdents_handler; + _request_handlers[CAPIO_REQUEST_GETDENTS64] = ClientHandlers::getdents_handler; + _request_handlers[CAPIO_REQUEST_HANDSHAKE_NAMED] = ClientHandlers::handshake_named_handler; + _request_handlers[CAPIO_REQUEST_HANDSHAKE_ANONYMOUS] = ClientHandlers::handshake_anonymous_handler; + _request_handlers[CAPIO_REQUEST_MKDIR] = ClientHandlers::mkdir_handler; + _request_handlers[CAPIO_REQUEST_OPEN] = ClientHandlers::open_handler; + _request_handlers[CAPIO_REQUEST_READ] = ClientHandlers::read_handler; + _request_handlers[CAPIO_REQUEST_RENAME] = ClientHandlers::rename_handler; + _request_handlers[CAPIO_REQUEST_RMDIR] = ClientHandlers::rmdir_handler; + _request_handlers[CAPIO_REQUEST_SEEK] = ClientHandlers::lseek_handler; + _request_handlers[CAPIO_REQUEST_SEEK_DATA] = ClientHandlers::seek_data_handler; + _request_handlers[CAPIO_REQUEST_SEEK_END] = ClientHandlers::seek_end_handler; + _request_handlers[CAPIO_REQUEST_SEEK_HOLE] = ClientHandlers::seek_hole_handler; + _request_handlers[CAPIO_REQUEST_STAT] = ClientHandlers::stat_handler; + _request_handlers[CAPIO_REQUEST_UNLINK] = ClientHandlers::unlink_handler; + _request_handlers[CAPIO_REQUEST_WRITE] = ClientHandlers::write_handler; + + return _request_handlers; +} + +ClientRequestManager::ClientRequestManager() : request_handlers(build_request_handlers_table()) { + server_println(CAPIO_LOG_SERVER_CLI_LEVEL_INFO, "ClientRequestManager initialized correctly."); +} + +void ClientRequestManager::start() const { + + START_LOG(gettid(), "call()"); + + const auto str = std::unique_ptr(new char[CAPIO_REQ_MAX_SIZE]); + while (true) { + LOG(CAPIO_LOG_SERVER_REQUEST_START); + const int code = client_manager->readNextRequest(str.get()); + if (code < 0 || code > CAPIO_NR_REQUESTS) { + std::cout << CAPIO_LOG_SERVER_CLI_LEVEL_ERROR << "Received invalid code: " << code + << std::endl; + + ERR_EXIT("Error: received invalid request code"); + } + request_handlers[code](str.get()); + LOG(CAPIO_LOG_SERVER_REQUEST_END); + } +} \ No newline at end of file From 5fad3f6de9c3223d807d976357d0708ae12fdb23 Mon Sep 17 00:00:00 2001 From: = <=> Date: Mon, 16 Feb 2026 13:30:15 +0100 Subject: [PATCH 3/3] Removed unused anonymus handler and cleanup of structs --- capio/common/requests.hpp | 25 +++++----- capio/posix/utils/requests.hpp | 7 --- capio/server/include/client/request.hpp | 11 +++-- capio/server/src/client_handlers/access.cpp | 2 +- capio/server/src/client_handlers/clone.cpp | 2 +- capio/server/src/client_handlers/close.cpp | 2 +- capio/server/src/client_handlers/dup.cpp | 2 +- capio/server/src/client_handlers/exig.cpp | 2 +- capio/server/src/client_handlers/getdents.cpp | 2 +- .../server/src/client_handlers/handshake.cpp | 7 +-- capio/server/src/client_handlers/mkdir.cpp | 2 +- capio/server/src/client_handlers/open.cpp | 6 +-- capio/server/src/client_handlers/read.cpp | 2 +- capio/server/src/client_handlers/rename.cpp | 2 +- capio/server/src/client_handlers/rmdir.cpp | 2 +- capio/server/src/client_handlers/seek.cpp | 8 ++-- capio/server/src/client_handlers/stat.cpp | 4 +- capio/server/src/client_handlers/unlink.cpp | 2 +- capio/server/src/client_handlers/write.cpp | 2 +- capio/server/src/client_request.cpp | 47 +++++++++---------- 20 files changed, 63 insertions(+), 76 deletions(-) diff --git a/capio/common/requests.hpp b/capio/common/requests.hpp index 533a68178..1d562ba68 100644 --- a/capio/common/requests.hpp +++ b/capio/common/requests.hpp @@ -12,19 +12,18 @@ constexpr const int CAPIO_REQUEST_FSTAT = 7; constexpr const int CAPIO_REQUEST_GETDENTS = 8; constexpr const int CAPIO_REQUEST_GETDENTS64 = 9; constexpr const int CAPIO_REQUEST_HANDSHAKE_NAMED = 10; -constexpr const int CAPIO_REQUEST_HANDSHAKE_ANONYMOUS = 11; -constexpr const int CAPIO_REQUEST_MKDIR = 12; -constexpr const int CAPIO_REQUEST_OPEN = 13; -constexpr const int CAPIO_REQUEST_READ = 14; -constexpr const int CAPIO_REQUEST_RENAME = 15; -constexpr const int CAPIO_REQUEST_SEEK = 16; -constexpr const int CAPIO_REQUEST_SEEK_DATA = 17; -constexpr const int CAPIO_REQUEST_SEEK_END = 18; -constexpr const int CAPIO_REQUEST_SEEK_HOLE = 19; -constexpr const int CAPIO_REQUEST_STAT = 20; -constexpr const int CAPIO_REQUEST_UNLINK = 21; -constexpr const int CAPIO_REQUEST_WRITE = 22; -constexpr const int CAPIO_REQUEST_RMDIR = 23; +constexpr const int CAPIO_REQUEST_MKDIR = 11; +constexpr const int CAPIO_REQUEST_OPEN = 12; +constexpr const int CAPIO_REQUEST_READ = 13; +constexpr const int CAPIO_REQUEST_RENAME = 14; +constexpr const int CAPIO_REQUEST_SEEK = 15; +constexpr const int CAPIO_REQUEST_SEEK_DATA = 16; +constexpr const int CAPIO_REQUEST_SEEK_END = 17; +constexpr const int CAPIO_REQUEST_SEEK_HOLE = 18; +constexpr const int CAPIO_REQUEST_STAT = 19; +constexpr const int CAPIO_REQUEST_UNLINK = 20; +constexpr const int CAPIO_REQUEST_WRITE = 21; +constexpr const int CAPIO_REQUEST_RMDIR = 22; constexpr const int CAPIO_NR_REQUESTS = 24; diff --git a/capio/posix/utils/requests.hpp b/capio/posix/utils/requests.hpp index 4867e6117..c325a8de8 100644 --- a/capio/posix/utils/requests.hpp +++ b/capio/posix/utils/requests.hpp @@ -105,13 +105,6 @@ inline off64_t getdents_request(const int fd, const off64_t count, bool is64bit, return res; } -inline void handshake_anonymous_request(const long tid, const long pid) { - START_LOG(capio_syscall(SYS_gettid), "call(tid=%ld, pid=%ld)", tid, pid); - char req[CAPIO_REQ_MAX_SIZE]; - sprintf(req, "%04d %ld %ld", CAPIO_REQUEST_HANDSHAKE_ANONYMOUS, tid, pid); - buf_requests->write(req, CAPIO_REQ_MAX_SIZE); -} - inline void handshake_named_request(const long tid, const long pid, const std::string &app_name, const bool wait = false) { START_LOG(capio_syscall(SYS_gettid), "call(tid=%ld, pid=%ld, app_name=%s)", tid, pid, diff --git a/capio/server/include/client/request.hpp b/capio/server/include/client/request.hpp index 0d8a77a7f..d891b72f4 100644 --- a/capio/server/include/client/request.hpp +++ b/capio/server/include/client/request.hpp @@ -7,18 +7,15 @@ class ClientRequestManager { typedef void (*CSHandler_t)(const char *const); - struct ClientHandlers { + struct MemHandlers { static void access_handler(const char *const str); static void clone_handler(const char *const str); static void close_handler(const char *const str); static void create_handler(const char *const str); static void create_exclusive_handler(const char *const str); static void dup_handler(const char *const str); - static void exit_group_handler(const char *const str); static void fstat_handler(const char *const str); static void getdents_handler(const char *const str); - static void handshake_named_handler(const char *const str); - static void handshake_anonymous_handler(const char *const str); static void mkdir_handler(const char *const str); static void open_handler(const char *const str); static void read_handler(const char *const str); @@ -33,12 +30,16 @@ class ClientRequestManager { static void write_handler(const char *const str); }; + struct Handlers { + static void handshake_named_handler(const char *const str); + static void exit_group_handler(const char *const str); + }; + struct ClientUtilities { static void reply_stat(int tid, const std::filesystem::path &path); static void handle_close(int tid, int fd); static void handle_exit_group(int fd); static void handle_seek_end(int tid, int fd); - }; const std::array request_handlers; diff --git a/capio/server/src/client_handlers/access.cpp b/capio/server/src/client_handlers/access.cpp index eff97e0b1..67e4a4614 100644 --- a/capio/server/src/client_handlers/access.cpp +++ b/capio/server/src/client_handlers/access.cpp @@ -8,7 +8,7 @@ extern ClientManager *client_manager; -void ClientRequestManager::ClientHandlers::access_handler(const char *const str) { +void ClientRequestManager::MemHandlers::access_handler(const char *const str) { START_LOG(gettid(), "call(str=%s)", str); long tid; char path[PATH_MAX]; diff --git a/capio/server/src/client_handlers/clone.cpp b/capio/server/src/client_handlers/clone.cpp index c95973790..5b9b62a7a 100644 --- a/capio/server/src/client_handlers/clone.cpp +++ b/capio/server/src/client_handlers/clone.cpp @@ -7,7 +7,7 @@ extern ClientManager *client_manager; extern StorageManager *storage_manager; -void ClientRequestManager::ClientHandlers::clone_handler(const char *const str) { +void ClientRequestManager::MemHandlers::clone_handler(const char *const str) { pid_t parent_tid, child_tid; sscanf(str, "%d %d", &parent_tid, &child_tid); START_LOG(gettid(), "call(parent_tid=%d, child_tid=%d)", parent_tid, child_tid); diff --git a/capio/server/src/client_handlers/close.cpp b/capio/server/src/client_handlers/close.cpp index a96bee35d..cf56b8c04 100644 --- a/capio/server/src/client_handlers/close.cpp +++ b/capio/server/src/client_handlers/close.cpp @@ -73,7 +73,7 @@ void ClientRequestManager::ClientUtilities::handle_close(int tid, int fd) { storage_manager->removeFromTid(tid, fd); } -void ClientRequestManager::ClientHandlers::close_handler(const char *str) { +void ClientRequestManager::MemHandlers::close_handler(const char *str) { int tid, fd; sscanf(str, "%d %d", &tid, &fd); ClientUtilities::handle_close(tid, fd); diff --git a/capio/server/src/client_handlers/dup.cpp b/capio/server/src/client_handlers/dup.cpp index 1fcdfa999..8b4df0476 100644 --- a/capio/server/src/client_handlers/dup.cpp +++ b/capio/server/src/client_handlers/dup.cpp @@ -5,7 +5,7 @@ extern StorageManager *storage_manager; -void ClientRequestManager::ClientHandlers::dup_handler(const char *const str) { +void ClientRequestManager::MemHandlers::dup_handler(const char *const str) { int tid, old_fd, new_fd; sscanf(str, "%d %d %d", &tid, &old_fd, &new_fd); START_LOG(gettid(), "call(tid=%d, old_fd=%d, new_fd=%d)", tid, old_fd, new_fd); diff --git a/capio/server/src/client_handlers/exig.cpp b/capio/server/src/client_handlers/exig.cpp index 927bd3716..ce29be8dd 100644 --- a/capio/server/src/client_handlers/exig.cpp +++ b/capio/server/src/client_handlers/exig.cpp @@ -40,7 +40,7 @@ void ClientRequestManager::ClientUtilities::handle_exit_group(int tid) { client_manager->removeClient(tid); } -void ClientRequestManager::ClientHandlers::exit_group_handler(const char *const str) { +void ClientRequestManager::Handlers::exit_group_handler(const char *const str) { int tid; sscanf(str, "%d", &tid); ClientUtilities::handle_exit_group(tid); diff --git a/capio/server/src/client_handlers/getdents.cpp b/capio/server/src/client_handlers/getdents.cpp index cd513834f..204d9081e 100644 --- a/capio/server/src/client_handlers/getdents.cpp +++ b/capio/server/src/client_handlers/getdents.cpp @@ -97,7 +97,7 @@ inline void handle_getdents(int tid, int fd, long int count) { } } -void ClientRequestManager::ClientHandlers::getdents_handler(const char *const str) { +void ClientRequestManager::MemHandlers::getdents_handler(const char *const str) { int tid, fd; off64_t count; sscanf(str, "%d %d %ld", &tid, &fd, &count); diff --git a/capio/server/src/client_handlers/handshake.cpp b/capio/server/src/client_handlers/handshake.cpp index 38e50bcd0..f173878fc 100644 --- a/capio/server/src/client_handlers/handshake.cpp +++ b/capio/server/src/client_handlers/handshake.cpp @@ -6,13 +6,8 @@ #include "client/request.hpp" extern ClientManager *client_manager; -void ClientRequestManager::ClientHandlers::handshake_anonymous_handler(const char *const str) { - int tid, pid; - sscanf(str, "%d %d", &tid, &pid); - client_manager->registerClient(tid); -} -void ClientRequestManager::ClientHandlers::handshake_named_handler(const char *const str) { +void ClientRequestManager::Handlers::handshake_named_handler(const char *const str) { int tid, pid, wait; char app_name[1024]; sscanf(str, "%d %d %s %d", &tid, &pid, app_name, &wait); diff --git a/capio/server/src/client_handlers/mkdir.cpp b/capio/server/src/client_handlers/mkdir.cpp index 13eb70a04..7bac2b7c8 100644 --- a/capio/server/src/client_handlers/mkdir.cpp +++ b/capio/server/src/client_handlers/mkdir.cpp @@ -8,7 +8,7 @@ extern ClientManager *client_manager; extern StorageManager *storage_manager; -void ClientRequestManager::ClientHandlers::mkdir_handler(const char *const str) { +void ClientRequestManager::MemHandlers::mkdir_handler(const char *const str) { pid_t tid; char pathname[PATH_MAX]; sscanf(str, "%d %s", &tid, pathname); diff --git a/capio/server/src/client_handlers/open.cpp b/capio/server/src/client_handlers/open.cpp index 80790273b..1c2a52206 100644 --- a/capio/server/src/client_handlers/open.cpp +++ b/capio/server/src/client_handlers/open.cpp @@ -73,7 +73,7 @@ inline void handle_open(int tid, int fd, const std::filesystem::path &path) { } } -void ClientRequestManager::ClientHandlers::create_handler(const char *const str) { +void ClientRequestManager::MemHandlers::create_handler(const char *const str) { int tid, fd; char path[PATH_MAX]; sscanf(str, "%d %d %s", &tid, &fd, path); @@ -84,7 +84,7 @@ void ClientRequestManager::ClientHandlers::create_handler(const char *const str) handle_create(tid, fd, path); } -void ClientRequestManager::ClientHandlers::create_exclusive_handler(const char *const str) { +void ClientRequestManager::MemHandlers::create_exclusive_handler(const char *const str) { int tid, fd; char path[PATH_MAX]; sscanf(str, "%d %d %s", &tid, &fd, path); @@ -95,7 +95,7 @@ void ClientRequestManager::ClientHandlers::create_exclusive_handler(const char * handle_create_exclusive(tid, fd, path); } -void ClientRequestManager::ClientHandlers::open_handler(const char *const str) { +void ClientRequestManager::MemHandlers::open_handler(const char *const str) { int tid, fd; char path[PATH_MAX]; sscanf(str, "%d %d %s", &tid, &fd, path); diff --git a/capio/server/src/client_handlers/read.cpp b/capio/server/src/client_handlers/read.cpp index 24b8a639b..c607aba34 100644 --- a/capio/server/src/client_handlers/read.cpp +++ b/capio/server/src/client_handlers/read.cpp @@ -184,7 +184,7 @@ inline void handle_read(int tid, int fd, off64_t count) { } } -void ClientRequestManager::ClientHandlers::read_handler(const char *const str) { +void ClientRequestManager::MemHandlers::read_handler(const char *const str) { int tid, fd; off64_t count; sscanf(str, "%d %d %ld", &tid, &fd, &count); diff --git a/capio/server/src/client_handlers/rename.cpp b/capio/server/src/client_handlers/rename.cpp index 7d449d1ad..c65e9c320 100644 --- a/capio/server/src/client_handlers/rename.cpp +++ b/capio/server/src/client_handlers/rename.cpp @@ -27,7 +27,7 @@ void handle_rename(int tid, const std::filesystem::path &oldpath, } } -void ClientRequestManager::ClientHandlers::rename_handler(const char *const str) { +void ClientRequestManager::MemHandlers::rename_handler(const char *const str) { char oldpath[PATH_MAX]; char newpath[PATH_MAX]; int tid; diff --git a/capio/server/src/client_handlers/rmdir.cpp b/capio/server/src/client_handlers/rmdir.cpp index b8bbdaea1..eab66b6e0 100644 --- a/capio/server/src/client_handlers/rmdir.cpp +++ b/capio/server/src/client_handlers/rmdir.cpp @@ -9,7 +9,7 @@ extern ClientManager *client_manager; extern StorageManager *storage_manager; -void ClientRequestManager::ClientHandlers::rmdir_handler(const char *const str) { +void ClientRequestManager::MemHandlers::rmdir_handler(const char *const str) { char dir_to_remove[PATH_MAX]; int tid; sscanf(str, "%s %d", dir_to_remove, &tid); diff --git a/capio/server/src/client_handlers/seek.cpp b/capio/server/src/client_handlers/seek.cpp index f7789088a..d9f8c6cc6 100644 --- a/capio/server/src/client_handlers/seek.cpp +++ b/capio/server/src/client_handlers/seek.cpp @@ -40,27 +40,27 @@ void handle_seek_hole(int tid, int fd, off64_t offset) { client_manager->replyToClient(tid, offset); } -void ClientRequestManager::ClientHandlers::lseek_handler(const char *const str) { +void ClientRequestManager::MemHandlers::lseek_handler(const char *const str) { int tid, fd; off64_t offset; sscanf(str, "%d %d %ld", &tid, &fd, &offset); handle_lseek(tid, fd, offset); } -void ClientRequestManager::ClientHandlers::seek_data_handler(const char *const str) { +void ClientRequestManager::MemHandlers::seek_data_handler(const char *const str) { int tid, fd; off64_t offset; sscanf(str, "%d %d %ld", &tid, &fd, &offset); handle_seek_data(tid, fd, offset); } -void ClientRequestManager::ClientHandlers::seek_end_handler(const char *const str) { +void ClientRequestManager::MemHandlers::seek_end_handler(const char *const str) { int tid, fd; sscanf(str, "%d %d", &tid, &fd); ClientUtilities::handle_seek_end(tid, fd); } -void ClientRequestManager::ClientHandlers::seek_hole_handler(const char *const str) { +void ClientRequestManager::MemHandlers::seek_hole_handler(const char *const str) { int tid, fd; off64_t offset; sscanf(str, "%d %d %ld", &tid, &fd, &offset); diff --git a/capio/server/src/client_handlers/stat.cpp b/capio/server/src/client_handlers/stat.cpp index 1f615922d..8fb4ba17d 100644 --- a/capio/server/src/client_handlers/stat.cpp +++ b/capio/server/src/client_handlers/stat.cpp @@ -85,14 +85,14 @@ void ClientRequestManager::ClientUtilities::reply_stat(int tid, const std::files } } -void ClientRequestManager::ClientHandlers::fstat_handler(const char *const str) { +void ClientRequestManager::MemHandlers::fstat_handler(const char *const str) { int tid, fd; sscanf(str, "%d %d", &tid, &fd); ClientUtilities::reply_stat(tid, storage_manager->getPath(tid, fd)); } -void ClientRequestManager::ClientHandlers::stat_handler(const char *const str) { +void ClientRequestManager::MemHandlers::stat_handler(const char *const str) { char path[2048]; int tid; sscanf(str, "%d %s", &tid, path); diff --git a/capio/server/src/client_handlers/unlink.cpp b/capio/server/src/client_handlers/unlink.cpp index 109f06050..f02c7e83d 100644 --- a/capio/server/src/client_handlers/unlink.cpp +++ b/capio/server/src/client_handlers/unlink.cpp @@ -9,7 +9,7 @@ extern StorageManager *storage_manager; extern ClientManager *client_manager; -void ClientRequestManager::ClientHandlers::unlink_handler(const char *const str) { +void ClientRequestManager::MemHandlers::unlink_handler(const char *const str) { char path[PATH_MAX]; int tid; sscanf(str, "%d %s", &tid, path); diff --git a/capio/server/src/client_handlers/write.cpp b/capio/server/src/client_handlers/write.cpp index 81009b4b8..0d24e7ea9 100644 --- a/capio/server/src/client_handlers/write.cpp +++ b/capio/server/src/client_handlers/write.cpp @@ -9,7 +9,7 @@ extern StorageManager *storage_manager; extern ClientManager *client_manager; -void ClientRequestManager::ClientHandlers::write_handler(const char *const str) { +void ClientRequestManager::MemHandlers::write_handler(const char *const str) { std::string request; int tid, fd; off64_t count; diff --git a/capio/server/src/client_request.cpp b/capio/server/src/client_request.cpp index d31e4abf7..224e13547 100644 --- a/capio/server/src/client_request.cpp +++ b/capio/server/src/client_request.cpp @@ -11,30 +11,29 @@ constexpr std::array ClientRequestManager::build_request_handlers_table() { std::array _request_handlers{0}; - _request_handlers[CAPIO_REQUEST_ACCESS] = ClientHandlers::access_handler; - _request_handlers[CAPIO_REQUEST_CLONE] = ClientHandlers::clone_handler; - _request_handlers[CAPIO_REQUEST_CLOSE] = ClientHandlers::close_handler; - _request_handlers[CAPIO_REQUEST_CREATE] = ClientHandlers::create_handler; - _request_handlers[CAPIO_REQUEST_CREATE_EXCLUSIVE] = ClientHandlers::create_exclusive_handler; - _request_handlers[CAPIO_REQUEST_DUP] = ClientHandlers::dup_handler; - _request_handlers[CAPIO_REQUEST_EXIT_GROUP] = ClientHandlers::exit_group_handler; - _request_handlers[CAPIO_REQUEST_FSTAT] = ClientHandlers::fstat_handler; - _request_handlers[CAPIO_REQUEST_GETDENTS] = ClientHandlers::getdents_handler; - _request_handlers[CAPIO_REQUEST_GETDENTS64] = ClientHandlers::getdents_handler; - _request_handlers[CAPIO_REQUEST_HANDSHAKE_NAMED] = ClientHandlers::handshake_named_handler; - _request_handlers[CAPIO_REQUEST_HANDSHAKE_ANONYMOUS] = ClientHandlers::handshake_anonymous_handler; - _request_handlers[CAPIO_REQUEST_MKDIR] = ClientHandlers::mkdir_handler; - _request_handlers[CAPIO_REQUEST_OPEN] = ClientHandlers::open_handler; - _request_handlers[CAPIO_REQUEST_READ] = ClientHandlers::read_handler; - _request_handlers[CAPIO_REQUEST_RENAME] = ClientHandlers::rename_handler; - _request_handlers[CAPIO_REQUEST_RMDIR] = ClientHandlers::rmdir_handler; - _request_handlers[CAPIO_REQUEST_SEEK] = ClientHandlers::lseek_handler; - _request_handlers[CAPIO_REQUEST_SEEK_DATA] = ClientHandlers::seek_data_handler; - _request_handlers[CAPIO_REQUEST_SEEK_END] = ClientHandlers::seek_end_handler; - _request_handlers[CAPIO_REQUEST_SEEK_HOLE] = ClientHandlers::seek_hole_handler; - _request_handlers[CAPIO_REQUEST_STAT] = ClientHandlers::stat_handler; - _request_handlers[CAPIO_REQUEST_UNLINK] = ClientHandlers::unlink_handler; - _request_handlers[CAPIO_REQUEST_WRITE] = ClientHandlers::write_handler; + _request_handlers[CAPIO_REQUEST_ACCESS] = MemHandlers::access_handler; + _request_handlers[CAPIO_REQUEST_CLONE] = MemHandlers::clone_handler; + _request_handlers[CAPIO_REQUEST_CLOSE] = MemHandlers::close_handler; + _request_handlers[CAPIO_REQUEST_CREATE] = MemHandlers::create_handler; + _request_handlers[CAPIO_REQUEST_CREATE_EXCLUSIVE] = MemHandlers::create_exclusive_handler; + _request_handlers[CAPIO_REQUEST_DUP] = MemHandlers::dup_handler; + _request_handlers[CAPIO_REQUEST_EXIT_GROUP] = Handlers::exit_group_handler; + _request_handlers[CAPIO_REQUEST_FSTAT] = MemHandlers::fstat_handler; + _request_handlers[CAPIO_REQUEST_GETDENTS] = MemHandlers::getdents_handler; + _request_handlers[CAPIO_REQUEST_GETDENTS64] = MemHandlers::getdents_handler; + _request_handlers[CAPIO_REQUEST_HANDSHAKE_NAMED] = Handlers::handshake_named_handler; + _request_handlers[CAPIO_REQUEST_MKDIR] = MemHandlers::mkdir_handler; + _request_handlers[CAPIO_REQUEST_OPEN] = MemHandlers::open_handler; + _request_handlers[CAPIO_REQUEST_READ] = MemHandlers::read_handler; + _request_handlers[CAPIO_REQUEST_RENAME] = MemHandlers::rename_handler; + _request_handlers[CAPIO_REQUEST_RMDIR] = MemHandlers::rmdir_handler; + _request_handlers[CAPIO_REQUEST_SEEK] = MemHandlers::lseek_handler; + _request_handlers[CAPIO_REQUEST_SEEK_DATA] = MemHandlers::seek_data_handler; + _request_handlers[CAPIO_REQUEST_SEEK_END] = MemHandlers::seek_end_handler; + _request_handlers[CAPIO_REQUEST_SEEK_HOLE] = MemHandlers::seek_hole_handler; + _request_handlers[CAPIO_REQUEST_STAT] = MemHandlers::stat_handler; + _request_handlers[CAPIO_REQUEST_UNLINK] = MemHandlers::unlink_handler; + _request_handlers[CAPIO_REQUEST_WRITE] = MemHandlers::write_handler; return _request_handlers; }