::dsn::error_code simple_kv_client_app::start(int argc, char** argv) { if (argc < 2) return ::dsn::ERR_INVALID_PARAMETERS; std::vector<rpc_address> meta_servers; replica_helper::load_meta_servers(meta_servers); _meta_server_group.assign_group(dsn_group_build("meta-servers")); for (auto& ms : meta_servers) { dsn_group_add(_meta_server_group.group_handle(), ms.c_addr()); } // argv[1]: e.g., dsn://mycluster/simple-kv.instance0 _service_addr = url_host_address(argv[1]); _simple_kv_client.reset(new simple_kv_client(_service_addr)); dsn::tasking::enqueue( LPC_SIMPLE_KV_TEST, this, std::bind(&simple_kv_client_app::run, this)); return ::dsn::ERR_OK; }
static ::dsn::rpc_address build_group() { ::dsn::rpc_address server_group; server_group.assign_group(dsn_group_build("server_group.test")); for (uint16_t p = TEST_PORT_BEGIN; p<=TEST_PORT_END; ++p) { dsn_group_add(server_group.group_handle(), ::dsn::rpc_address("localhost", p).c_addr()); } dsn_group_set_leader(server_group.group_handle(), ::dsn::rpc_address("localhost", TEST_PORT_BEGIN).c_addr()); return server_group; }
replication_failure_detector::replication_failure_detector( replica_stub* stub, std::vector<::dsn::rpc_address>& meta_servers) { _meta_servers.assign_group(dsn_group_build("meta.servers")); _stub = stub; for (auto& s : meta_servers) { dsn_group_add(_meta_servers.group_handle(), s.c_addr()); } dsn_group_set_leader(_meta_servers.group_handle(), meta_servers[random32(0, (uint32_t)meta_servers.size() - 1)].c_addr()); }
uri_resolver::uri_resolver(const char * name, const char* factory, const char * arguments) : _name(name), _factory(factory) { _meta_server.assign_group(dsn_group_build(name)); std::vector<std::string> args; utils::split_args(arguments, args, ','); for (auto& arg : args) { // name:port auto pos1 = arg.find_first_of(':'); if (pos1 != std::string::npos) { ::dsn::rpc_address ep(arg.substr(0, pos1).c_str(), atoi(arg.substr(pos1 + 1).c_str())); dsn_group_add(_meta_server.group_handle(), ep.c_addr()); } } }