Skip to content

Commit e1c59fe

Browse files
committed
update C++ core
Notable changes: * CXXCBC-31: allow to use schema-less connection strings (#394) * CXXCBC-318: always try TCP if UDP fails in DNS-SRV resolver (#390)
1 parent 61421f2 commit e1c59fe

File tree

3 files changed

+30
-7
lines changed

3 files changed

+30
-7
lines changed

ext/.idea/vcs.xml

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

ext/couchbase

ext/couchbase.cxx

Lines changed: 27 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1820,8 +1820,9 @@ cb_extract_option_bool(bool& field, VALUE options, const char* name)
18201820
}
18211821
}
18221822

1823+
template<typename Integer>
18231824
static void
1824-
cb_extract_option_number(std::size_t& field, VALUE options, const char* name)
1825+
cb_extract_option_number(Integer& field, VALUE options, const char* name)
18251826
{
18261827
if (!NIL_P(options) && TYPE(options) == T_HASH) {
18271828
VALUE val = rb_hash_aref(options, rb_id2sym(rb_intern(name)));
@@ -1830,10 +1831,10 @@ cb_extract_option_number(std::size_t& field, VALUE options, const char* name)
18301831
}
18311832
switch (TYPE(val)) {
18321833
case T_FIXNUM:
1833-
field = FIX2ULONG(val);
1834+
field = static_cast<Integer>(FIX2ULONG(val));
18341835
break;
18351836
case T_BIGNUM:
1836-
field = NUM2ULL(val);
1837+
field = static_cast<Integer>(NUM2ULL(val));
18371838
break;
18381839
default:
18391840
throw ruby_exception(rb_eArgError, rb_sprintf("%s must be a Integer, but given %+" PRIsVALUE, name, val));
@@ -1884,6 +1885,25 @@ cb_extract_option_string(std::string& target, VALUE options, const char* name);
18841885
static void
18851886
cb_extract_option_symbol(VALUE& val, VALUE options, const char* name);
18861887

1888+
static void
1889+
cb_extract_dns_config(couchbase::core::io::dns::dns_config& config, VALUE options)
1890+
{
1891+
if (!NIL_P(options) && TYPE(options) == T_HASH) {
1892+
return;
1893+
}
1894+
1895+
auto timeout{ couchbase::core::timeout_defaults::dns_srv_timeout };
1896+
cb_extract_option_milliseconds(timeout, options, "dns_srv_timeout");
1897+
1898+
std::string nameserver{ couchbase::core::io::dns::dns_config::default_nameserver };
1899+
cb_extract_option_string(nameserver, options, "dns_srv_nameserver");
1900+
1901+
std::uint16_t port{ couchbase::core::io::dns::dns_config::default_port };
1902+
cb_extract_option_number(port, options, "dns_srv_port");
1903+
1904+
config = couchbase::core::io::dns::dns_config(nameserver, port, timeout);
1905+
}
1906+
18871907
static VALUE
18881908
cb_Backend_open(VALUE self, VALUE connection_string, VALUE credentials, VALUE options)
18891909
{
@@ -1983,13 +2003,14 @@ cb_Backend_open(VALUE self, VALUE connection_string, VALUE credentials, VALUE op
19832003
cb_extract_option_milliseconds(origin.options().analytics_timeout, options, "analytics_timeout");
19842004
cb_extract_option_milliseconds(origin.options().search_timeout, options, "search_timeout");
19852005
cb_extract_option_milliseconds(origin.options().management_timeout, options, "management_timeout");
1986-
cb_extract_option_milliseconds(origin.options().dns_srv_timeout, options, "dns_srv_timeout");
19872006
cb_extract_option_milliseconds(origin.options().tcp_keep_alive_interval, options, "tcp_keep_alive_interval");
19882007
cb_extract_option_milliseconds(origin.options().config_poll_interval, options, "config_poll_interval");
19892008
cb_extract_option_milliseconds(origin.options().config_poll_floor, options, "config_poll_floor");
19902009
cb_extract_option_milliseconds(origin.options().config_idle_redial_timeout, options, "config_idle_redial_timeout");
19912010
cb_extract_option_milliseconds(origin.options().idle_http_connection_timeout, options, "idle_http_connection_timeout");
19922011

2012+
cb_extract_dns_config(origin.options().dns_config, options);
2013+
19932014
cb_extract_option_number(origin.options().max_http_connections, options, "max_http_connections");
19942015

19952016
cb_extract_option_bool(origin.options().enable_tls, options, "enable_tls");
@@ -6819,12 +6840,12 @@ cb_Backend_dns_srv(VALUE self, VALUE hostname, VALUE service)
68196840
if (tls) {
68206841
service_name = "_couchbases";
68216842
}
6822-
auto barrier = std::make_shared<std::promise<couchbase::core::io::dns::dns_client::dns_srv_response>>();
6843+
auto barrier = std::make_shared<std::promise<couchbase::core::io::dns::dns_srv_response>>();
68236844
auto f = barrier->get_future();
68246845
client.query_srv(host_name,
68256846
service_name,
68266847
couchbase::core::io::dns::dns_config::system_config(),
6827-
[barrier](couchbase::core::io::dns::dns_client::dns_srv_response&& resp) { barrier->set_value(std::move(resp)); });
6848+
[barrier](couchbase::core::io::dns::dns_srv_response&& resp) { barrier->set_value(std::move(resp)); });
68286849
ctx.run();
68296850
auto resp = cb_wait_for_future(f);
68306851
if (resp.ec) {

0 commit comments

Comments
 (0)