galera::ReplicatorSMM::InitConfig::InitConfig(gu::Config& conf, const char* const node_address) { Replicator::register_params(conf); std::map<std::string, std::string>::const_iterator i; for (i = defaults.map_.begin(); i != defaults.map_.end(); ++i) { if (i->second.empty()) conf.add(i->first); else conf.add(i->first, i->second); } // what is would be a better protection? int const pv(gu::from_string<int>(conf.get(Param::proto_max))); if (pv > MAX_PROTO_VER) { log_warn << "Can't set '" << Param::proto_max << "' to " << pv << ": maximum supported value is " << MAX_PROTO_VER; conf.add(Param::proto_max, gu::to_string(MAX_PROTO_VER)); } conf.add(COMMON_BASE_HOST_KEY); conf.add(COMMON_BASE_PORT_KEY); if (node_address && strlen(node_address) > 0) { gu::URI na(node_address, false); try { std::string const host = na.get_host(); if (host == "0.0.0.0" || host == "0:0:0:0:0:0:0:0" || host == "::") { gu_throw_error(EINVAL) << "Bad value for 'node_address': '" << host << '\''; } conf.set(BASE_HOST_KEY, host); } catch (gu::NotSet& e) {} try { conf.set(BASE_PORT_KEY, na.get_port()); } catch (gu::NotSet& e) {} } /* register variables and defaults from other modules */ gcache::GCache::register_params(conf); gcs_register_params(reinterpret_cast<gu_config_t*>(&conf)); Certification::register_params(conf); ist::register_params(conf); }
gcache::GCache::Params::Params (gu::Config& cfg, const std::string& data_dir) throw (gu::Exception) : rb_name (name_value (cfg, data_dir)), dir_name (cfg.get(GCACHE_PARAMS_DIR)), mem_size (size_value (cfg, GCACHE_PARAMS_MEM_SIZE, GCACHE_DEFAULT_MEM_SIZE)), rb_size (size_value (cfg, GCACHE_PARAMS_RB_SIZE, GCACHE_DEFAULT_RB_SIZE)), page_size (size_value (cfg, GCACHE_PARAMS_PAGE_SIZE, GCACHE_DEFAULT_PAGE_SIZE)), keep_pages_size (size_value (cfg, GCACHE_PARAMS_KEEP_PAGES_SIZE, GCACHE_DEFAULT_KEEP_PAGES_SIZE)) {}
static std::string IST_determine_recv_addr (gu::Config& conf) { std::string recv_addr; try { recv_addr = conf.get(galera::ist::Receiver::RECV_ADDR); } catch (gu::NotFound&) { try { recv_addr = conf.get(galera::BASE_HOST_KEY); } catch (gu::NotSet&) { gu_throw_error(EINVAL) << "Could not determine IST receinve address: '" << galera::ist::Receiver::RECV_ADDR << "' not set."; } } /* check if explicit scheme is present */ if (recv_addr.find("://") == std::string::npos) { bool ssl(false); try { std::string ssl_key = conf.get(CONF_SSL_KEY); if (ssl_key.length() != 0) ssl = true; } catch (gu::NotFound&) {} if (ssl) recv_addr.insert(0, "ssl://"); else recv_addr.insert(0, "tcp://"); } gu::URI ra_uri(recv_addr); if (!conf.has(galera::BASE_HOST_KEY)) conf.set(galera::BASE_HOST_KEY, ra_uri.get_host()); try /* check for explicit port, TODO: make it possible to use any free port (explicit 0?) */ { ra_uri.get_port(); } catch (gu::NotSet&) /* use gmcast listen port + 1 */ { int port(0); try { port = gu::from_string<uint16_t>( // gu::URI(conf.get("gmcast.listen_addr")).get_port() conf.get(galera::BASE_PORT_KEY) ); } catch (...) { port = gu::from_string<uint16_t>(galera::BASE_PORT_DEFAULT); } port += 1; recv_addr += ":" + gu::to_string(port); } return recv_addr; }