From ed9db40f8600c76ecd8966725f4abb8fa4029090 Mon Sep 17 00:00:00 2001 From: aleigh Date: Tue, 29 Mar 2022 11:41:11 -0700 Subject: [PATCH] leigh-stack-dnsd: Renamed infra to stack & changed to a threaded executor model --- .../build.gradle | 2 +- .../java/leigh/stack}/dnsd/DNSDaemon.java | 2 +- .../java/leigh/stack}/dnsd/DNSService.java | 30 +++++++++++-------- .../leigh/stack}/dnsd/EmergencyNameStore.java | 2 +- .../java/leigh/stack}/dnsd/NameStore.java | 2 +- .../java/leigh/infra/dnsd/TestResolver.java | 0 settings.gradle | 2 +- 7 files changed, 22 insertions(+), 18 deletions(-) rename {leigh-infra-dnsd => leigh-stack-dnsd}/build.gradle (89%) rename {leigh-infra-dnsd/src/main/java/leigh/infra => leigh-stack-dnsd/src/main/java/leigh/stack}/dnsd/DNSDaemon.java (94%) rename {leigh-infra-dnsd/src/main/java/leigh/infra => leigh-stack-dnsd/src/main/java/leigh/stack}/dnsd/DNSService.java (64%) rename {leigh-infra-dnsd/src/main/java/leigh/infra => leigh-stack-dnsd/src/main/java/leigh/stack}/dnsd/EmergencyNameStore.java (99%) rename {leigh-infra-dnsd/src/main/java/leigh/infra => leigh-stack-dnsd/src/main/java/leigh/stack}/dnsd/NameStore.java (91%) rename {leigh-infra-dnsd => leigh-stack-dnsd}/src/test/java/leigh/infra/dnsd/TestResolver.java (100%) diff --git a/leigh-infra-dnsd/build.gradle b/leigh-stack-dnsd/build.gradle similarity index 89% rename from leigh-infra-dnsd/build.gradle rename to leigh-stack-dnsd/build.gradle index 0b3c64227..4f9e9459f 100644 --- a/leigh-infra-dnsd/build.gradle +++ b/leigh-stack-dnsd/build.gradle @@ -22,5 +22,5 @@ test { } application { - mainClass = 'leigh.infra.dnsd.DNSDaemon' + mainClass = 'leigh.stack.dnsd.DNSDaemon' } \ No newline at end of file diff --git a/leigh-infra-dnsd/src/main/java/leigh/infra/dnsd/DNSDaemon.java b/leigh-stack-dnsd/src/main/java/leigh/stack/dnsd/DNSDaemon.java similarity index 94% rename from leigh-infra-dnsd/src/main/java/leigh/infra/dnsd/DNSDaemon.java rename to leigh-stack-dnsd/src/main/java/leigh/stack/dnsd/DNSDaemon.java index 679488ac8..dc251fe4d 100644 --- a/leigh-infra-dnsd/src/main/java/leigh/infra/dnsd/DNSDaemon.java +++ b/leigh-stack-dnsd/src/main/java/leigh/stack/dnsd/DNSDaemon.java @@ -1,4 +1,4 @@ -package leigh.infra.dnsd; +package leigh.stack.dnsd; import leigh.mecha.log.MechaLogger; import leigh.mecha.log.MechaLoggerFactory; diff --git a/leigh-infra-dnsd/src/main/java/leigh/infra/dnsd/DNSService.java b/leigh-stack-dnsd/src/main/java/leigh/stack/dnsd/DNSService.java similarity index 64% rename from leigh-infra-dnsd/src/main/java/leigh/infra/dnsd/DNSService.java rename to leigh-stack-dnsd/src/main/java/leigh/stack/dnsd/DNSService.java index 466b050dd..b79a00ca5 100644 --- a/leigh-infra-dnsd/src/main/java/leigh/infra/dnsd/DNSService.java +++ b/leigh-stack-dnsd/src/main/java/leigh/stack/dnsd/DNSService.java @@ -1,4 +1,4 @@ -package leigh.infra.dnsd; +package leigh.stack.dnsd; import leigh.mecha.log.MechaLogger; import leigh.mecha.log.MechaLoggerFactory; @@ -8,7 +8,10 @@ import org.xbill.DNS.SimpleResolver; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; +import java.net.InetAddress; import java.net.UnknownHostException; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; /** * Simple implementation of a DNS server. This implementation attempts to lookup queries in a {@link NameStore}, @@ -22,6 +25,7 @@ public class DNSService implements Runnable { private final int port; private final SimpleResolver resolver; private final NameStore nameStore = new EmergencyNameStore(); + private final ExecutorService executorService = Executors.newCachedThreadPool(); DNSService(int port) throws UnknownHostException { this.port = port; @@ -33,24 +37,24 @@ public class DNSService implements Runnable { DatagramSocket socket = new DatagramSocket(port); //noinspection InfiniteLoopStatement while (true) { - try { - process(socket); - } catch (Exception e) { - e.printStackTrace(); - } + executorService.submit(() -> { + try { + byte[] in = new byte[UDP_SIZE]; + DatagramPacket indp = new DatagramPacket(in, UDP_SIZE); + socket.receive(indp); + query(socket, in, indp.getAddress(), indp.getPort()); + } catch (Exception e) { + e.printStackTrace(); + } + }); } } catch (IOException e) { e.printStackTrace(); } } - private void process(DatagramSocket socket) throws IOException { - // TODO: Make this an executor threadpool to avoid pipelining on slow relayed queries - byte[] in = new byte[UDP_SIZE]; - DatagramPacket indp = new DatagramPacket(in, UDP_SIZE); - socket.receive(indp); + private void query(DatagramSocket socket, byte[] in, InetAddress dstAddr, int dstPort) throws IOException { Message request = new Message(in); - Message reply = nameStore.doQuery(request); if (reply == null) @@ -58,7 +62,7 @@ public class DNSService implements Runnable { byte[] resp = reply.toWire(); DatagramPacket outdp = new DatagramPacket(resp, resp.length, - indp.getAddress(), indp.getPort()); + dstAddr, dstPort); socket.send(outdp); } } \ No newline at end of file diff --git a/leigh-infra-dnsd/src/main/java/leigh/infra/dnsd/EmergencyNameStore.java b/leigh-stack-dnsd/src/main/java/leigh/stack/dnsd/EmergencyNameStore.java similarity index 99% rename from leigh-infra-dnsd/src/main/java/leigh/infra/dnsd/EmergencyNameStore.java rename to leigh-stack-dnsd/src/main/java/leigh/stack/dnsd/EmergencyNameStore.java index baf6bd87a..72f8969c5 100644 --- a/leigh-infra-dnsd/src/main/java/leigh/infra/dnsd/EmergencyNameStore.java +++ b/leigh-stack-dnsd/src/main/java/leigh/stack/dnsd/EmergencyNameStore.java @@ -1,4 +1,4 @@ -package leigh.infra.dnsd; +package leigh.stack.dnsd; import org.xbill.DNS.Record; import org.xbill.DNS.*; diff --git a/leigh-infra-dnsd/src/main/java/leigh/infra/dnsd/NameStore.java b/leigh-stack-dnsd/src/main/java/leigh/stack/dnsd/NameStore.java similarity index 91% rename from leigh-infra-dnsd/src/main/java/leigh/infra/dnsd/NameStore.java rename to leigh-stack-dnsd/src/main/java/leigh/stack/dnsd/NameStore.java index 787d59042..7c3aa6b82 100644 --- a/leigh-infra-dnsd/src/main/java/leigh/infra/dnsd/NameStore.java +++ b/leigh-stack-dnsd/src/main/java/leigh/stack/dnsd/NameStore.java @@ -1,4 +1,4 @@ -package leigh.infra.dnsd; +package leigh.stack.dnsd; import org.xbill.DNS.Message; diff --git a/leigh-infra-dnsd/src/test/java/leigh/infra/dnsd/TestResolver.java b/leigh-stack-dnsd/src/test/java/leigh/infra/dnsd/TestResolver.java similarity index 100% rename from leigh-infra-dnsd/src/test/java/leigh/infra/dnsd/TestResolver.java rename to leigh-stack-dnsd/src/test/java/leigh/infra/dnsd/TestResolver.java diff --git a/settings.gradle b/settings.gradle index 04fda5d70..a557ade19 100644 --- a/settings.gradle +++ b/settings.gradle @@ -87,4 +87,4 @@ include 'leigh-minecraft-link-quests' include 'leigh-blockchain' include 'leigh-inkan' include 'leigh-blockchain-blocktail' -include 'leigh-infra-dnsd' \ No newline at end of file +include 'leigh-stack-dnsd' \ No newline at end of file -- GitLab