Allow the RPC server to be run on a different system (#2162)

* Allow RPC server to be run on a different system

* Formatting
This commit is contained in:
Wesley Shillingford 2019-07-29 17:08:23 +01:00 committed by GitHub
commit a5107f2abc
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 24 additions and 2 deletions

View file

@ -43,7 +43,9 @@ nano::error nano::rpc_config::serialize_json (nano::jsonconfig & json) const
json.put ("max_request_size", max_request_size);
nano::jsonconfig rpc_process_l;
rpc_process_l.put ("version", rpc_process.json_version ());
rpc_process_l.put ("io_threads", rpc_process.io_threads);
rpc_process_l.put ("ipc_address", rpc_process.ipc_address);
rpc_process_l.put ("ipc_port", rpc_process.ipc_port);
rpc_process_l.put ("num_ipc_connections", rpc_process.num_ipc_connections);
json.put_child ("process", rpc_process_l);
@ -64,7 +66,9 @@ nano::error nano::rpc_config::deserialize_json (bool & upgraded_a, nano::jsoncon
json.erase ("chain_request_limit");
nano::jsonconfig rpc_process_l;
rpc_process_l.put ("version", *version_l);
rpc_process_l.put ("io_threads", rpc_process.io_threads);
rpc_process_l.put ("ipc_address", rpc_process.ipc_address);
rpc_process_l.put ("ipc_port", rpc_process.ipc_port);
rpc_process_l.put ("num_ipc_connections", rpc_process.num_ipc_connections);
json.put_child ("process", rpc_process_l);
@ -86,8 +90,18 @@ nano::error nano::rpc_config::deserialize_json (bool & upgraded_a, nano::jsoncon
auto rpc_process_l (json.get_optional_child ("process"));
if (rpc_process_l)
{
auto version_l (rpc_process_l->get_optional<unsigned> ("version"));
if (!version_l)
{
version_l = 1;
rpc_process_l->put ("version", *version_l);
rpc_process_l->put ("ipc_address", rpc_process.ipc_address);
upgraded_a = true;
}
rpc_process_l->get_optional<unsigned> ("io_threads", rpc_process.io_threads);
rpc_process_l->get_optional<uint16_t> ("ipc_port", rpc_process.ipc_port);
rpc_process_l->get_optional<boost::asio::ip::address_v6> ("ipc_address", rpc_process.ipc_address);
rpc_process_l->get_optional<unsigned> ("num_ipc_connections", rpc_process.num_ipc_connections);
}
}

View file

@ -41,8 +41,13 @@ class rpc_process_config final
public:
nano::network_constants network_constants;
unsigned io_threads{ std::max<unsigned> (4, boost::thread::hardware_concurrency ()) };
boost::asio::ip::address_v6 ipc_address{ boost::asio::ip::address_v6::loopback () };
uint16_t ipc_port{ network_constants.default_ipc_port };
unsigned num_ipc_connections{ network_constants.is_live_network () ? 8u : network_constants.is_beta_network () ? 4u : 1u };
static unsigned json_version ()
{
return 1;
}
};
class rpc_config final

View file

@ -2,7 +2,7 @@
#include <nano/rpc/rpc_request_processor.hpp>
nano::rpc_request_processor::rpc_request_processor (boost::asio::io_context & io_ctx, nano::rpc_config & rpc_config) :
ipc_address (rpc_config.address.to_string ()),
ipc_address (rpc_config.rpc_process.ipc_address.to_string ()),
ipc_port (rpc_config.rpc_process.ipc_port),
thread ([this]() {
nano::thread_role::set (nano::thread_role::name::rpc_request_processor);
@ -113,7 +113,7 @@ void nano::rpc_request_processor::try_reconnect_and_execute_request (std::shared
}
else
{
json_error_response (rpc_request->response, "There is a problem connecting to the node. Make sure ipc->tcp is enabled in node config and ports match");
json_error_response (rpc_request->response, "There is a problem connecting to the node. Make sure ipc->tcp is enabled in the node config, ipc ports match and ipc_address is the ip where the node is located");
make_available (*connection);
}
});

View file

@ -6596,6 +6596,7 @@ TEST (rpc_config, serialization)
config1.enable_control = true;
config1.max_json_depth = 10;
config1.rpc_process.io_threads = 2;
config1.rpc_process.ipc_address = boost::asio::ip::address_v6::any ();
config1.rpc_process.ipc_port = 2000;
config1.rpc_process.num_ipc_connections = 99;
nano::jsonconfig tree;
@ -6606,6 +6607,7 @@ TEST (rpc_config, serialization)
ASSERT_NE (config2.enable_control, config1.enable_control);
ASSERT_NE (config2.max_json_depth, config1.max_json_depth);
ASSERT_NE (config2.rpc_process.io_threads, config1.rpc_process.io_threads);
ASSERT_NE (config2.rpc_process.ipc_address, config1.rpc_process.ipc_address);
ASSERT_NE (config2.rpc_process.ipc_port, config1.rpc_process.ipc_port);
ASSERT_NE (config2.rpc_process.num_ipc_connections, config1.rpc_process.num_ipc_connections);
bool upgraded{ false };
@ -6615,6 +6617,7 @@ TEST (rpc_config, serialization)
ASSERT_EQ (config2.enable_control, config1.enable_control);
ASSERT_EQ (config2.max_json_depth, config1.max_json_depth);
ASSERT_EQ (config2.rpc_process.io_threads, config1.rpc_process.io_threads);
ASSERT_EQ (config2.rpc_process.ipc_address, config1.rpc_process.ipc_address);
ASSERT_EQ (config2.rpc_process.ipc_port, config1.rpc_process.ipc_port);
ASSERT_EQ (config2.rpc_process.num_ipc_connections, config1.rpc_process.num_ipc_connections);
}