Comments (14)
@mattklein123 Any objections to changing the DnsResolver::resolve() return type to ActiveDnsQuery* from ActiveDnsQuery&? If a DNS query is resolved immediately during the call to ares_gethostbyname(), and hence the callback has already been invoked, we don't have any cancellation to return to the caller.
Also, I'm thinking in the initial implementation we can keep it relatively simple and use a single ares_channel per query. This comes at some tail latency cost, as you can't share DNS server TCP connections or have the ability to persist them, but it makes it somewhat easier to marry the select-oriented event model in c-ares with libevent.
from envoy.
Yeah, and the API interface for getaddrinfo_a() is also terrible.
In my mind this is related to #125. AFAIK evdns is not considered production grade and it doesn't have SRV support. I think it would be better to start depending on a resolver library such as https://c-ares.haxx.se/ (though I haven't done that much research) and then we can get rid of getaddrinfo_a() and get SRV resolver support at the same time.
from envoy.
C-ares might be indeed a better choice, I just didn't want to suggest yet another dependency.
from envoy.
I've had multiple people ask for SRV support at this point, so I think we will do this relatively soon (potentially via non-Lyft contribution).
from envoy.
getaddrinfo_a() is linux only api, it's terrible when I like to port envoy to FreeBSD.
from envoy.
@mattklein123 you mentioned that this might be contributed from outside of Lyft. Do you know status of this effort? Is anyone actively working on this?
from envoy.
@PiotrSikora no one is currently working on this. If you want to take this, that would be great. It's all yours. Let me know.
from envoy.
@mattklein123 please consider this being worked on (not by me, but someone else at Google).
from envoy.
OK great, thanks. LMK if there are any questions/issues. The interface that needs to be implemented is pretty straightforward.
from envoy.
@mattklein123 I'll be working on this as a Google contributor, will reach out if any questions arise.
from envoy.
@htuch re: return value sgtm
re: ares implementation, tbh I don't know anything about the c_ares API, I did enough research to determine that seemed like the library to use but that's about it, so what you are proposing sounds fine to me.
from envoy.
fixed thanks @htuch !
from envoy.
not done yet
from envoy.
Change deployed to canary at Lyft and looks good so far so closing this out.
from envoy.
Related Issues (20)
- Newer release available `bazel_skylib`: 1.6.1 (current: 1.5.0)
- Newer release available `com_github_gabime_spdlog`: v1.14.0 (current: v1.13.0) HOT 1
- Initial application logs are not respecting application_log_config HOT 1
- http health check unstable behavior HOT 1
- OAuth2 Filter - ID Token Cookie Too Large HOT 2
- Newer release available `com_github_grpc_grpc`: v1.63.0 (current: v1.59.4) HOT 1
- `io_uring` test fails with newer kernel (arm?) HOT 3
- rpc error: code = Unavailable desc = Starting HOT 1
- Linking failed when trying to compile the binary from the envoy 1.29.1 HOT 2
- Newer release available `rules_proto`: 6.0.0 (current: 4.0.0)
- Move datadog example (Docker) out of `/source` HOT 1
- Envoy endpoints not loading since Chrome release 124 HOT 18
- Referenced video in README.md is not available HOT 2
- no such package '@com_github_axboe_liburing//' building Envoy docker image HOT 9
- Support full header context with read-only on encode phase HOT 2
- cluster_header router & golang cluster_specifier plugin ignore headers added by envoy's http filters HOT 5
- Newer release available `com_github_gabime_spdlog`: v1.14.1 (current: v1.13.0)
- OpenTelemetry access logs: Missing span ID breaks trace-context correlation HOT 2
- [RFC] Move to month-based (semantic) versioning HOT 6
- IpVersionsClientTypeDeferredProcessing/RateLimitQuotaIntegrationTest.MultiRequestWithTokenBucketThrottling/IPv4_GoogleGrpc_WithDeferredProcessing is flakey HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from envoy.