Hi,
I have 3 allocs and a consul cluster.
When using dig to resolveSRV my service at _tpocreau-connectors-bot-builder-app-akka-management._tcp.service.consul
I got the 3 allocs but using IO(Dns) I only get 2.
It looks like a dns srv udp limitation see hashicorp/consul#2335 (comment) and the ignore option of dig:
+[no]tcp |
Use [do not use] TCP when querying name servers. The default behavior is to use UDP unless an AXFR or IXFR query is requested, in which case a TCP connection is used. |
+[no]vc |
Use [do not use] TCP when querying name servers. This alternate syntax to +[no]tcp is provided for backward compatibility. The "vc" stands for "virtual circuit". |
-- |
-- |
+[no]ignore |
Ignore truncation in UDP responses instead of retrying with TCP. By default, TCP retries are performed. |
-- |
-- |
Is the ru.smslv.akka.dns.raw.DnsClient only using UDP without TCP retry in case of truncated responses ?
Here is my test case
package akka.discovery.dns
import akka.actor.ActorSystem
import akka.io.AsyncDnsResolver.SrvResolved
import akka.io.{Dns, IO}
import akka.testkit.{ImplicitSender, TestKit}
import com.lightbend.dns.locator.ServiceLocator
import com.lightbend.dns.locator.ServiceLocator.Addresses
import org.scalatest.{AsyncFlatSpecLike, BeforeAndAfterAll, Matchers, WordSpecLike}
class DnsSrvServiceDiscoverySpec() extends TestKit(ActorSystem("MySpec")) with ImplicitSender with AsyncFlatSpecLike with Matchers with BeforeAndAfterAll {
override def afterAll {
TestKit.shutdownActorSystem(system)
}
"Dns" should "return 3 addresses" in {
// send dns request
IO(Dns) ! Dns.Resolve("_tpocreau-connectors-bot-builder-app-akka-management._tcp.service.consul")
assert(expectMsgAnyClassOf(classOf[SrvResolved]).srv.size == 3)
}
}
Here is the result
{"datetime":"2018-03-20T11:43:11.884+01:00","message":"Resolution request for _tpocreau-connectors-bot-builder-app-akka-management._tcp.service.consul from Actor[akka://MySpec/system/testActor-1#116783179]","location":"akka.io.SimpleDnsManager","context":{},"syslog":{"level":"7"}}
{"datetime":"2018-03-20T11:43:11.896+01:00","message":"Using the following DNS nameservers: /10.62.150.139:53","location":"akka.io.AsyncDnsResolver","context":{},"syslog":{"level":"6"}}
{"datetime":"2018-03-20T11:43:12.000+01:00","message":"Successfully bound to [/0:0:0:0:0:0:0:0:61791]","location":"akka.io.UdpListener","context":{},"syslog":{"level":"7"}}
{"datetime":"2018-03-20T11:43:12.002+01:00","message":"Bound to UDP address /0:0:0:0:0:0:0:0:61791","location":"ru.smslv.akka.dns.raw.DnsClient","context":{},"syslog":{"level":"7"}}
{"datetime":"2018-03-20T11:43:12.005+01:00","message":"Resolving _tpocreau-connectors-bot-builder-app-akka-management._tcp.service.consul (SRV)","location":"ru.smslv.akka.dns.raw.DnsClient","context":{},"syslog":{"level":"7"}}
{"datetime":"2018-03-20T11:43:12.032+01:00","message":"Message to /10.62.150.139:53: Message(2,<QUERY,RD,SUCCESS>,List(Question(_tpocreau-connectors-bot-builder-app-akka-management._tcp.service.consul,SRV,IN)),List(),List(),List())","location":"ru.smslv.akka.dns.raw.DnsClient","context":{},"syslog":{"level":"7"}}
{"datetime":"2018-03-20T11:43:12.147+01:00","message":"Received message from /10.62.150.139:53: ByteString(0, 2, -123, -128, 0, 1, 0, 2, 0, 0, 0, 2, 52, 95, 116, 112, 111, 99, 114, 101, 97, 117, 45, 99, 111, 110, 110, 101, 99, 116, 111, 114, 115, 45, 98, 111, 116, 45, 98, 117, 105, 108, 100, 101, 114, 45, 97, 112, 112, 45, 97, 107, 107, 97, 45, 109, 97, 110, 97, 103, 101, 109, 101, 110, 116, 4, 95, 116, 99, 112, 7, 115, 101, 114, 118, 105, 99, 101, 6, 99, 111, 110, 115, 117, 108, 0, 0, 33, 0, 1, -64, 12, 0, 33, 0, 1, 0, 0, 0, 0)... and [112] more","location":"ru.smslv.akka.dns.raw.DnsClient","context":{},"syslog":{"level":"7"}}
{"datetime":"2018-03-20T11:43:12.160+01:00","message":"Decoded: Message(2,<AN,QUERY,AA,RD,RA,SUCCESS>,Vector(Question(_tpocreau-connectors-bot-builder-app-akka-management._tcp.service.consul,SRV,IN)),Vector(SRVRecord(_tpocreau-connectors-bot-builder-app-akka-management._tcp.service.consul,0,1,1,26332,app-10-62-25-244.node.dev-eu_de_1.consul), SRVRecord(_tpocreau-connectors-bot-builder-app-akka-management._tcp.service.consul,0,1,1,21212,app-10-62-22-64.node.dev-eu_de_1.consul)),Vector(),Vector(ARecord(app-10-62-25-244.node.dev-eu_de_1.consul,0,/10.62.25.244), ARecord(app-10-62-22-64.node.dev-eu_de_1.consul,0,/10.62.22.64)))","location":"ru.smslv.akka.dns.raw.DnsClient","context":{},"syslog":{"level":"7"}}
Vector(SRVRecord(_tpocreau-connectors-bot-builder-app-akka-management._tcp.service.consul,0,1,1,26332,app-10-62-25-244.node.dev-eu_de_1.consul), SRVRecord(_tpocreau-connectors-bot-builder-app-akka-management._tcp.service.consul,0,1,1,21212,app-10-62-22-64.node.dev-eu_de_1.consul)) had size 2 instead of expected size 3
ScalaTestFailureLocation: akka.discovery.dns.DnsSrvServiceDiscoverySpec at (DnsSrvServiceDiscoverySpec.scala:22)
Expected :3
Actual :2
Second run
{"datetime":"2018-03-20T11:56:35.572+01:00","message":"Resolution request for _tpocreau-connectors-bot-builder-app-akka-management._tcp.service.consul from Actor[akka://MySpec/system/testActor-1#-2137169414]","location":"akka.io.SimpleDnsManager","context":{},"syslog":{"level":"7"}}
{"datetime":"2018-03-20T11:56:35.587+01:00","message":"Using the following DNS nameservers: /10.62.150.139:53","location":"akka.io.AsyncDnsResolver","context":{},"syslog":{"level":"6"}}
{"datetime":"2018-03-20T11:56:35.706+01:00","message":"Successfully bound to [/0:0:0:0:0:0:0:0:56692]","location":"akka.io.UdpListener","context":{},"syslog":{"level":"7"}}
{"datetime":"2018-03-20T11:56:35.708+01:00","message":"Bound to UDP address /0:0:0:0:0:0:0:0:56692","location":"ru.smslv.akka.dns.raw.DnsClient","context":{},"syslog":{"level":"7"}}
{"datetime":"2018-03-20T11:56:35.715+01:00","message":"Resolving _tpocreau-connectors-bot-builder-app-akka-management._tcp.service.consul (SRV)","location":"ru.smslv.akka.dns.raw.DnsClient","context":{},"syslog":{"level":"7"}}
{"datetime":"2018-03-20T11:56:35.752+01:00","message":"Message to /10.62.150.139:53: Message(2,<QUERY,RD,SUCCESS>,List(Question(_tpocreau-connectors-bot-builder-app-akka-management._tcp.service.consul,SRV,IN)),List(),List(),List())","location":"ru.smslv.akka.dns.raw.DnsClient","context":{},"syslog":{"level":"7"}}
{"datetime":"2018-03-20T11:56:35.804+01:00","message":"Received message from /10.62.150.139:53: ByteString(0, 2, -123, -128, 0, 1, 0, 2, 0, 0, 0, 2, 52, 95, 116, 112, 111, 99, 114, 101, 97, 117, 45, 99, 111, 110, 110, 101, 99, 116, 111, 114, 115, 45, 98, 111, 116, 45, 98, 117, 105, 108, 100, 101, 114, 45, 97, 112, 112, 45, 97, 107, 107, 97, 45, 109, 97, 110, 97, 103, 101, 109, 101, 110, 116, 4, 95, 116, 99, 112, 7, 115, 101, 114, 118, 105, 99, 101, 6, 99, 111, 110, 115, 117, 108, 0, 0, 33, 0, 1, -64, 12, 0, 33, 0, 1, 0, 0, 0, 0)... and [112] more","location":"ru.smslv.akka.dns.raw.DnsClient","context":{},"syslog":{"level":"7"}}
{"datetime":"2018-03-20T11:56:35.815+01:00","message":"Decoded: Message(2,<AN,QUERY,AA,RD,RA,SUCCESS>,Vector(Question(_tpocreau-connectors-bot-builder-app-akka-management._tcp.service.consul,SRV,IN)),Vector(SRVRecord(_tpocreau-connectors-bot-builder-app-akka-management._tcp.service.consul,0,1,1,21212,app-10-62-22-64.node.dev-eu_de_1.consul), SRVRecord(_tpocreau-connectors-bot-builder-app-akka-management._tcp.service.consul,0,1,1,30871,app-10-62-23-205.node.dev-eu_de_1.consul)),Vector(),Vector(ARecord(app-10-62-22-64.node.dev-eu_de_1.consul,0,/10.62.22.64), ARecord(app-10-62-23-205.node.dev-eu_de_1.consul,0,/10.62.23.205)))","location":"ru.smslv.akka.dns.raw.DnsClient","context":{},"syslog":{"level":"7"}}
Vector(SRVRecord(_tpocreau-connectors-bot-builder-app-akka-management._tcp.service.consul,0,1,1,21212,app-10-62-22-64.node.dev-eu_de_1.consul), SRVRecord(_tpocreau-connectors-bot-builder-app-akka-management._tcp.service.consul,0,1,1,30871,app-10-62-23-205.node.dev-eu_de_1.consul)) had size 2 instead of expected size 3
ScalaTestFailureLocation: akka.discovery.dns.DnsSrvServiceDiscoverySpec at (DnsSrvServiceDiscoverySpec.scala:22)
Expected :3
Actual :2
Here id the dig query
➜ ~ dig @10.62.150.139 -p 53 _tpocreau-connectors-bot-builder-app-akka-management._tcp.service.consul srv
; <<>> DiG 9.9.7-P3 <<>> @10.62.150.139 -p 53 _tpocreau-connectors-bot-builder-app-akka-management._tcp.service.consul srv
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 61810
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 4
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;_tpocreau-connectors-bot-builder-app-akka-management._tcp.service.consul. IN SRV
;; ANSWER SECTION:
_tpocreau-connectors-bot-builder-app-akka-management._tcp.service.consul. 0 IN SRV 1 1 26332 app-10-62-25-244.node.dev-eu_de_1.consul.
_tpocreau-connectors-bot-builder-app-akka-management._tcp.service.consul. 0 IN SRV 1 1 21212 app-10-62-22-64.node.dev-eu_de_1.consul.
_tpocreau-connectors-bot-builder-app-akka-management._tcp.service.consul. 0 IN SRV 1 1 30871 app-10-62-23-205.node.dev-eu_de_1.consul.
;; ADDITIONAL SECTION:
app-10-62-25-244.node.dev-eu_de_1.consul. 0 IN A 10.62.25.244
app-10-62-22-64.node.dev-eu_de_1.consul. 0 IN A 10.62.22.64
app-10-62-23-205.node.dev-eu_de_1.consul. 0 IN A 10.62.23.205
;; Query time: 21 msec
;; SERVER: 10.62.150.139#53(10.62.150.139)
;; WHEN: Tue Mar 20 11:49:17 CET 2018
;; MSG SIZE rcvd: 276
Here is the nslookup query
➜ ~ nslookup -q=SRV tpocreau-connectors-bot-builder-app-akka-management.service.consul 10.62.150.139
Server: 10.62.150.139
Address: 10.62.150.139#53
tpocreau-connectors-bot-builder-app-akka-management.service.consul service = 1 1 30871 app-10-62-23-205.node.dev-eu_de_1.consul.
tpocreau-connectors-bot-builder-app-akka-management.service.consul service = 1 1 21212 app-10-62-22-64.node.dev-eu_de_1.consul.