Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add a commande line option to osrm-routed for max locations supported in distance table query #1298

Closed
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
51 changes: 51 additions & 0 deletions Include/osrm/ServerConfig.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
/*

Copyright (c) 2015, Project OSRM, Dennis Luxen, others
All rights reserved.

Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:

Redistributions of source code must retain the above copyright notice, this list
of conditions and the following disclaimer.
Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or
other materials provided with the distribution.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

*/

#ifndef SERVER_CONFIG_H
#define SERVER_CONFIG_H

#include <osrm/ServerPaths.h>

struct ServerConfig
{
ServerConfig()
: max_locations_distance_table(100)
, use_shared_memory(false)
{}

ServerConfig(const ServerPaths &paths, const bool flag, const int max)
: server_paths(paths)
, max_locations_distance_table(max)
, use_shared_memory(flag)
{}

ServerPaths server_paths;
int max_locations_distance_table;
bool use_shared_memory;
};

#endif // SERVER_CONFIG_H
4 changes: 2 additions & 2 deletions Library/OSRM.h
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#ifndef OSRM_H
#define OSRM_H

#include <osrm/ServerPaths.h>
#include <osrm/ServerConfig.h>

#include <memory>

Expand All @@ -46,7 +46,7 @@ class OSRM
std::unique_ptr<OSRM_impl> OSRM_pimpl_;

public:
explicit OSRM(ServerPaths paths, const bool use_shared_memory = false);
explicit OSRM(ServerConfig serverConfig);
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we pass the object by const ref?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

By ref yes, by const no

~OSRM();
void RunQuery(RouteParameters &route_parameters, http::Reply &reply);
};
Expand Down
17 changes: 9 additions & 8 deletions Library/OSRM_impl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ namespace boost { namespace interprocess { class named_mutex; } }

#include <osrm/Reply.h>
#include <osrm/RouteParameters.h>
#include <osrm/ServerPaths.h>
#include <osrm/ServerConfig.h>

#include "../plugins/distance_table.hpp"
#include "../plugins/hello_world.hpp"
Expand All @@ -57,22 +57,23 @@ namespace boost { namespace interprocess { class named_mutex; } }
#include <utility>
#include <vector>

OSRM_impl::OSRM_impl(ServerPaths server_paths, const bool use_shared_memory)
OSRM_impl::OSRM_impl(ServerConfig &serverConfig)
{
if (use_shared_memory)
if (serverConfig.use_shared_memory)
{
barrier = osrm::make_unique<SharedBarriers>();
query_data_facade = new SharedDataFacade<QueryEdge::EdgeData>();
}
else
{
// populate base path
populate_base_path(server_paths);
query_data_facade = new InternalDataFacade<QueryEdge::EdgeData>(server_paths);
populate_base_path(serverConfig.server_paths);
query_data_facade = new InternalDataFacade<QueryEdge::EdgeData>(serverConfig.server_paths);
}

// The following plugins handle all requests.
RegisterPlugin(new DistanceTablePlugin<BaseDataFacade<QueryEdge::EdgeData>>(query_data_facade));
RegisterPlugin(new DistanceTablePlugin<BaseDataFacade<QueryEdge::EdgeData>>(query_data_facade,
serverConfig.max_locations_distance_table));
RegisterPlugin(new HelloWorldPlugin());
RegisterPlugin(new LocatePlugin<BaseDataFacade<QueryEdge::EdgeData>>(query_data_facade));
RegisterPlugin(new NearestPlugin<BaseDataFacade<QueryEdge::EdgeData>>(query_data_facade));
Expand Down Expand Up @@ -152,8 +153,8 @@ void OSRM_impl::RunQuery(RouteParameters &route_parameters, http::Reply &reply)

// proxy code for compilation firewall

OSRM::OSRM(ServerPaths paths, const bool use_shared_memory)
: OSRM_pimpl_(osrm::make_unique<OSRM_impl>(paths, use_shared_memory))
OSRM::OSRM(ServerConfig server_config)
: OSRM_pimpl_(osrm::make_unique<OSRM_impl>(server_config))
{
}

Expand Down
4 changes: 2 additions & 2 deletions Library/OSRM_impl.h
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ class BasePlugin;
namespace http { class Reply; }
struct RouteParameters;

#include <osrm/ServerPaths.h>
#include <osrm/ServerConfig.h>

#include "../data_structures/query_edge.hpp"

Expand All @@ -49,7 +49,7 @@ class OSRM_impl
using PluginMap = std::unordered_map<std::string, BasePlugin *>;

public:
OSRM_impl(ServerPaths paths, const bool use_shared_memory);
OSRM_impl(ServerConfig &serverConfig);
OSRM_impl(const OSRM_impl &) = delete;
virtual ~OSRM_impl();
void RunQuery(RouteParameters &route_parameters, http::Reply &reply);
Expand Down
13 changes: 11 additions & 2 deletions Util/ProgramOptions.h
Original file line number Diff line number Diff line change
Expand Up @@ -151,7 +151,8 @@ inline unsigned GenerateServerProgramOptions(const int argc,
int &ip_port,
int &requested_num_threads,
bool &use_shared_memory,
bool &trial)
bool &trial,
int &max_locations_distance_table)
{
// declare a group of options that will be allowed only on command line
boost::program_options::options_description generic_options("Options");
Expand Down Expand Up @@ -198,7 +199,10 @@ inline unsigned GenerateServerProgramOptions(const int argc,
"Number of threads to use")(
"sharedmemory,s",
boost::program_options::value<bool>(&use_shared_memory)->implicit_value(true),
"Load data from shared memory");
"Load data from shared memory")(
"max_locations_distance_table",
boost::program_options::value<int>(&max_locations_distance_table)->default_value(100),
"Max locations supported in distance table query");

// hidden options, will be allowed both on command line and in config
// file, but will not be shown to the user
Expand Down Expand Up @@ -272,6 +276,11 @@ inline unsigned GenerateServerProgramOptions(const int argc,
{
return INIT_OK_START_ENGINE;
}
if (1 > max_locations_distance_table)
{
throw osrm::exception("Max location for distance table must be a positive number");
}

SimpleLogger().Write() << visible_options;
return INIT_OK_DO_NOT_START_ENGINE;
}
Expand Down
9 changes: 6 additions & 3 deletions features/options/routed/help.feature
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,8 @@ Feature: osrm-routed command line options: help
And stdout should contain "--port"
And stdout should contain "--threads"
And stdout should contain "--sharedmemory"
And stdout should contain 22 lines
And stdout should contain "--max_locations_distance_table"
And stdout should contain 25 lines
And it should exit with code 0

Scenario: osrm-routed - Help, short
Expand All @@ -49,7 +50,8 @@ Feature: osrm-routed command line options: help
And stdout should contain "--port"
And stdout should contain "--threads"
And stdout should contain "--sharedmemory"
And stdout should contain 22 lines
And stdout should contain "--max_locations_distance_table"
And stdout should contain 25 lines
And it should exit with code 0

Scenario: osrm-routed - Help, long
Expand All @@ -73,5 +75,6 @@ Feature: osrm-routed command line options: help
And stdout should contain "--port"
And stdout should contain "--threads"
And stdout should contain "--sharedmemory"
And stdout should contain 22 lines
And stdout should contain "--max_locations_distance_table"
And stdout should contain 25 lines
And it should exit with code 0
9 changes: 6 additions & 3 deletions plugins/distance_table.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -52,9 +52,11 @@ template <class DataFacadeT> class DistanceTablePlugin final : public BasePlugin
{
private:
std::unique_ptr<SearchEngine<DataFacadeT>> search_engine_ptr;
int max_locations_distance_table;

public:
explicit DistanceTablePlugin(DataFacadeT *facade) : descriptor_string("table"), facade(facade)
explicit DistanceTablePlugin(DataFacadeT *facade, const int max_locations_distance_table) :
max_locations_distance_table(max_locations_distance_table), descriptor_string("table"), facade(facade)
{
search_engine_ptr = osrm::make_unique<SearchEngine<DataFacadeT>>(facade);
}
Expand All @@ -72,8 +74,9 @@ template <class DataFacadeT> class DistanceTablePlugin final : public BasePlugin
}

const bool checksum_OK = (route_parameters.check_sum == facade->GetCheckSum());
unsigned max_locations =
std::min(100u, static_cast<unsigned>(route_parameters.coordinates.size()));
unsigned max_locations = std::min(static_cast<unsigned>(max_locations_distance_table),
static_cast<unsigned>(route_parameters.coordinates.size()));

PhantomNodeArray phantom_node_vector(max_locations);
for (const auto i : osrm::irange(0u, max_locations))
{
Expand Down
8 changes: 5 additions & 3 deletions routed.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ int main(int argc, const char *argv[])

bool use_shared_memory = false, trial_run = false;
std::string ip_address;
int ip_port, requested_thread_num;
int ip_port, requested_thread_num, max_locations_distance_table;

ServerPaths server_paths;

Expand All @@ -82,7 +82,8 @@ int main(int argc, const char *argv[])
ip_port,
requested_thread_num,
use_shared_memory,
trial_run);
trial_run,
max_locations_distance_table);
if (init_result == INIT_OK_DO_NOT_START_ENGINE)
{
return 0;
Expand Down Expand Up @@ -117,7 +118,8 @@ int main(int argc, const char *argv[])
pthread_sigmask(SIG_BLOCK, &new_mask, &old_mask);
#endif

OSRM osrm_lib(server_paths, use_shared_memory);
ServerConfig server_config(server_paths, use_shared_memory, max_locations_distance_table);
OSRM osrm_lib(server_config);
auto routing_server =
Server::CreateServer(ip_address, ip_port, requested_thread_num);

Expand Down
5 changes: 3 additions & 2 deletions tools/simpleclient.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ int main(int argc, const char *argv[])
try
{
std::string ip_address;
int ip_port, requested_thread_num;
int ip_port, requested_thread_num, max_locations_distance_table;
bool use_shared_memory = false, trial_run = false;
ServerPaths server_paths;

Expand All @@ -76,7 +76,8 @@ int main(int argc, const char *argv[])
ip_port,
requested_thread_num,
use_shared_memory,
trial_run);
trial_run,
max_locations_distance_table);

if (init_result == INIT_FAILED)
{
Expand Down