Skip to content

Commit e40b13c

Browse files
authored
fix: DNS resolve error in some cases (#17699)
Signed-off-by: Xuanwo <[email protected]>
1 parent 1f06d8a commit e40b13c

File tree

5 files changed

+56
-40
lines changed

5 files changed

+56
-40
lines changed

Cargo.lock

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

Cargo.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -325,7 +325,7 @@ hashbrown_v0_14 = { package = "hashbrown", version = "0.14.0", default-features
325325
hashlink = "0.8"
326326
headers = "0.4.0"
327327
hex = "0.4.3"
328-
hickory-resolver = "0.24"
328+
hickory-resolver = "0.25"
329329
highway = "1.1"
330330
hive_metastore = "0.1.0"
331331
hostname = "0.3.1"
@@ -443,7 +443,7 @@ reqwest = { version = "0.12", default-features = false, features = [
443443
"native-tls-vendored",
444444
"native-tls-alpn",
445445
] }
446-
reqwest-hickory-resolver = "0.1"
446+
reqwest-hickory-resolver = "0.2"
447447
ringbuffer = "0.14.2"
448448
rmp-serde = "1.1.1"
449449
roaring = { version = "0.10.1", features = ["serde"] }

src/common/base/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ ctrlc = { workspace = true }
3131
enquote = { workspace = true }
3232
fastrace = { workspace = true }
3333
futures = { workspace = true }
34+
hickory-resolver = { workspace = true }
3435
libc = { workspace = true }
3536
log = { workspace = true }
3637
logcall = { workspace = true }

src/common/base/src/http_client.rs

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,29 @@ use std::sync::Arc;
1717
use std::sync::LazyLock;
1818
use std::time::Duration;
1919

20+
use hickory_resolver::config::LookupIpStrategy;
2021
use reqwest_hickory_resolver::HickoryResolver;
22+
use reqwest_hickory_resolver::ResolverOpts;
2123

2224
/// Global shared hickory resolver.
23-
static GLOBAL_HICKORY_RESOLVER: LazyLock<Arc<HickoryResolver>> =
24-
LazyLock::new(|| Arc::new(HickoryResolver::default()));
25+
static GLOBAL_HICKORY_RESOLVER: LazyLock<Arc<HickoryResolver>> = LazyLock::new(|| {
26+
let mut opts = ResolverOpts::default();
27+
// Only query for the ipv4 address.
28+
opts.ip_strategy = LookupIpStrategy::Ipv4Only;
29+
// Use larger cache size for better performance.
30+
opts.cache_size = 1024;
31+
// Positive TTL is set to 5 minutes.
32+
opts.positive_min_ttl = Some(Duration::from_secs(300));
33+
// Negative TTL is set to 1 minute.
34+
opts.negative_min_ttl = Some(Duration::from_secs(60));
35+
36+
Arc::new(
37+
HickoryResolver::default()
38+
// Always shuffle the DNS results for better performance.
39+
.with_shuffle(true)
40+
.with_options(opts),
41+
)
42+
});
2543

2644
/// Global shared http client.
2745
///

src/common/grpc/src/dns_resolver.rs

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ use databend_common_base::base::tokio::task::JoinHandle;
2828
use databend_common_base::runtime;
2929
use databend_common_exception::ErrorCode;
3030
use databend_common_exception::Result;
31-
use hickory_resolver::TokioAsyncResolver;
31+
use hickory_resolver::TokioResolver;
3232
use hyper::Uri;
3333
use hyper_util::client::legacy::connect::dns::Name;
3434
use hyper_util::client::legacy::connect::HttpConnector;
@@ -43,16 +43,18 @@ use tonic::transport::Endpoint;
4343
use crate::RpcClientTlsConfig;
4444

4545
pub struct DNSResolver {
46-
inner: TokioAsyncResolver,
46+
inner: TokioResolver,
4747
}
4848

4949
static INSTANCE: LazyLock<Result<Arc<DNSResolver>>> =
50-
LazyLock::new(|| match TokioAsyncResolver::tokio_from_system_conf() {
50+
LazyLock::new(|| match TokioResolver::builder_tokio() {
5151
Err(error) => Result::Err(ErrorCode::DnsParseError(format!(
5252
"DNS resolver create error: {}",
5353
error
5454
))),
55-
Ok(resolver) => Ok(Arc::new(DNSResolver { inner: resolver })),
55+
Ok(resolver) => Ok(Arc::new(DNSResolver {
56+
inner: resolver.build(),
57+
})),
5658
});
5759

5860
impl DNSResolver {

0 commit comments

Comments
 (0)