commit 37c1701e7df8609fc1246d2ab7740ab94ad7c8c7 Author: Eric Yang Date: Wed Jan 10 18:59:57 2018 -0500 YARN-7731. Add recursive lookup for cname records. (Contributed by Eric Yang) 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 358a963..d602174 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 @@ -1131,6 +1131,10 @@ private byte remoteLookup(Message response, Name name) { } else { response.addRecord(r, Section.ANSWER); } + if (r.getType() == Type.CNAME) { + Name cname = ((CNAMERecord) r).getAlias(); + remoteLookup(response, cname); + } } } catch (NullPointerException e) { return Rcode.NXDOMAIN; 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 7c78161..10d3567 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 @@ -607,6 +607,24 @@ public void testExampleDotCom() throws Exception { Record[] records = getRegistryDNS().getRecords(name, Type.SOA); assertNotNull("example.com exists:", records); } + + @Test + public void testExternalCNAMERecord() throws Exception { + setRegistryDNS(new RegistryDNS("TestRegistry")); + Configuration conf = new Configuration(); + conf.set(RegistryConstants.KEY_DNS_DOMAIN, "hwx.test"); + conf.set(RegistryConstants.KEY_DNS_ZONE_SUBNET, "172.17.0"); + conf.setTimeDuration(RegistryConstants.KEY_DNS_TTL, 30L, TimeUnit.SECONDS); + conf.set(RegistryConstants.KEY_DNS_ZONES_DIR, + getClass().getResource("/").getFile()); + getRegistryDNS().setDomainName(conf); + getRegistryDNS().initializeZones(conf); + + // start assessing whether correct records are available + Record[] recs = + assertDNSQuery("mail.yahoo.com.", Type.CNAME, 3); + } + public RegistryDNS getRegistryDNS() { return registryDNS; }