Loading CMakeLists.txt +4 −0 Original line number Diff line number Diff line Loading @@ -214,6 +214,10 @@ if(GKFS_ENABLE_EC) find_package(Jerasure REQUIRED) endif() if(GKFS_ENABLE_READ_ERRORS) add_compile_definitions(GKFS_ENABLE_READ_ERRORS) endif() ### Other stuff that can be found out using find_package: # determine the thread library of the system Loading src/client/gkfs_functions.cpp +9 −2 Original line number Diff line number Diff line Loading @@ -941,13 +941,13 @@ gkfs_ecc_write(std::shared_ptr<gkfs::filemap::OpenFile> file, size_t count, // We have all the data to process a EC auto matrix = reed_sol_vandermonde_coding_matrix( int* matrix = reed_sol_vandermonde_coding_matrix( data_servers, CTX->get_replicas(), 8); jerasure_matrix_encode(data_servers, CTX->get_replicas(), 8, matrix, data, coding, gkfs::config::rpc::chunksize); LOG(DEBUG, "EC computation finished"); free(matrix); // Write erasure std::string ecc_path = file->path() + "_ecc_" + to_string(i) + "_" + to_string(i + data_servers - 1); Loading @@ -963,6 +963,13 @@ gkfs_ecc_write(std::shared_ptr<gkfs::filemap::OpenFile> file, size_t count, } } } for(unsigned int i = 0; i < data_servers; ++i) { free(data[i]); } for(auto i = 0; i < CTX->get_replicas(); ++i) { free(coding[i]); } free(coding); free(data); } else { Loading src/client/rpc/forward_data.cpp +8 −2 Original line number Diff line number Diff line Loading @@ -649,18 +649,24 @@ gkfs_ecc_recover(const std::string& path, void* buffer_recover, int res = 0; // We have all the data to recover the buffer auto matrix = reed_sol_vandermonde_coding_matrix(data_servers, int* matrix = reed_sol_vandermonde_coding_matrix(data_servers, CTX->get_replicas(), 8); res = jerasure_matrix_decode(data_servers, CTX->get_replicas(), 8, matrix, 0, erased.data(), data, coding, gkfs::config::rpc::chunksize); free(matrix); LOG(DEBUG, "EC recovered {}, with result {}", failed_server, res); memcpy(buffer_recover, data[failed_server], gkfs::config::rpc::chunksize); LOG(DEBUG, "EC computation finished"); for(unsigned int i = 0; i < data_servers; ++i) { free(data[i]); } for(auto i = 0; i < CTX->get_replicas(); ++i) { free(coding[i]); } free(data); free(coding); return true; Loading Loading
CMakeLists.txt +4 −0 Original line number Diff line number Diff line Loading @@ -214,6 +214,10 @@ if(GKFS_ENABLE_EC) find_package(Jerasure REQUIRED) endif() if(GKFS_ENABLE_READ_ERRORS) add_compile_definitions(GKFS_ENABLE_READ_ERRORS) endif() ### Other stuff that can be found out using find_package: # determine the thread library of the system Loading
src/client/gkfs_functions.cpp +9 −2 Original line number Diff line number Diff line Loading @@ -941,13 +941,13 @@ gkfs_ecc_write(std::shared_ptr<gkfs::filemap::OpenFile> file, size_t count, // We have all the data to process a EC auto matrix = reed_sol_vandermonde_coding_matrix( int* matrix = reed_sol_vandermonde_coding_matrix( data_servers, CTX->get_replicas(), 8); jerasure_matrix_encode(data_servers, CTX->get_replicas(), 8, matrix, data, coding, gkfs::config::rpc::chunksize); LOG(DEBUG, "EC computation finished"); free(matrix); // Write erasure std::string ecc_path = file->path() + "_ecc_" + to_string(i) + "_" + to_string(i + data_servers - 1); Loading @@ -963,6 +963,13 @@ gkfs_ecc_write(std::shared_ptr<gkfs::filemap::OpenFile> file, size_t count, } } } for(unsigned int i = 0; i < data_servers; ++i) { free(data[i]); } for(auto i = 0; i < CTX->get_replicas(); ++i) { free(coding[i]); } free(coding); free(data); } else { Loading
src/client/rpc/forward_data.cpp +8 −2 Original line number Diff line number Diff line Loading @@ -649,18 +649,24 @@ gkfs_ecc_recover(const std::string& path, void* buffer_recover, int res = 0; // We have all the data to recover the buffer auto matrix = reed_sol_vandermonde_coding_matrix(data_servers, int* matrix = reed_sol_vandermonde_coding_matrix(data_servers, CTX->get_replicas(), 8); res = jerasure_matrix_decode(data_servers, CTX->get_replicas(), 8, matrix, 0, erased.data(), data, coding, gkfs::config::rpc::chunksize); free(matrix); LOG(DEBUG, "EC recovered {}, with result {}", failed_server, res); memcpy(buffer_recover, data[failed_server], gkfs::config::rpc::chunksize); LOG(DEBUG, "EC computation finished"); for(unsigned int i = 0; i < data_servers; ++i) { free(data[i]); } for(auto i = 0; i < CTX->get_replicas(); ++i) { free(coding[i]); } free(data); free(coding); return true; Loading