This is an automated email from the ASF dual-hosted git repository. toulmean pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/incubator-tuweni.git
commit cf5c7ed3516a516075ad3a3ea844f7275747b0e0 Author: Antoine Toulme <[email protected]> AuthorDate: Fri May 8 23:29:55 2020 -0700 reuse the resolver across visits --- .../kotlin/org/apache/tuweni/discovery/DNSDaemon.kt | 19 +++++++++++-------- .../kotlin/org/apache/tuweni/discovery/DNSResolver.kt | 6 ++++-- 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/dns-discovery/src/main/kotlin/org/apache/tuweni/discovery/DNSDaemon.kt b/dns-discovery/src/main/kotlin/org/apache/tuweni/discovery/DNSDaemon.kt index 17b07f3..afead4d 100644 --- a/dns-discovery/src/main/kotlin/org/apache/tuweni/discovery/DNSDaemon.kt +++ b/dns-discovery/src/main/kotlin/org/apache/tuweni/discovery/DNSDaemon.kt @@ -17,6 +17,8 @@ package org.apache.tuweni.discovery import org.apache.tuweni.devp2p.EthereumNodeRecord +import org.xbill.DNS.Resolver +import org.xbill.DNS.SimpleResolver import java.util.Timer import java.util.TimerTask import java.util.concurrent.atomic.AtomicReference @@ -28,12 +30,14 @@ import java.util.concurrent.atomic.AtomicReference * @param seq the sequence number of the root record. If the root record seq is higher, proceed with visit. * @param enrLink the ENR link to start with, of the form enrtree://PUBKEY@domain * @param period the period at which to poll DNS records + * @param resolver */ public class DNSDaemon @JvmOverloads constructor( private val dnsServer: String? = null, private val seq: Long = 0, private val enrLink: String, - private val period: Long = 60000L + private val period: Long = 60000L, + private val resolver: Resolver = SimpleResolver(dnsServer) ) { /** @@ -45,7 +49,7 @@ public class DNSDaemon @JvmOverloads constructor( private val records = AtomicReference<EthereumNodeRecord>() init { - timer.scheduleAtFixedRate(DNSTimerTask(dnsServer, seq, enrLink, this::updateRecords), 0, period) + timer.scheduleAtFixedRate(DNSTimerTask(resolver, seq, enrLink, this::updateRecords), 0, period) } private fun updateRecords(records: List<EthereumNodeRecord>) { @@ -61,15 +65,14 @@ public class DNSDaemon @JvmOverloads constructor( } class DNSTimerTask( - private val dnsServer: String? = null, - private var seq: Long, + private val resolver: Resolver, + private val seq: Long, private val enrLink: String, - private val records: (List<EthereumNodeRecord>) -> Unit + private val records: (List<EthereumNodeRecord>) -> Unit, + private val dnsResolver: DNSResolver = DNSResolver(null, seq, resolver) ) : TimerTask() { override fun run() { - val resolver = DNSResolver(dnsServer, seq) - records(resolver.collectAll(enrLink)) - seq = resolver.seq + records(dnsResolver.collectAll(enrLink)) } } diff --git a/dns-discovery/src/main/kotlin/org/apache/tuweni/discovery/DNSResolver.kt b/dns-discovery/src/main/kotlin/org/apache/tuweni/discovery/DNSResolver.kt index 503715d..c61f621 100644 --- a/dns-discovery/src/main/kotlin/org/apache/tuweni/discovery/DNSResolver.kt +++ b/dns-discovery/src/main/kotlin/org/apache/tuweni/discovery/DNSResolver.kt @@ -40,6 +40,7 @@ import org.xbill.DNS.DClass import org.xbill.DNS.Message import org.xbill.DNS.Name import org.xbill.DNS.Record +import org.xbill.DNS.Resolver import org.xbill.DNS.Section import org.xbill.DNS.SimpleResolver import org.xbill.DNS.Type @@ -54,7 +55,8 @@ import org.xbill.DNS.WireParseException public class DNSResolver @JvmOverloads constructor( private val dnsServer: String? = null, - var seq: Long = 0 + var seq: Long = 0, + private val resolver: Resolver = SimpleResolver(dnsServer) ) { companion object { @@ -138,7 +140,7 @@ public class DNSResolver @JvmOverloads constructor( */ fun resolveRecordRaw(domainName: String): String? { try { - val resolver = SimpleResolver(dnsServer) + // required as TXT records are quite big, and dnsjava maxes out UDP payload. resolver.setTCP(true) val type = Type.TXT --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
