Port cell metrics to tar files
This commit is contained in:
		
							parent
							
								
									6a09d2aa9b
								
							
						
					
					
						commit
						fed77c4066
					
				@ -3,7 +3,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#include "customizer/serialization.hpp"
 | 
					#include "customizer/serialization.hpp"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "storage/io.hpp"
 | 
					#include "storage/tar.hpp"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "util/integer_range.hpp"
 | 
					#include "util/integer_range.hpp"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -22,15 +22,16 @@ inline void readCellMetrics(const boost::filesystem::path &path, std::vector<Cel
 | 
				
			|||||||
                      std::is_same<CellMetric, CellMetricT>::value,
 | 
					                      std::is_same<CellMetric, CellMetricT>::value,
 | 
				
			||||||
                  "");
 | 
					                  "");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const auto fingerprint = storage::io::FileReader::VerifyFingerprint;
 | 
					    const auto fingerprint = storage::tar::FileReader::VerifyFingerprint;
 | 
				
			||||||
    storage::io::FileReader reader{path, fingerprint};
 | 
					    storage::tar::FileReader reader{path, fingerprint};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    auto num_metrics = reader.ReadElementCount64();
 | 
					    auto num_metrics = reader.ReadElementCount64("/mld/metrics");
 | 
				
			||||||
    metrics.resize(num_metrics);
 | 
					    metrics.resize(num_metrics);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    auto id = 0;
 | 
				
			||||||
    for (auto &metric : metrics)
 | 
					    for (auto &metric : metrics)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        serialization::read(reader, metric);
 | 
					        serialization::read(reader, "/mld/metrics/" + std::to_string(id++), metric);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -43,13 +44,15 @@ inline void writeCellMetrics(const boost::filesystem::path &path,
 | 
				
			|||||||
                      std::is_same<CellMetric, CellMetricT>::value,
 | 
					                      std::is_same<CellMetric, CellMetricT>::value,
 | 
				
			||||||
                  "");
 | 
					                  "");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const auto fingerprint = storage::io::FileWriter::GenerateFingerprint;
 | 
					    const auto fingerprint = storage::tar::FileWriter::GenerateFingerprint;
 | 
				
			||||||
    storage::io::FileWriter writer{path, fingerprint};
 | 
					    storage::tar::FileWriter writer{path, fingerprint};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    writer.WriteElementCount64(metrics.size());
 | 
					    writer.WriteElementCount64("/mld/metrics", metrics.size());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    auto id = 0;
 | 
				
			||||||
    for (const auto &metric : metrics)
 | 
					    for (const auto &metric : metrics)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        serialization::write(writer, metric);
 | 
					        serialization::write(writer, "/mld/metrics/" + std::to_string(id++), metric);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -3,9 +3,9 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#include "partitioner/cell_storage.hpp"
 | 
					#include "partitioner/cell_storage.hpp"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "storage/io.hpp"
 | 
					 | 
				
			||||||
#include "storage/serialization.hpp"
 | 
					#include "storage/serialization.hpp"
 | 
				
			||||||
#include "storage/shared_memory_ownership.hpp"
 | 
					#include "storage/shared_memory_ownership.hpp"
 | 
				
			||||||
 | 
					#include "storage/tar.hpp"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace osrm
 | 
					namespace osrm
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
@ -15,17 +15,21 @@ namespace serialization
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
template <storage::Ownership Ownership>
 | 
					template <storage::Ownership Ownership>
 | 
				
			||||||
inline void read(storage::io::FileReader &reader, detail::CellMetricImpl<Ownership> &metric)
 | 
					inline void read(storage::tar::FileReader &reader,
 | 
				
			||||||
 | 
					                 const std::string &name,
 | 
				
			||||||
 | 
					                 detail::CellMetricImpl<Ownership> &metric)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    storage::serialization::read(reader, metric.weights);
 | 
					    storage::serialization::read(reader, name + "/weights", metric.weights);
 | 
				
			||||||
    storage::serialization::read(reader, metric.durations);
 | 
					    storage::serialization::read(reader, name + "/durations", metric.durations);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
template <storage::Ownership Ownership>
 | 
					template <storage::Ownership Ownership>
 | 
				
			||||||
inline void write(storage::io::FileWriter &writer, const detail::CellMetricImpl<Ownership> &metric)
 | 
					inline void write(storage::tar::FileWriter &writer,
 | 
				
			||||||
 | 
					                  const std::string &name,
 | 
				
			||||||
 | 
					                  const detail::CellMetricImpl<Ownership> &metric)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    storage::serialization::write(writer, metric.weights);
 | 
					    storage::serialization::write(writer, name + "/weights", metric.weights);
 | 
				
			||||||
    storage::serialization::write(writer, metric.durations);
 | 
					    storage::serialization::write(writer, name + "/durations", metric.durations);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -494,59 +494,6 @@ void Storage::PopulateLayout(DataLayout &layout)
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        if (boost::filesystem::exists(config.GetPath(".osrm.cell_metrics")))
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            io::FileReader reader(config.GetPath(".osrm.cell_metrics"),
 | 
					 | 
				
			||||||
                                  io::FileReader::VerifyFingerprint);
 | 
					 | 
				
			||||||
            auto num_metric = reader.ReadElementCount64();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            if (num_metric > NUM_METRICS)
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                throw util::exception("Only " + std::to_string(NUM_METRICS) +
 | 
					 | 
				
			||||||
                                      " metrics are supported at the same time.");
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            for (const auto index : util::irange<std::size_t>(0, num_metric))
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                const auto weights_count = reader.ReadVectorSize<EdgeWeight>();
 | 
					 | 
				
			||||||
                layout.SetBlock(
 | 
					 | 
				
			||||||
                    static_cast<DataLayout::BlockID>(DataLayout::MLD_CELL_WEIGHTS_0 + index),
 | 
					 | 
				
			||||||
                    make_block<EdgeWeight>(weights_count));
 | 
					 | 
				
			||||||
                const auto durations_count = reader.ReadVectorSize<EdgeDuration>();
 | 
					 | 
				
			||||||
                layout.SetBlock(
 | 
					 | 
				
			||||||
                    static_cast<DataLayout::BlockID>(DataLayout::MLD_CELL_DURATIONS_0 + index),
 | 
					 | 
				
			||||||
                    make_block<EdgeDuration>(durations_count));
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            for (const auto index : util::irange<std::size_t>(num_metric, NUM_METRICS))
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                layout.SetBlock(
 | 
					 | 
				
			||||||
                    static_cast<DataLayout::BlockID>(DataLayout::MLD_CELL_WEIGHTS_0 + index),
 | 
					 | 
				
			||||||
                    make_block<EdgeWeight>(0));
 | 
					 | 
				
			||||||
                layout.SetBlock(
 | 
					 | 
				
			||||||
                    static_cast<DataLayout::BlockID>(DataLayout::MLD_CELL_DURATIONS_0 + index),
 | 
					 | 
				
			||||||
                    make_block<EdgeDuration>(0));
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        else
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            layout.SetBlock(DataLayout::MLD_CELL_WEIGHTS_0, make_block<char>(0));
 | 
					 | 
				
			||||||
            layout.SetBlock(DataLayout::MLD_CELL_WEIGHTS_1, make_block<char>(0));
 | 
					 | 
				
			||||||
            layout.SetBlock(DataLayout::MLD_CELL_WEIGHTS_2, make_block<char>(0));
 | 
					 | 
				
			||||||
            layout.SetBlock(DataLayout::MLD_CELL_WEIGHTS_3, make_block<char>(0));
 | 
					 | 
				
			||||||
            layout.SetBlock(DataLayout::MLD_CELL_WEIGHTS_4, make_block<char>(0));
 | 
					 | 
				
			||||||
            layout.SetBlock(DataLayout::MLD_CELL_WEIGHTS_5, make_block<char>(0));
 | 
					 | 
				
			||||||
            layout.SetBlock(DataLayout::MLD_CELL_WEIGHTS_6, make_block<char>(0));
 | 
					 | 
				
			||||||
            layout.SetBlock(DataLayout::MLD_CELL_WEIGHTS_7, make_block<char>(0));
 | 
					 | 
				
			||||||
            layout.SetBlock(DataLayout::MLD_CELL_DURATIONS_0, make_block<char>(0));
 | 
					 | 
				
			||||||
            layout.SetBlock(DataLayout::MLD_CELL_DURATIONS_1, make_block<char>(0));
 | 
					 | 
				
			||||||
            layout.SetBlock(DataLayout::MLD_CELL_DURATIONS_2, make_block<char>(0));
 | 
					 | 
				
			||||||
            layout.SetBlock(DataLayout::MLD_CELL_DURATIONS_3, make_block<char>(0));
 | 
					 | 
				
			||||||
            layout.SetBlock(DataLayout::MLD_CELL_DURATIONS_4, make_block<char>(0));
 | 
					 | 
				
			||||||
            layout.SetBlock(DataLayout::MLD_CELL_DURATIONS_5, make_block<char>(0));
 | 
					 | 
				
			||||||
            layout.SetBlock(DataLayout::MLD_CELL_DURATIONS_6, make_block<char>(0));
 | 
					 | 
				
			||||||
            layout.SetBlock(DataLayout::MLD_CELL_DURATIONS_7, make_block<char>(0));
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        std::unordered_map<std::string, DataLayout::BlockID> name_to_block_id = {
 | 
					        std::unordered_map<std::string, DataLayout::BlockID> name_to_block_id = {
 | 
				
			||||||
            {"/mld/multilevelgraph/node_array", DataLayout::MLD_GRAPH_NODE_LIST},
 | 
					            {"/mld/multilevelgraph/node_array", DataLayout::MLD_GRAPH_NODE_LIST},
 | 
				
			||||||
            {"/mld/multilevelgraph/edge_array", DataLayout::MLD_GRAPH_EDGE_LIST},
 | 
					            {"/mld/multilevelgraph/edge_array", DataLayout::MLD_GRAPH_EDGE_LIST},
 | 
				
			||||||
@ -559,12 +506,29 @@ void Storage::PopulateLayout(DataLayout &layout)
 | 
				
			|||||||
            {"/mld/cellstorage/destination_boundary", DataLayout::MLD_CELL_DESTINATION_BOUNDARY},
 | 
					            {"/mld/cellstorage/destination_boundary", DataLayout::MLD_CELL_DESTINATION_BOUNDARY},
 | 
				
			||||||
            {"/mld/cellstorage/cells", DataLayout::MLD_CELLS},
 | 
					            {"/mld/cellstorage/cells", DataLayout::MLD_CELLS},
 | 
				
			||||||
            {"/mld/cellstorage/level_to_cell_offset", DataLayout::MLD_CELL_LEVEL_OFFSETS},
 | 
					            {"/mld/cellstorage/level_to_cell_offset", DataLayout::MLD_CELL_LEVEL_OFFSETS},
 | 
				
			||||||
 | 
					            {"/mld/metrics/0/weights", DataLayout::MLD_CELL_WEIGHTS_0},
 | 
				
			||||||
 | 
					            {"/mld/metrics/1/weights", DataLayout::MLD_CELL_WEIGHTS_1},
 | 
				
			||||||
 | 
					            {"/mld/metrics/2/weights", DataLayout::MLD_CELL_WEIGHTS_2},
 | 
				
			||||||
 | 
					            {"/mld/metrics/3/weights", DataLayout::MLD_CELL_WEIGHTS_3},
 | 
				
			||||||
 | 
					            {"/mld/metrics/4/weights", DataLayout::MLD_CELL_WEIGHTS_4},
 | 
				
			||||||
 | 
					            {"/mld/metrics/5/weights", DataLayout::MLD_CELL_WEIGHTS_5},
 | 
				
			||||||
 | 
					            {"/mld/metrics/6/weights", DataLayout::MLD_CELL_WEIGHTS_6},
 | 
				
			||||||
 | 
					            {"/mld/metrics/7/weights", DataLayout::MLD_CELL_WEIGHTS_7},
 | 
				
			||||||
 | 
					            {"/mld/metrics/0/durations", DataLayout::MLD_CELL_DURATIONS_0},
 | 
				
			||||||
 | 
					            {"/mld/metrics/1/durations", DataLayout::MLD_CELL_DURATIONS_1},
 | 
				
			||||||
 | 
					            {"/mld/metrics/2/durations", DataLayout::MLD_CELL_DURATIONS_2},
 | 
				
			||||||
 | 
					            {"/mld/metrics/3/durations", DataLayout::MLD_CELL_DURATIONS_3},
 | 
				
			||||||
 | 
					            {"/mld/metrics/4/durations", DataLayout::MLD_CELL_DURATIONS_4},
 | 
				
			||||||
 | 
					            {"/mld/metrics/5/durations", DataLayout::MLD_CELL_DURATIONS_5},
 | 
				
			||||||
 | 
					            {"/mld/metrics/6/durations", DataLayout::MLD_CELL_DURATIONS_6},
 | 
				
			||||||
 | 
					            {"/mld/metrics/7/durations", DataLayout::MLD_CELL_DURATIONS_7},
 | 
				
			||||||
        };
 | 
					        };
 | 
				
			||||||
        std::vector<NamedBlock> blocks;
 | 
					        std::vector<NamedBlock> blocks;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        std::vector<boost::filesystem::path> optional_tar_files = {config.GetPath(".osrm.mldgr"),
 | 
					        std::vector<boost::filesystem::path> optional_tar_files = {config.GetPath(".osrm.mldgr"),
 | 
				
			||||||
                                                                   config.GetPath(".osrm.cells"),
 | 
					                                                                   config.GetPath(".osrm.cells"),
 | 
				
			||||||
                                                                   config.GetPath(".osrm.partition")};
 | 
					                                                                   config.GetPath(".osrm.partition"),
 | 
				
			||||||
 | 
					                                                                   config.GetPath(".osrm.cell_metrics")};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        for (const auto &path : optional_tar_files)
 | 
					        for (const auto &path : optional_tar_files)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user