diff --git a/include/engine/datafacade/internal_datafacade.hpp b/include/engine/datafacade/internal_datafacade.hpp index e2465c42a..7fd524711 100644 --- a/include/engine/datafacade/internal_datafacade.hpp +++ b/include/engine/datafacade/internal_datafacade.hpp @@ -15,7 +15,6 @@ #include "extractor/query_node.hpp" #include "storage/io.hpp" #include "storage/storage_config.hpp" -#include "storage/io.hpp" #include "engine/geospatial_query.hpp" #include "util/graph_loader.hpp" #include "util/guidance/turn_bearing.hpp" @@ -278,16 +277,13 @@ class InternalDataFacade final : public BaseDataFacade if (number_of_compressed_geometries > 0) { geometry_stream.read((char *)&(m_geometry_node_list[0]), - number_of_compressed_geometries * - sizeof(NodeID)); + number_of_compressed_geometries * sizeof(NodeID)); geometry_stream.read((char *)&(m_geometry_fwd_weight_list[0]), - number_of_compressed_geometries * - sizeof(EdgeWeight)); + number_of_compressed_geometries * sizeof(EdgeWeight)); geometry_stream.read((char *)&(m_geometry_rev_weight_list[0]), - number_of_compressed_geometries * - sizeof(EdgeWeight)); + number_of_compressed_geometries * sizeof(EdgeWeight)); } } @@ -753,8 +749,8 @@ class InternalDataFacade final : public BaseDataFacade * refences to where to find the beginning of the bi- * directional edge in the m_geometry_node_list vector. * */ - const signed begin = m_geometry_indices.at(id); - const signed end = m_geometry_indices.at(id + 1); + const unsigned begin = m_geometry_indices.at(id); + const unsigned end = m_geometry_indices.at(id + 1); std::vector result_nodes; @@ -802,8 +798,8 @@ class InternalDataFacade final : public BaseDataFacade * reverse weights of bi-directional edges, edges 1 to * n-1 of that edge need to be read in reverse. */ - const signed begin = m_geometry_indices.at(id); - const signed end = m_geometry_indices.at(id + 1) - 1; + const unsigned begin = m_geometry_indices.at(id); + const unsigned end = m_geometry_indices.at(id + 1) - 1; std::vector result_weights; result_weights.resize(end - begin); @@ -845,10 +841,9 @@ class InternalDataFacade final : public BaseDataFacade } else { - std::copy( - m_datasource_list.begin() + begin, - m_datasource_list.begin() + end, - result_datasources.begin()); + std::copy(m_datasource_list.begin() + begin, + m_datasource_list.begin() + end, + result_datasources.begin()); } return result_datasources; @@ -884,10 +879,9 @@ class InternalDataFacade final : public BaseDataFacade } else { - std::copy( - m_datasource_list.rbegin() + (m_datasource_list.size() - end), - m_datasource_list.rbegin() + (m_datasource_list.size() - begin), - result_datasources.begin()); + std::copy(m_datasource_list.rbegin() + (m_datasource_list.size() - end), + m_datasource_list.rbegin() + (m_datasource_list.size() - begin), + result_datasources.begin()); } return result_datasources; diff --git a/include/engine/datafacade/shared_datafacade.hpp b/include/engine/datafacade/shared_datafacade.hpp index 4e469e0f6..ee6fdcd52 100644 --- a/include/engine/datafacade/shared_datafacade.hpp +++ b/include/engine/datafacade/shared_datafacade.hpp @@ -3,9 +3,9 @@ // implements all data storage when shared memory _IS_ used +#include "storage/shared_barriers.hpp" #include "storage/shared_datatype.hpp" #include "storage/shared_memory.hpp" -#include "storage/shared_barriers.hpp" #include "engine/datafacade/datafacade_base.hpp" #include "extractor/compressed_edge_container.hpp" @@ -27,12 +27,12 @@ #include "util/typedefs.hpp" #include -#include #include #include +#include -#include #include +#include #include #include #include @@ -40,7 +40,6 @@ #include #include - namespace osrm { namespace engine @@ -329,25 +328,22 @@ class SharedDataFacade final : public BaseDataFacade data_layout->num_entries[storage::SharedDataLayout::GEOMETRIES_INDEX]); m_geometry_indices = std::move(geometry_begin_indices); - auto geometries_node_list_ptr = - data_layout->GetBlockPtr( - shared_memory, storage::SharedDataLayout::GEOMETRIES_NODE_LIST); + auto geometries_node_list_ptr = data_layout->GetBlockPtr( + shared_memory, storage::SharedDataLayout::GEOMETRIES_NODE_LIST); util::ShM::vector geometry_node_list( geometries_node_list_ptr, data_layout->num_entries[storage::SharedDataLayout::GEOMETRIES_NODE_LIST]); m_geometry_node_list = std::move(geometry_node_list); - auto geometries_fwd_weight_list_ptr = - data_layout->GetBlockPtr( - shared_memory, storage::SharedDataLayout::GEOMETRIES_FWD_WEIGHT_LIST); + auto geometries_fwd_weight_list_ptr = data_layout->GetBlockPtr( + shared_memory, storage::SharedDataLayout::GEOMETRIES_FWD_WEIGHT_LIST); util::ShM::vector geometry_fwd_weight_list( geometries_fwd_weight_list_ptr, data_layout->num_entries[storage::SharedDataLayout::GEOMETRIES_FWD_WEIGHT_LIST]); m_geometry_fwd_weight_list = std::move(geometry_fwd_weight_list); - auto geometries_rev_weight_list_ptr = - data_layout->GetBlockPtr( - shared_memory, storage::SharedDataLayout::GEOMETRIES_REV_WEIGHT_LIST); + auto geometries_rev_weight_list_ptr = data_layout->GetBlockPtr( + shared_memory, storage::SharedDataLayout::GEOMETRIES_REV_WEIGHT_LIST); util::ShM::vector geometry_rev_weight_list( geometries_rev_weight_list_ptr, data_layout->num_entries[storage::SharedDataLayout::GEOMETRIES_REV_WEIGHT_LIST]); @@ -417,21 +413,21 @@ class SharedDataFacade final : public BaseDataFacade } public: - - // this function handle the deallocation of the shared memory it we can prove it will not be used anymore + // this function handle the deallocation of the shared memory it we can prove it will not be + // used anymore virtual ~SharedDataFacade() { - boost::interprocess::scoped_lock - exclusive_lock(data_region == storage::DATA_1 ? shared_barriers->regions_1_mutex - : shared_barriers->regions_2_mutex, - boost::interprocess::defer_lock); + boost::interprocess::scoped_lock exclusive_lock( + data_region == storage::DATA_1 ? shared_barriers->regions_1_mutex + : shared_barriers->regions_2_mutex, + boost::interprocess::defer_lock); // if this returns false this is still in use if (exclusive_lock.try_lock()) { // Now check if this is still the newest dataset - const boost::interprocess::sharable_lock lock( - shared_barriers->current_regions_mutex); + const boost::interprocess::sharable_lock + lock(shared_barriers->current_regions_mutex); auto shared_regions = storage::makeSharedMemory(storage::CURRENT_REGIONS); const auto current_timestamp = @@ -439,7 +435,8 @@ class SharedDataFacade final : public BaseDataFacade if (current_timestamp->timestamp == shared_timestamp) { - util::SimpleLogger().Write(logDEBUG) << "Retaining data with shared timestamp " << shared_timestamp; + util::SimpleLogger().Write(logDEBUG) << "Retaining data with shared timestamp " + << shared_timestamp; } else { @@ -450,7 +447,7 @@ class SharedDataFacade final : public BaseDataFacade } SharedDataFacade(const std::shared_ptr &shared_barriers_, - storage::SharedDataType layout_region_, + storage::SharedDataType layout_region_, storage::SharedDataType data_region_, unsigned shared_timestamp_) : shared_barriers(shared_barriers_), layout_region(layout_region_), @@ -577,8 +574,8 @@ class SharedDataFacade final : public BaseDataFacade * refences to where to find the beginning of the bi- * directional edge in the m_geometry_node_list vector. * */ - const signed begin = m_geometry_indices.at(id); - const signed end = m_geometry_indices.at(id + 1); + const unsigned begin = m_geometry_indices.at(id); + const unsigned end = m_geometry_indices.at(id + 1); std::vector result_nodes; @@ -626,8 +623,8 @@ class SharedDataFacade final : public BaseDataFacade * reverse weights of bi-directional edges, edges 1 to * n-1 of that edge need to be read in reverse. */ - const signed begin = m_geometry_indices.at(id); - const signed end = m_geometry_indices.at(id + 1) - 1; + const unsigned begin = m_geometry_indices.at(id); + const unsigned end = m_geometry_indices.at(id + 1) - 1; std::vector result_weights; result_weights.resize(end - begin); @@ -636,10 +633,6 @@ class SharedDataFacade final : public BaseDataFacade m_geometry_rev_weight_list.rbegin() + (m_geometry_rev_weight_list.size() - begin), result_weights.begin()); - std::cout << "Should be: " << end - begin << std::endl; - std::cout << "Result weights length: " << result_weights.size() << std::endl; - std::cout << "Beginning weights length: " << m_geometry_rev_weight_list.size() << std::endl; - return result_weights; } @@ -870,10 +863,9 @@ class SharedDataFacade final : public BaseDataFacade } else { - std::copy( - m_datasource_list.begin() + begin, - m_datasource_list.begin() + end, - result_datasources.begin()); + std::copy(m_datasource_list.begin() + begin, + m_datasource_list.begin() + end, + result_datasources.begin()); } return result_datasources; @@ -909,10 +901,9 @@ class SharedDataFacade final : public BaseDataFacade } else { - std::copy( - m_datasource_list.rbegin() + (m_datasource_list.size() - end), - m_datasource_list.rbegin() + (m_datasource_list.size() - begin), - result_datasources.begin()); + std::copy(m_datasource_list.rbegin() + (m_datasource_list.size() - end), + m_datasource_list.rbegin() + (m_datasource_list.size() - begin), + result_datasources.begin()); } return result_datasources; diff --git a/src/contractor/contractor.cpp b/src/contractor/contractor.cpp index 84b7a5fb0..ed4de2450 100644 --- a/src/contractor/contractor.cpp +++ b/src/contractor/contractor.cpp @@ -543,16 +543,13 @@ EdgeID Contractor::LoadEdgeExpandedGraph( if (number_of_compressed_geometries > 0) { geometry_stream.read((char *)&(m_geometry_node_list[0]), - number_of_compressed_geometries * - sizeof(NodeID)); + number_of_compressed_geometries * sizeof(NodeID)); geometry_stream.read((char *)&(m_geometry_fwd_weight_list[0]), - number_of_compressed_geometries * - sizeof(EdgeWeight)); + number_of_compressed_geometries * sizeof(EdgeWeight)); geometry_stream.read((char *)&(m_geometry_rev_weight_list[0]), - number_of_compressed_geometries * - sizeof(EdgeWeight)); + number_of_compressed_geometries * sizeof(EdgeWeight)); } }; @@ -611,10 +608,10 @@ EdgeID Contractor::LoadEdgeExpandedGraph( m_geometry_fwd_weight_list[forward_begin + leaf_object.fwd_segment_position]; u = &(internal_to_external_node_map - [m_geometry_node_list[forward_begin + - leaf_object.fwd_segment_position]]); + [m_geometry_node_list[forward_begin + leaf_object.fwd_segment_position]]); v = &(internal_to_external_node_map - [m_geometry_node_list[forward_begin + leaf_object.fwd_segment_position + 1]]); + [m_geometry_node_list[forward_begin + leaf_object.fwd_segment_position + + 1]]); const double segment_length = util::coordinate_calculation::greatCircleDistance( util::Coordinate{u->lon, u->lat}, util::Coordinate{v->lon, v->lat}); @@ -629,7 +626,8 @@ EdgeID Contractor::LoadEdgeExpandedGraph( current_fwd_weight, log_edge_updates_factor); - m_geometry_fwd_weight_list[forward_begin + 1 + leaf_object.fwd_segment_position] = + m_geometry_fwd_weight_list[forward_begin + 1 + + leaf_object.fwd_segment_position] = new_segment_weight; m_geometry_datasource[forward_begin + 1 + leaf_object.fwd_segment_position] = forward_speed_iter->speed_source.source; @@ -714,14 +712,11 @@ EdgeID Contractor::LoadEdgeExpandedGraph( geometry_stream.write(reinterpret_cast(&number_of_compressed_geometries), sizeof(unsigned)); geometry_stream.write(reinterpret_cast(&(m_geometry_node_list[0])), - number_of_compressed_geometries * - sizeof(NodeID)); + number_of_compressed_geometries * sizeof(NodeID)); geometry_stream.write(reinterpret_cast(&(m_geometry_fwd_weight_list[0])), - number_of_compressed_geometries * - sizeof(EdgeWeight)); + number_of_compressed_geometries * sizeof(EdgeWeight)); geometry_stream.write(reinterpret_cast(&(m_geometry_rev_weight_list[0])), - number_of_compressed_geometries * - sizeof(EdgeWeight)); + number_of_compressed_geometries * sizeof(EdgeWeight)); }; const auto save_datasource_indexes = [&] { diff --git a/src/extractor/compressed_edge_container.cpp b/src/extractor/compressed_edge_container.cpp index 155bf46f0..aa11da87d 100644 --- a/src/extractor/compressed_edge_container.cpp +++ b/src/extractor/compressed_edge_container.cpp @@ -81,7 +81,8 @@ void CompressedEdgeContainer::SerializeInternalVector(const std::string &path) c BOOST_ASSERT(std::numeric_limits::max() != compressed_geometry_indices); geometry_out_stream.write((char *)&compressed_geometry_indices, sizeof(unsigned)); - geometry_out_stream.write((char *)(m_compressed_geometry_index.data()), sizeof(unsigned) * m_compressed_geometry_index.size()); + geometry_out_stream.write((char *)(m_compressed_geometry_index.data()), + sizeof(unsigned) * m_compressed_geometry_index.size()); // sentinel element geometry_out_stream.write((char *)&(compressed_geometries), sizeof(unsigned)); @@ -90,13 +91,16 @@ void CompressedEdgeContainer::SerializeInternalVector(const std::string &path) c geometry_out_stream.write((char *)&(compressed_geometries), sizeof(unsigned)); // write compressed geometry node id's - geometry_out_stream.write((char *)(m_compressed_geometry_nodes.data()), sizeof(NodeID) * m_compressed_geometry_nodes.size()); + geometry_out_stream.write((char *)(m_compressed_geometry_nodes.data()), + sizeof(NodeID) * m_compressed_geometry_nodes.size()); // write compressed geometry forward weights - geometry_out_stream.write((char *)(m_compressed_geometry_fwd_weights.data()), sizeof(EdgeWeight) * m_compressed_geometry_fwd_weights.size()); + geometry_out_stream.write((char *)(m_compressed_geometry_fwd_weights.data()), + sizeof(EdgeWeight) * m_compressed_geometry_fwd_weights.size()); // write compressed geometry reverse weights - geometry_out_stream.write((char *)(m_compressed_geometry_rev_weights.data()), sizeof(EdgeWeight) * m_compressed_geometry_rev_weights.size()); + geometry_out_stream.write((char *)(m_compressed_geometry_rev_weights.data()), + sizeof(EdgeWeight) * m_compressed_geometry_rev_weights.size()); } // Adds info for a compressed edge to the container. edge_id_2 diff --git a/src/storage/storage.cpp b/src/storage/storage.cpp index 514f3975d..9d682deb1 100644 --- a/src/storage/storage.cpp +++ b/src/storage/storage.cpp @@ -329,12 +329,12 @@ Storage::ReturnCode Storage::Run(int max_wait) boost::iostreams::seek( geometry_input_stream, number_of_geometries_indices * sizeof(unsigned), BOOST_IOS::cur); geometry_input_stream.read((char *)&number_of_compressed_geometries, sizeof(unsigned)); - shared_layout_ptr->SetBlockSize( - SharedDataLayout::GEOMETRIES_NODE_LIST, number_of_compressed_geometries); - shared_layout_ptr->SetBlockSize( - SharedDataLayout::GEOMETRIES_FWD_WEIGHT_LIST, number_of_compressed_geometries); - shared_layout_ptr->SetBlockSize( - SharedDataLayout::GEOMETRIES_REV_WEIGHT_LIST, number_of_compressed_geometries); + shared_layout_ptr->SetBlockSize(SharedDataLayout::GEOMETRIES_NODE_LIST, + number_of_compressed_geometries); + shared_layout_ptr->SetBlockSize(SharedDataLayout::GEOMETRIES_FWD_WEIGHT_LIST, + number_of_compressed_geometries); + shared_layout_ptr->SetBlockSize(SharedDataLayout::GEOMETRIES_REV_WEIGHT_LIST, + number_of_compressed_geometries); // load datasource sizes. This file is optional, and it's non-fatal if it doesn't // exist. @@ -605,9 +605,8 @@ Storage::ReturnCode Storage::Run(int max_wait) (char *)geometries_index_ptr, shared_layout_ptr->GetBlockSize(SharedDataLayout::GEOMETRIES_INDEX)); } - NodeID *geometries_node_id_list_ptr = - shared_layout_ptr->GetBlockPtr( - shared_memory_ptr, SharedDataLayout::GEOMETRIES_NODE_LIST); + NodeID *geometries_node_id_list_ptr = shared_layout_ptr->GetBlockPtr( + shared_memory_ptr, SharedDataLayout::GEOMETRIES_NODE_LIST); geometry_input_stream.read((char *)&temporary_value, sizeof(unsigned)); BOOST_ASSERT(temporary_value == @@ -619,9 +618,8 @@ Storage::ReturnCode Storage::Run(int max_wait) (char *)geometries_node_id_list_ptr, shared_layout_ptr->GetBlockSize(SharedDataLayout::GEOMETRIES_NODE_LIST)); } - EdgeWeight *geometries_fwd_weight_list_ptr = - shared_layout_ptr->GetBlockPtr( - shared_memory_ptr, SharedDataLayout::GEOMETRIES_FWD_WEIGHT_LIST); + EdgeWeight *geometries_fwd_weight_list_ptr = shared_layout_ptr->GetBlockPtr( + shared_memory_ptr, SharedDataLayout::GEOMETRIES_FWD_WEIGHT_LIST); BOOST_ASSERT(temporary_value == shared_layout_ptr->num_entries[SharedDataLayout::GEOMETRIES_FWD_WEIGHT_LIST]); @@ -632,9 +630,8 @@ Storage::ReturnCode Storage::Run(int max_wait) (char *)geometries_fwd_weight_list_ptr, shared_layout_ptr->GetBlockSize(SharedDataLayout::GEOMETRIES_FWD_WEIGHT_LIST)); } - EdgeWeight *geometries_rev_weight_list_ptr = - shared_layout_ptr->GetBlockPtr( - shared_memory_ptr, SharedDataLayout::GEOMETRIES_REV_WEIGHT_LIST); + EdgeWeight *geometries_rev_weight_list_ptr = shared_layout_ptr->GetBlockPtr( + shared_memory_ptr, SharedDataLayout::GEOMETRIES_REV_WEIGHT_LIST); BOOST_ASSERT(temporary_value == shared_layout_ptr->num_entries[SharedDataLayout::GEOMETRIES_REV_WEIGHT_LIST]); @@ -816,6 +813,7 @@ Storage::ReturnCode Storage::Run(int max_wait) static_cast(data_type_memory->Ptr()); { + boost::interprocess::scoped_lock current_regions_exclusive_lock;