From 5cf37418bdc6ff09c0c1ae3ac8ac4b0867de0de4 Mon Sep 17 00:00:00 2001 From: Eric Yang Date: Mon, 4 Jun 2018 19:01:17 -0400 Subject: [PATCH] YARN-8365. Set DNS query type according to client request. Contributed by Shane Kumpf --- .../apache/hadoop/registry/server/dns/RegistryDNS.java | 9 +++++---- .../hadoop/registry/server/dns/TestRegistryDNS.java | 9 ++------- 2 files changed, 7 insertions(+), 11 deletions(-) diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-registry/src/main/java/org/apache/hadoop/registry/server/dns/RegistryDNS.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-registry/src/main/java/org/apache/hadoop/registry/server/dns/RegistryDNS.java index c322023682e..5e994fb776e 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-registry/src/main/java/org/apache/hadoop/registry/server/dns/RegistryDNS.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-registry/src/main/java/org/apache/hadoop/registry/server/dns/RegistryDNS.java @@ -1106,7 +1106,7 @@ byte[] generateReply(Message query, Socket s) LOG.debug("calling addAnswer"); byte rcode = addAnswer(response, name, type, dclass, 0, flags); if (rcode != Rcode.NOERROR) { - rcode = remoteLookup(response, name, 0); + rcode = remoteLookup(response, name, type, 0); response.getHeader().setRcode(rcode); } addAdditional(response, flags); @@ -1124,9 +1124,10 @@ byte[] generateReply(Message query, Socket s) /** * Lookup record from upstream DNS servers. */ - private byte remoteLookup(Message response, Name name, int iterations) { + private byte remoteLookup(Message response, Name name, int type, + int iterations) { // Forward lookup to primary DNS servers - Record[] answers = getRecords(name, Type.ANY); + Record[] answers = getRecords(name, type); try { for (Record r : answers) { if (r.getType() == Type.SOA) { @@ -1137,7 +1138,7 @@ private byte remoteLookup(Message response, Name name, int iterations) { if (r.getType() == Type.CNAME) { Name cname = ((CNAMERecord) r).getAlias(); if (iterations < 6) { - remoteLookup(response, cname, iterations + 1); + remoteLookup(response, cname, Type.CNAME, iterations + 1); } } } diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-registry/src/test/java/org/apache/hadoop/registry/server/dns/TestRegistryDNS.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-registry/src/test/java/org/apache/hadoop/registry/server/dns/TestRegistryDNS.java index 01adc45f72d..6ba58dd99d5 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-registry/src/test/java/org/apache/hadoop/registry/server/dns/TestRegistryDNS.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-registry/src/test/java/org/apache/hadoop/registry/server/dns/TestRegistryDNS.java @@ -424,13 +424,8 @@ Record[] assertDNSQueryNotNull(String lookup, int type) assertEquals("Questions do not match", query.getQuestion(), response.getQuestion()); Record[] recs = response.getSectionArray(Section.ANSWER); - boolean found = false; - for (Record r : recs) { - if (r.getType()==Type.A) { - found = true; - } - } - assertTrue("No A records in answer", found); + assertEquals(1, recs.length); + assertEquals(recs[0].getType(), type); return recs; }