You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by bi...@apache.org on 2018/01/12 18:07:15 UTC
hadoop git commit: YARN-7731. RegistryDNS should handle upstream DNS
returning CNAME. Contributed by Eric Yang
Repository: hadoop
Updated Branches:
refs/heads/trunk b278f7b29 -> 4fb1f45f2
YARN-7731. RegistryDNS should handle upstream DNS returning CNAME. Contributed by Eric Yang
Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo
Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/4fb1f45f
Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/4fb1f45f
Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/4fb1f45f
Branch: refs/heads/trunk
Commit: 4fb1f45f21916ca1b1fc6652a2ad562ac996b7b8
Parents: b278f7b
Author: Billie Rinaldi <bi...@apache.org>
Authored: Fri Jan 12 09:21:17 2018 -0800
Committer: Billie Rinaldi <bi...@apache.org>
Committed: Fri Jan 12 09:21:17 2018 -0800
----------------------------------------------------------------------
.../hadoop/registry/server/dns/RegistryDNS.java | 10 ++++-
.../registry/server/dns/TestRegistryDNS.java | 42 ++++++++++++++++++++
2 files changed, 50 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hadoop/blob/4fb1f45f/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-registry/src/main/java/org/apache/hadoop/registry/server/dns/RegistryDNS.java
----------------------------------------------------------------------
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..c31ce89 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
@@ -1103,7 +1103,7 @@ public class RegistryDNS extends AbstractService implements DNSOperations,
LOG.debug("calling addAnswer");
byte rcode = addAnswer(response, name, type, dclass, 0, flags);
if (rcode != Rcode.NOERROR) {
- rcode = remoteLookup(response, name);
+ rcode = remoteLookup(response, name, 0);
response.getHeader().setRcode(rcode);
}
addAdditional(response, flags);
@@ -1121,7 +1121,7 @@ public class RegistryDNS extends AbstractService implements DNSOperations,
/**
* Lookup record from upstream DNS servers.
*/
- private byte remoteLookup(Message response, Name name) {
+ private byte remoteLookup(Message response, Name name, int iterations) {
// Forward lookup to primary DNS servers
Record[] answers = getRecords(name, Type.ANY);
try {
@@ -1131,6 +1131,12 @@ public class RegistryDNS extends AbstractService implements DNSOperations,
} else {
response.addRecord(r, Section.ANSWER);
}
+ if (r.getType() == Type.CNAME) {
+ Name cname = ((CNAMERecord) r).getAlias();
+ if (iterations < 6) {
+ remoteLookup(response, cname, iterations + 1);
+ }
+ }
}
} catch (NullPointerException e) {
return Rcode.NXDOMAIN;
http://git-wip-us.apache.org/repos/asf/hadoop/blob/4fb1f45f/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-registry/src/test/java/org/apache/hadoop/registry/server/dns/TestRegistryDNS.java
----------------------------------------------------------------------
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..9c369d0 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
@@ -395,6 +395,30 @@ public class TestRegistryDNS extends Assert {
return recs;
}
+ Record[] assertDNSQueryNotNull(String lookup, int type)
+ throws IOException {
+ Name name = Name.fromString(lookup);
+ Record question = Record.newRecord(name, type, DClass.IN);
+ Message query = Message.newQuery(question);
+ OPTRecord optRecord = new OPTRecord(4096, 0, 0, Flags.DO, null);
+ query.addRecord(optRecord, Section.ADDITIONAL);
+ byte[] responseBytes = getRegistryDNS().generateReply(query, null);
+ Message response = new Message(responseBytes);
+ assertEquals("not successful", Rcode.NOERROR, response.getRcode());
+ assertNotNull("Null response", response);
+ 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);
+ return recs;
+ }
+
@Test
public void testDNSKEYRecord() throws Exception {
String publicK =
@@ -607,6 +631,24 @@ public class TestRegistryDNS extends Assert {
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 =
+ assertDNSQueryNotNull("mail.yahoo.com.", Type.CNAME);
+ }
+
public RegistryDNS getRegistryDNS() {
return registryDNS;
}
---------------------------------------------------------------------
To unsubscribe, e-mail: common-commits-unsubscribe@hadoop.apache.org
For additional commands, e-mail: common-commits-help@hadoop.apache.org