ruby-core@ruby-lang.org archive (unofficial mirror)
 help / color / mirror / Atom feed
From: aaron@serendipity.cx
To: ruby-core@ruby-lang.org
Subject: [ruby-core:63036] [ruby-trunk - Feature #9925] rsock_addrinfo uses DNS family AF_UNSPEC for lookup causing high IPv6 AAAA volume
Date: Tue, 10 Jun 2014 02:03:17 +0000	[thread overview]
Message-ID: <redmine.journal-47118.20140610020317.af03431d5fc82a71@ruby-lang.org> (raw)
In-Reply-To: redmine.issue-9925.20140610011546@ruby-lang.org

Issue #9925 has been updated by Aaron Stone.


Similar configuration is available in the "/etc/gai.conf" system (it does not apply in this use case, however). It is exactly the global nature of the setting that helps me the most. In many cases, Ruby is hardcoded to a particular lookup style and that is causing me significant system load for the nonexistent DNS queries.

There is also a compile-time Ruby flag for LOOKUP_ORDER_HACK_INET and LOOKUP_ORDER_HACK_INET6. Perhaps those could become an environment variable instead of compile-time flags?

Another approach could be a module variable in Socket that I could toggle globally or per-instance. Something like this:

Socket::DEFAULT_DNS_LOOKUP = :UNSPEC

I could either globally set Socket::DEFAULT_DNS_LOOKUP = :INET or on a per-class basis, Socket.dns_lookup = :INET.

----------------------------------------
Feature #9925: rsock_addrinfo uses DNS family AF_UNSPEC for lookup causing high IPv6 AAAA volume
https://bugs.ruby-lang.org/issues/9925#change-47118

* Author: Aaron Stone
* Status: Open
* Priority: Normal
* Assignee: 
* Category: 
* Target version: 
----------------------------------------
In ext/socket/raddrinfo.c, the function `rsock_addrinfo()` always uses `AF_UNSPEC` for DNS queries. This is causing me a very high volume of IPv6 DNS lookups. `rsock_addrinfo()` is used by TCPSocket (and all other Socket base classes, e.g. Socket and UDPSocket), and TCPSocket is used by Net::HTTP.

Remember that DNS does not do negative caching - if a hostname does not have a AAAA record, then DNS will _always_ try to look up that record again!

I propose that the following code should have some way to force IPv4 or IPv6 lookups:

http://rxr.whitequark.org/mri/source/ext/socket/raddrinfo.c

~~~c
378 struct addrinfo*
379 rsock_addrinfo(VALUE host, VALUE port, int socktype, int flags)
380 {
381     struct addrinfo hints;
382 
383     MEMZERO(&hints, struct addrinfo, 1);
384     hints.ai_family = AF_UNSPEC;
385     hints.ai_socktype = socktype;
386     hints.ai_flags = flags;
387     return rsock_getaddrinfo(host, port, &hints, 1);
388 }
~~~

For example, an environment variable named something like `RUBY_GAI` could be set to "INET" or "INET6" to switch the `hints.ai_family` away from `AF_UNSPEC`.



-- 
https://bugs.ruby-lang.org/

  parent reply	other threads:[~2014-06-10  1:46 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <redmine.issue-9925.20140610011546@ruby-lang.org>
2014-06-10  1:15 ` [ruby-core:63032] [ruby-trunk - Bug #9925] [Open] rsock_addrinfo uses DNS family AF_UNSPEC for lookup causing high IPv6 AAAA volume aaron
2014-06-10  1:30 ` [ruby-core:63033] [ruby-trunk - Bug #9925] " aaron
2014-06-10  1:55 ` [ruby-core:63034] [ruby-trunk - Feature " nobu
2014-06-10  2:03 ` aaron [this message]
2014-11-30  6:50 ` [ruby-core:66584] " aaron
2015-10-12 17:43 ` [ruby-core:71064] [Ruby trunk " craig65535
2019-08-17 16:07 ` [ruby-core:94401] [Ruby master Feature#9925] " aaron

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-list from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.ruby-lang.org/en/community/mailing-lists/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=redmine.journal-47118.20140610020317.af03431d5fc82a71@ruby-lang.org \
    --to=ruby-core@ruby-lang.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).