public inbox for glibc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug network/13904] New: getaddrinfo does two identical queries, breaks dns round robin with two hosts
@ 2012-03-26 20:01 kjp at ci dot uchicago.edu
  2012-03-26 20:10 ` [Bug network/13904] " kjp at ci dot uchicago.edu
                   ` (6 more replies)
  0 siblings, 7 replies; 8+ messages in thread
From: kjp at ci dot uchicago.edu @ 2012-03-26 20:01 UTC (permalink / raw)
  To: glibc-bugs

http://sourceware.org/bugzilla/show_bug.cgi?id=13904

             Bug #: 13904
           Summary: getaddrinfo does two identical queries, breaks dns
                    round robin with two hosts
           Product: glibc
           Version: 2.11
            Status: NEW
          Severity: normal
          Priority: P2
         Component: network
        AssignedTo: unassigned@sourceware.org
        ReportedBy: kjp@ci.uchicago.edu
    Classification: Unclassified


The host 'gridftp.nautilus.nics.xsede.org' has two ipv4 ips.  when using ping,
each ping execution alternates hosts, and strace shows only one dns query is
sent.  

however, another program using getaddrinfo() does not get the same rotation. 
It appears that getaddrinfo inexplicably sends a redundant dns query (only
thing different is transaction id), thus causing an entire rotation through
both hosts each time.  The returned ip will always be fairly constant - it will
be the last ip that 'ping' got.   So, if a host has a power of 2 number of ips,
rotation is broken.. particularly badly if there are only two ips total.

note: nscd is not running, and it does not appear to fix the problem

test program:

int main(void)
{
    struct addrinfo *result;
    struct addrinfo *res;
    int error;

   /* nautilus has two hosts, we want to pick a random
     * one.  
     * Note: problem occurs with or without final trailing '.' */
    error = getaddrinfo("gridftp.nautilus.nics.xsede.org",
            NULL, NULL, &result);
    // sent two DNS queries, which breaks rotation of two ips
    // first ip result is always the same ip, even though nameserver is
reordering each response

strace of c program:

strace -s 100 -e sendto ./a.out 
sendto(3, "\24\0\0\0\26\0\1\3\276\301pO\0\0\0\0\0\0\0\0", 20, 0,
{sa_family=AF_NETLINK, pid=0, groups=00000000}, 12) = 20
sendto(3,
"\360\342\1\0\0\1\0\0\0\0\0\0\7gridftp\10nautilus\4nics\5xsede\3org\0\0\1\0\1",
49, MSG_NOSIGNAL, NULL, 0) = 49
sendto(3,
"\2654\1\0\0\1\0\0\0\0\0\0\7gridftp\10nautilus\4nics\5xsede\3org\0\0\1\0\1",
49, MSG_NOSIGNAL, NULL, 0) = 49

-- 
Configure bugmail: http://sourceware.org/bugzilla/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug.


^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2014-06-18  4:30 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-03-26 20:01 [Bug network/13904] New: getaddrinfo does two identical queries, breaks dns round robin with two hosts kjp at ci dot uchicago.edu
2012-03-26 20:10 ` [Bug network/13904] " kjp at ci dot uchicago.edu
2012-03-27 17:08 ` kjp at ci dot uchicago.edu
2012-06-29  6:17 ` jvb127 at gmail dot com
2012-06-29 15:10 ` kjp at ci dot uchicago.edu
2012-06-29 15:13 ` kjp at ci dot uchicago.edu
2012-06-30 15:09 ` jvb127 at gmail dot com
2014-06-18  4:30 ` fweimer at redhat dot com

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).