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