You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuweni.apache.org by to...@apache.org on 2022/10/12 07:11:16 UTC

[incubator-tuweni] branch main updated: remove dnsjava, prefer vertx throughout

This is an automated email from the ASF dual-hosted git repository.

toulmean pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-tuweni.git


The following commit(s) were added to refs/heads/main by this push:
     new dcc4a00d remove dnsjava, prefer vertx throughout
     new 5b29c470 Merge pull request #439 from atoulme/dnsjava_to_vertx
dcc4a00d is described below

commit dcc4a00d09da97ee488939fe590c2d14ebfa7ddc
Author: Antoine Toulme <an...@lunar-ocean.com>
AuthorDate: Mon Oct 10 23:01:45 2022 -0700

    remove dnsjava, prefer vertx throughout
---
 dependency-versions.gradle                         |  1 -
 dist/LICENSE-binary                                | 27 ---------
 dns-discovery/build.gradle                         |  2 +-
 .../tuweni/discoveryint/DiscoveryAPITest.java      | 17 ++++--
 .../org/apache/tuweni/discovery/DNSResolverTest.kt | 18 +++---
 .../org/apache/tuweni/discovery/DNSDaemon.kt       | 30 +++++-----
 .../org/apache/tuweni/discovery/DNSResolver.kt     | 70 +++++++++++-----------
 .../org/apache/tuweni/discovery/DNSResolverTest.kt | 19 +++---
 eth-blockprocessor/build.gradle                    |  2 +-
 eth-client/build.gradle                            |  2 +-
 .../apache/tuweni/ethclient/DNSClientRunTest.kt    | 11 +++-
 .../org/apache/tuweni/ethclient/DNSClient.kt       |  3 +
 .../org/apache/tuweni/ethclient/EthereumClient.kt  |  2 +-
 eth-client/src/main/resources/logback.xml          |  3 -
 eth-crawler/build.gradle                           |  1 -
 .../org/apache/tuweni/eth/crawler/CrawlerApp.kt    |  1 +
 jsonrpc-app/build.gradle                           |  1 -
 17 files changed, 102 insertions(+), 108 deletions(-)

diff --git a/dependency-versions.gradle b/dependency-versions.gradle
index e888a303..8b105b5e 100644
--- a/dependency-versions.gradle
+++ b/dependency-versions.gradle
@@ -31,7 +31,6 @@ dependencyManagement {
     dependency('com.squareup.okhttp3:okhttp:3.12.0')
     dependency('com.winterbe:expekt:0.5.0')
     dependency('com.zaxxer:HikariCP:4.0.3')
-    dependency('dnsjava:dnsjava:3.3.1')
     dependency('info.picocli:picocli:4.0.0-alpha-2')
     dependency('io.grpc:grpc-netty-shaded:1.38.0')
     dependency('io.ktor:ktor-client-core:1.4.2')
diff --git a/dist/LICENSE-binary b/dist/LICENSE-binary
index ce5a6cca..240dda4f 100644
--- a/dist/LICENSE-binary
+++ b/dist/LICENSE-binary
@@ -857,33 +857,6 @@ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
 OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
 WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 ------------------------------------------------------------------------------------
-This product is distributed with the dns-hava library distributed under the 
-2-Clause BSD License (https://github.com/dnsjava/dnsjava/blob/master/LICENSE):
-Copyright (c) 1998-2011, Brian Wellington.
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-  * Redistributions of source code must retain the above copyright notice,
-    this list of conditions and the following disclaimer.
-
-  * Redistributions in binary form must reproduce the above copyright notice,
-    this list of conditions and the following disclaimer in the documentation
-    and/or other materials provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
-LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGE.
-------------------------------------------------------------------------------------
 This product is distributed with the Bouncy Castle PKIX and Security Provider 
 libraries (https://www.bouncycastle.org/), distributed by the Legion of the Bouncy 
 Castle:
diff --git a/dns-discovery/build.gradle b/dns-discovery/build.gradle
index 955d25e8..fd1698e9 100644
--- a/dns-discovery/build.gradle
+++ b/dns-discovery/build.gradle
@@ -22,8 +22,8 @@ dependencies {
   implementation project(':kv')
   implementation project(':merkle-trie')
   implementation project(':rlp')
-  implementation 'dnsjava:dnsjava'
   implementation 'io.vertx:vertx-core'
+  implementation 'io.vertx:vertx-lang-kotlin-coroutines'
   implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core'
   implementation 'org.slf4j:slf4j-api'
 
diff --git a/dns-discovery/src/integrationTest/java/org/apache/tuweni/discoveryint/DiscoveryAPITest.java b/dns-discovery/src/integrationTest/java/org/apache/tuweni/discoveryint/DiscoveryAPITest.java
index 9c0e8a73..d973cdee 100644
--- a/dns-discovery/src/integrationTest/java/org/apache/tuweni/discoveryint/DiscoveryAPITest.java
+++ b/dns-discovery/src/integrationTest/java/org/apache/tuweni/discoveryint/DiscoveryAPITest.java
@@ -14,32 +14,39 @@ package org.apache.tuweni.discoveryint;
 
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
+import org.apache.tuweni.concurrent.AsyncCompletion;
 import org.apache.tuweni.devp2p.EthereumNodeRecord;
 import org.apache.tuweni.discovery.DNSResolver;
 import org.apache.tuweni.discovery.DNSVisitor;
 import org.apache.tuweni.junit.BouncyCastleExtension;
+import org.apache.tuweni.junit.VertxExtension;
+import org.apache.tuweni.junit.VertxInstance;
 
 import java.util.ArrayList;
 import java.util.List;
 
+import io.vertx.core.Vertx;
 import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
 
-@ExtendWith(BouncyCastleExtension.class)
+@ExtendWith({BouncyCastleExtension.class, VertxExtension.class})
 class DiscoveryAPITest {
 
   @Disabled("too unstable on CI")
   @Test
-  void resolveNames() {
-    DNSResolver resolver = new DNSResolver();
+  void resolveNames(@VertxInstance Vertx vertx) throws Exception {
+    DNSResolver resolver = new DNSResolver(vertx);
     List<EthereumNodeRecord> nodes = new ArrayList<>();
     DNSVisitor visitor = enr -> {
       nodes.add(enr);
       return false;
     };
-    resolver
-        .visitTree("enrtree://AKA3AM6LPBYEUDMVNU3BSVQJ5AD45Y7YPOHJLEF6W26QOE4VTUDPE@all.goerli.ethdisco.net", visitor);
+    AsyncCompletion completion = resolver
+        .visitTreeAsync(
+            "enrtree://AKA3AM6LPBYEUDMVNU3BSVQJ5AD45Y7YPOHJLEF6W26QOE4VTUDPE@all.goerli.ethdisco.net",
+            visitor);
+    completion.join();
     assertTrue(nodes.size() > 0);
   }
 }
diff --git a/dns-discovery/src/integrationTest/kotlin/org/apache/tuweni/discovery/DNSResolverTest.kt b/dns-discovery/src/integrationTest/kotlin/org/apache/tuweni/discovery/DNSResolverTest.kt
index 9dd66af9..b686880c 100644
--- a/dns-discovery/src/integrationTest/kotlin/org/apache/tuweni/discovery/DNSResolverTest.kt
+++ b/dns-discovery/src/integrationTest/kotlin/org/apache/tuweni/discovery/DNSResolverTest.kt
@@ -16,28 +16,32 @@
  */
 package org.apache.tuweni.discovery
 
+import io.vertx.core.Vertx
+import kotlinx.coroutines.runBlocking
 import org.apache.tuweni.devp2p.EthereumNodeRecord
 import org.apache.tuweni.junit.BouncyCastleExtension
+import org.apache.tuweni.junit.VertxExtension
+import org.apache.tuweni.junit.VertxInstance
 import org.junit.jupiter.api.Assertions.assertNotNull
 import org.junit.jupiter.api.Assertions.assertTrue
 import org.junit.jupiter.api.Disabled
 import org.junit.jupiter.api.Test
 import org.junit.jupiter.api.extension.ExtendWith
 
-@ExtendWith(BouncyCastleExtension::class)
+@ExtendWith(BouncyCastleExtension::class, VertxExtension::class)
 class DNSResolverTest {
 
   @Test
-  fun testQueryTXT() {
-    val resolver = DNSResolver()
+  fun testQueryTXT(@VertxInstance vertx: Vertx) = runBlocking {
+    val resolver = DNSResolver(vertx = vertx)
     val rec = resolver.resolveRecordRaw("all.goerli.ethdisco.net")
     assertNotNull(rec)
   }
 
   @Disabled("too unstable on CI")
   @Test
-  fun resolveAllGoerliNodes() {
-    val resolver = DNSResolver()
+  fun resolveAllGoerliNodes(@VertxInstance vertx: Vertx) = runBlocking {
+    val resolver = DNSResolver(vertx = vertx)
     val nodes = mutableListOf<EthereumNodeRecord>()
     val visitor = object : DNSVisitor {
       override fun visit(enr: EthereumNodeRecord): Boolean {
@@ -55,8 +59,8 @@ class DNSResolverTest {
 
   @Disabled("too expensive for CI")
   @Test
-  fun resolveAllMainnetNodes() {
-    val resolver = DNSResolver()
+  fun resolveAllMainnetNodes(@VertxInstance vertx: Vertx) = runBlocking {
+    val resolver = DNSResolver(vertx = vertx)
     val nodes = mutableListOf<EthereumNodeRecord>()
     val visitor = object : DNSVisitor {
       override fun visit(enr: EthereumNodeRecord): Boolean {
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 7467f9b9..6c02228e 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
@@ -16,12 +16,10 @@
  */
 package org.apache.tuweni.discovery
 
+import io.vertx.core.Vertx
+import kotlinx.coroutines.runBlocking
 import org.apache.tuweni.devp2p.EthereumNodeRecord
 import org.slf4j.LoggerFactory
-import org.xbill.DNS.ExtendedResolver
-import org.xbill.DNS.Resolver
-import java.util.Timer
-import java.util.TimerTask
 
 /**
  * Resolves DNS records over time, refreshing records.
@@ -39,15 +37,15 @@ class DNSDaemon @JvmOverloads constructor(
   private val seq: Long = 0,
   private val period: Long = 60000L,
   private val dnsServer: String? = null,
-  private val resolver: Resolver = if (dnsServer != null) ExtendedResolver(arrayOf(dnsServer)) else ExtendedResolver()
+  private val vertx: Vertx,
 ) {
   companion object {
     val logger = LoggerFactory.getLogger(DNSDaemon::class.java)
   }
 
-  val listeners = HashSet<DNSDaemonListener>()
+  private var periodicHandle: Long = 0
 
-  private val timer: Timer = Timer(false)
+  val listeners = HashSet<DNSDaemonListener>()
 
   init {
     listener?.let {
@@ -61,31 +59,35 @@ class DNSDaemon @JvmOverloads constructor(
 
   fun start() {
     logger.trace("Starting DNSDaemon for $enrLink")
-    timer.scheduleAtFixedRate(DNSTimerTask(resolver, seq, enrLink, this::updateRecords), 0, period)
+    val task = DNSTimerTask(vertx, seq, enrLink, this::updateRecords)
+    this.periodicHandle = vertx.setPeriodic(period, task::run)
   }
 
   /**
    * Close the daemon.
    */
   public fun close() {
-    timer.cancel()
+    vertx.cancelTimer(this.periodicHandle)
   }
 }
 
 internal class DNSTimerTask(
-  private val resolver: Resolver,
+  private val vertx: Vertx,
   private val seq: Long,
   private val enrLink: String,
   private val records: (List<EthereumNodeRecord>) -> Unit,
-  private val dnsResolver: DNSResolver = DNSResolver(null, seq, resolver)
-) : TimerTask() {
+  private val dnsServer: String? = null,
+  private val dnsResolver: DNSResolver = DNSResolver(dnsServer, seq, vertx)
+) {
 
   companion object {
     val logger = LoggerFactory.getLogger(DNSTimerTask::class.java)
   }
 
-  override fun run() {
+  fun run(@Suppress("UNUSED_PARAMETER") timerId: Long) {
     logger.debug("Refreshing DNS records with $enrLink")
-    records(dnsResolver.collectAll(enrLink))
+    runBlocking {
+      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 ea848083..0bd2a269 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
@@ -32,19 +32,18 @@ package org.apache.tuweni.discovery
  * limitations under the License.
  */
 
+import io.vertx.core.Vertx
+import io.vertx.core.dns.DnsClient
+import io.vertx.core.dns.DnsClientOptions
+import io.vertx.core.dns.DnsException
+import io.vertx.kotlin.coroutines.await
+import kotlinx.coroutines.runBlocking
+import org.apache.tuweni.concurrent.AsyncCompletion
+import org.apache.tuweni.concurrent.coroutines.asyncCompletion
 import org.apache.tuweni.crypto.Hash
 import org.apache.tuweni.crypto.SECP256K1
 import org.apache.tuweni.devp2p.EthereumNodeRecord
 import org.slf4j.LoggerFactory
-import org.xbill.DNS.DClass
-import org.xbill.DNS.ExtendedResolver
-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.Type
-import org.xbill.DNS.WireParseException
 import java.io.IOException
 
 /**
@@ -56,7 +55,14 @@ import java.io.IOException
 class DNSResolver @JvmOverloads constructor(
   private val dnsServer: String? = null,
   var seq: Long = 0,
-  private val resolver: Resolver = if (dnsServer != null) ExtendedResolver(arrayOf(dnsServer)) else ExtendedResolver(),
+  val vertx: Vertx,
+  private val dnsClient: DnsClient = vertx.createDnsClient(
+    DnsClientOptions().apply {
+      if (dnsServer != null) {
+        this.host = dnsServer
+      }
+    }
+  )
 ) {
 
   companion object {
@@ -69,7 +75,7 @@ class DNSResolver @JvmOverloads constructor(
    * @param domainName the domain name to query
    * @return the DNS entry read from the domain
    */
-  public fun resolveRecord(domainName: String): DNSEntry? {
+  suspend fun resolveRecord(domainName: String): DNSEntry? {
     return resolveRecordRaw(domainName)?.let { DNSEntry.readDNSEntry(it) }
   }
 
@@ -84,7 +90,7 @@ class DNSResolver @JvmOverloads constructor(
    * @param enrLink the ENR link to start with, of the form enrtree://PUBKEY@domain
    * @return all ENRs collected
    */
-  public fun collectAll(enrLink: String): List<EthereumNodeRecord> {
+  suspend fun collectAll(enrLink: String): List<EthereumNodeRecord> {
     val nodes = mutableListOf<EthereumNodeRecord>()
     val visitor = object : DNSVisitor {
       override fun visit(enr: EthereumNodeRecord): Boolean {
@@ -106,17 +112,25 @@ class DNSResolver @JvmOverloads constructor(
    * @param enrLink the ENR link to start with
    * @param visitor the visitor that will look at each record
    */
-  public fun visitTree(enrLink: String, visitor: DNSVisitor) {
+  suspend fun visitTree(enrLink: String, visitor: DNSVisitor) {
     val link = ENRTreeLink(enrLink)
     visitTree(link, visitor)
   }
 
+  fun visitTreeAsync(enrLink: String, visitor: DNSVisitor): AsyncCompletion {
+    return runBlocking {
+      return@runBlocking asyncCompletion {
+        visitTree(enrLink, visitor)
+      }
+    }
+  }
+
   /**
    * Reads a complete tree of record, starting with the top-level record.
    * @param link the ENR link to start with
    * @param visitor the visitor that will look at each record
    */
-  private fun visitTree(link: ENRTreeLink, visitor: DNSVisitor) {
+  private suspend fun visitTree(link: ENRTreeLink, visitor: DNSVisitor) {
     val entry = resolveRecord(link.domainName)
     if (entry !is ENRTreeRoot) {
       logger.debug("Root entry $entry is not an ENR tree root")
@@ -143,39 +157,27 @@ class DNSResolver @JvmOverloads constructor(
    * @param domainName the name of the DNS domain to query
    * @return the first TXT entry of the DNS record
    */
-  fun resolveRecordRaw(domainName: String): String? {
+  suspend fun resolveRecordRaw(domainName: String): String? {
     try {
-
-      // required as TXT records are quite big, and dnsjava maxes out UDP payload.
-      resolver.setTCP(true)
-      val type = Type.TXT
-      val name = Name.fromString(domainName, Name.root)
-      val rec = Record.newRecord(name, type, DClass.IN)
-      val query = Message.newQuery(rec)
-      val response = resolver.send(query)
-      val records = response.getSection(Section.ANSWER)
-
+      val records = dnsClient.resolveTXT(domainName).await()
       if (records.isNotEmpty()) {
-        return records[0].rdataToString()
+        return records[0]
       } else {
         logger.debug("No TXT record for $domainName")
         return null
       }
+    } catch (e: DnsException) {
+      logger.warn("DNS query error with $domainName", e)
+      return null
     } catch (e: IOException) {
       logger.warn("I/O exception contacting remote DNS server when resolving $domainName", e)
       return null
-    } catch (e: WireParseException) {
-      logger.error("Error reading TXT record", e)
-      return null
     }
   }
 
-  private fun internalVisit(entryName: String, domainName: String, visitor: DNSVisitor): Boolean {
+  private suspend fun internalVisit(entryName: String, domainName: String, visitor: DNSVisitor): Boolean {
     try {
-      val entry = resolveRecord("$entryName.$domainName")
-      if (entry == null) {
-        return true
-      }
+      val entry = resolveRecord("$entryName.$domainName") ?: return true
 
       if (entry is ENRNode) {
         return visitor.visit(entry.nodeRecord)
diff --git a/dns-discovery/src/test/kotlin/org/apache/tuweni/discovery/DNSResolverTest.kt b/dns-discovery/src/test/kotlin/org/apache/tuweni/discovery/DNSResolverTest.kt
index e2be7aba..812cbf5a 100644
--- a/dns-discovery/src/test/kotlin/org/apache/tuweni/discovery/DNSResolverTest.kt
+++ b/dns-discovery/src/test/kotlin/org/apache/tuweni/discovery/DNSResolverTest.kt
@@ -16,25 +16,26 @@
  */
 package org.apache.tuweni.discovery
 
+import io.vertx.core.Vertx
+import kotlinx.coroutines.runBlocking
+import org.apache.tuweni.junit.VertxExtension
+import org.apache.tuweni.junit.VertxInstance
 import org.junit.jupiter.api.Assertions.assertNull
 import org.junit.jupiter.api.Test
-import org.xbill.DNS.SimpleResolver
-import java.time.Duration
-
+import org.junit.jupiter.api.extension.ExtendWith
+@ExtendWith(VertxExtension::class)
 class DNSResolverTest {
 
   @Test
-  fun testBadHost() {
-    val dnsResolver = SimpleResolver("127.0.0.2")
-    dnsResolver.timeout = Duration.ofMillis(100)
-    val resolver = DNSResolver(resolver = dnsResolver)
+  fun testBadHost(@VertxInstance vertx: Vertx) = runBlocking {
+    val resolver = DNSResolver(dnsServer = "127.0.0.2", vertx = vertx)
     val record = resolver.resolveRecordRaw("longstring.example.com")
     assertNull(record)
   }
 
   @Test
-  fun testNoTXTEntry() {
-    val resolver = DNSResolver()
+  fun testNoTXTEntry(@VertxInstance vertx: Vertx) = runBlocking {
+    val resolver = DNSResolver(vertx = vertx)
     val record = resolver.resolveRecordRaw("foo.tuweni.apache.org")
     assertNull(record)
   }
diff --git a/eth-blockprocessor/build.gradle b/eth-blockprocessor/build.gradle
index e6ef5921..db71c939 100644
--- a/eth-blockprocessor/build.gradle
+++ b/eth-blockprocessor/build.gradle
@@ -14,12 +14,12 @@ description = 'Ethereum Block Processor'
 
 dependencies {
   implementation 'com.fasterxml.jackson.core:jackson-databind'
-  implementation 'dnsjava:dnsjava'
   implementation 'io.opentelemetry:opentelemetry-api'
   implementation 'io.opentelemetry:opentelemetry-sdk'
   implementation 'io.opentelemetry:opentelemetry-sdk-metrics'
   implementation 'io.vertx:vertx-core'
   implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core'
+  implementation 'org.slf4j:slf4j-api'
 
   implementation project(':bytes')
   implementation project(':concurrent-coroutines')
diff --git a/eth-client/build.gradle b/eth-client/build.gradle
index 0f29f181..f49defa2 100644
--- a/eth-client/build.gradle
+++ b/eth-client/build.gradle
@@ -14,7 +14,6 @@ description = 'Ethereum client'
 
 dependencies {
   implementation 'com.fasterxml.jackson.core:jackson-databind'
-  implementation 'dnsjava:dnsjava'
   implementation 'io.opentelemetry:opentelemetry-api'
   implementation 'io.opentelemetry:opentelemetry-sdk'
   implementation 'io.opentelemetry:opentelemetry-sdk-metrics'
@@ -24,6 +23,7 @@ dependencies {
   implementation 'org.apache.lucene:lucene-core'
   implementation 'org.infinispan:infinispan-core'
   implementation 'org.infinispan:infinispan-cachestore-rocksdb'
+  implementation 'org.slf4j:slf4j-api'
 
   implementation project(':bytes')
   implementation project(':devp2p-eth')
diff --git a/eth-client/src/integrationTest/kotlin/org/apache/tuweni/ethclient/DNSClientRunTest.kt b/eth-client/src/integrationTest/kotlin/org/apache/tuweni/ethclient/DNSClientRunTest.kt
index 7b47c011..5b67cc0b 100644
--- a/eth-client/src/integrationTest/kotlin/org/apache/tuweni/ethclient/DNSClientRunTest.kt
+++ b/eth-client/src/integrationTest/kotlin/org/apache/tuweni/ethclient/DNSClientRunTest.kt
@@ -16,16 +16,22 @@
  */
 package org.apache.tuweni.ethclient
 
+import io.vertx.core.Vertx
 import kotlinx.coroutines.runBlocking
+import org.apache.tuweni.junit.VertxExtension
+import org.apache.tuweni.junit.VertxInstance
 import org.apache.tuweni.kv.MapKeyValueStore
 import org.apache.tuweni.peer.repository.memory.MemoryPeerRepository
 import org.junit.jupiter.api.Assertions.assertEquals
 import org.junit.jupiter.api.Test
+import org.junit.jupiter.api.extension.ExtendWith
 
+@ExtendWith(VertxExtension::class)
 class DNSClientRunTest {
   @Test
-  fun testStartAndStop() {
+  fun testStartAndStop(@VertxInstance vertx: Vertx) {
     val client = DNSClient(
+      vertx,
       DNSConfigurationImpl("default", "foo", "example.com", 1000, null),
       MapKeyValueStore.open(), MemoryPeerRepository()
     )
@@ -36,8 +42,9 @@ class DNSClientRunTest {
   }
 
   @Test
-  fun changeSeq() {
+  fun changeSeq(@VertxInstance vertx: Vertx) {
     val client = DNSClient(
+      vertx,
       DNSConfigurationImpl("default", "foo", "example.com", 1000, null),
       MapKeyValueStore.open(), MemoryPeerRepository()
     )
diff --git a/eth-client/src/main/kotlin/org/apache/tuweni/ethclient/DNSClient.kt b/eth-client/src/main/kotlin/org/apache/tuweni/ethclient/DNSClient.kt
index ec2a6044..0230e3bc 100644
--- a/eth-client/src/main/kotlin/org/apache/tuweni/ethclient/DNSClient.kt
+++ b/eth-client/src/main/kotlin/org/apache/tuweni/ethclient/DNSClient.kt
@@ -16,6 +16,7 @@
  */
 package org.apache.tuweni.ethclient
 
+import io.vertx.core.Vertx
 import kotlinx.coroutines.runBlocking
 import org.apache.tuweni.devp2p.EthereumNodeRecord
 import org.apache.tuweni.discovery.DNSDaemon
@@ -28,6 +29,7 @@ import org.slf4j.LoggerFactory
  * Wrapper for running a DNS daemon with configuration.
  */
 class DNSClient(
+  private val vertx: Vertx,
   private val config: DNSConfiguration,
   private val metadataStore: KeyValueStore<String, String>,
   private val peerRepository: PeerRepository
@@ -62,6 +64,7 @@ class DNSClient(
     logger.info("Starting DNSClient with ${config.enrLink()}")
     config.enrLink().let { link ->
       val daemon = DNSDaemon(
+        vertx = vertx,
         dnsServer = config.dnsServer(),
         seq = seq(),
         enrLink = link,
diff --git a/eth-client/src/main/kotlin/org/apache/tuweni/ethclient/EthereumClient.kt b/eth-client/src/main/kotlin/org/apache/tuweni/ethclient/EthereumClient.kt
index 061b1028..8829da02 100644
--- a/eth-client/src/main/kotlin/org/apache/tuweni/ethclient/EthereumClient.kt
+++ b/eth-client/src/main/kotlin/org/apache/tuweni/ethclient/EthereumClient.kt
@@ -170,7 +170,7 @@ class EthereumClient(
           "Repository $peerRepository not found, $message"
         )
       }
-      val dnsClient = DNSClient(it, MapKeyValueStore.open(), peerRepository)
+      val dnsClient = DNSClient(vertx, it, MapKeyValueStore.open(), peerRepository)
       dnsClients[it.getName()] = dnsClient
       dnsClient.start()
       logger.info("Started DNS client ${it.getName()} for ${it.enrLink()}")
diff --git a/eth-client/src/main/resources/logback.xml b/eth-client/src/main/resources/logback.xml
index a5e508af..726cc3e2 100644
--- a/eth-client/src/main/resources/logback.xml
+++ b/eth-client/src/main/resources/logback.xml
@@ -30,9 +30,6 @@
     <logger level="info" name="io.netty.buffer" additivity="false">
         <appender-ref ref="STDOUT" />
     </logger>
-    <logger level="info" name="org.xbill.DNS" additivity="false">
-        <appender-ref ref="STDOUT" />
-    </logger>
     <logger level="info" name="org.eclipse.jetty" additivity="false">
         <appender-ref ref="STDOUT" />
     </logger>
diff --git a/eth-crawler/build.gradle b/eth-crawler/build.gradle
index 407d37b7..d63efd00 100644
--- a/eth-crawler/build.gradle
+++ b/eth-crawler/build.gradle
@@ -33,7 +33,6 @@ dependencies {
 
   implementation 'com.fasterxml.jackson.core:jackson-databind'
   implementation 'com.zaxxer:HikariCP'
-  implementation 'dnsjava:dnsjava'
   implementation 'org.flywaydb:flyway-core'
   implementation 'io.swagger.core.v3:swagger-jaxrs2-jakarta'
   implementation 'org.webjars:swagger-ui'
diff --git a/eth-crawler/src/main/kotlin/org/apache/tuweni/eth/crawler/CrawlerApp.kt b/eth-crawler/src/main/kotlin/org/apache/tuweni/eth/crawler/CrawlerApp.kt
index 17e55afa..fd836ee4 100644
--- a/eth-crawler/src/main/kotlin/org/apache/tuweni/eth/crawler/CrawlerApp.kt
+++ b/eth-crawler/src/main/kotlin/org/apache/tuweni/eth/crawler/CrawlerApp.kt
@@ -132,6 +132,7 @@ class CrawlerApplication(
     )
 
     val dnsDaemon = DNSDaemon(
+      vertx = vertx,
       seq = 0L,
       enrLink = config.discoveryDNS(),
       period = config.discoveryDNSPollingPeriod(),
diff --git a/jsonrpc-app/build.gradle b/jsonrpc-app/build.gradle
index 61c361e1..f7401534 100644
--- a/jsonrpc-app/build.gradle
+++ b/jsonrpc-app/build.gradle
@@ -29,7 +29,6 @@ dependencies {
 
   implementation 'com.fasterxml.jackson.core:jackson-databind'
   implementation 'com.zaxxer:HikariCP'
-  implementation 'dnsjava:dnsjava'
   implementation 'org.flywaydb:flyway-core'
   implementation 'io.swagger.core.v3:swagger-jaxrs2-jakarta'
   implementation 'org.webjars:swagger-ui'


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@tuweni.apache.org
For additional commands, e-mail: commits-help@tuweni.apache.org