Merge pull request #376 from awheeler/master

agent: Adding support for enabling the DNS truncate flag for UDP queries.
This commit is contained in:
Armon Dadgar 2014-09-30 13:02:22 -07:00
commit ccc63d6110
3 changed files with 18 additions and 0 deletions

View File

@ -58,6 +58,13 @@ type DNSConfig struct {
// only the leader. // only the leader.
AllowStale bool `mapstructure:"allow_stale"` AllowStale bool `mapstructure:"allow_stale"`
// EnableTruncate is used to enable setting the truncate
// flag for UDP DNS queries. This allows unmodified
// clients to re-query the consul server using TCP
// when the total number of records exceeds the number
// returned by default for UDP.
EnableTruncate bool `mapstructure:"enable_truncate"`
// MaxStale is used to bound how stale of a result is // MaxStale is used to bound how stale of a result is
// accepted for a DNS lookup. This can be used with // accepted for a DNS lookup. This can be used with
// AllowStale to limit how old of a value is served up. // AllowStale to limit how old of a value is served up.
@ -688,6 +695,9 @@ func MergeConfig(a, b *Config) *Config {
if b.DNSConfig.AllowStale { if b.DNSConfig.AllowStale {
result.DNSConfig.AllowStale = true result.DNSConfig.AllowStale = true
} }
if b.DNSConfig.EnableTruncate {
result.DNSConfig.EnableTruncate = true
}
if b.DNSConfig.MaxStale != 0 { if b.DNSConfig.MaxStale != 0 {
result.DNSConfig.MaxStale = b.DNSConfig.MaxStale result.DNSConfig.MaxStale = b.DNSConfig.MaxStale
} }

View File

@ -471,6 +471,10 @@ RPC:
// If the network is not TCP, restrict the number of responses // If the network is not TCP, restrict the number of responses
if network != "tcp" && len(out.Nodes) > maxServiceResponses { if network != "tcp" && len(out.Nodes) > maxServiceResponses {
out.Nodes = out.Nodes[:maxServiceResponses] out.Nodes = out.Nodes[:maxServiceResponses]
// Flag that there are more records to return in the UDP response
if d.config.EnableTruncate == true {
resp.Truncated = true
}
} }
// Add various responses depending on the request // Add various responses depending on the request

View File

@ -266,6 +266,10 @@ definitions support being updated during a reload.
there is no specific policy available for a service. By default, all services are served there is no specific policy available for a service. By default, all services are served
with a 0 TTL value. Setting this enables DNS caching. with a 0 TTL value. Setting this enables DNS caching.
* `enable_truncate` - If set to true, a UDP DNS query that would return more than 3 records
will set the truncated flag, indicating to clients that they should re-query using TCP to
get the full set of records.
* `domain` - By default, Consul responds to DNS queries in the "consul." domain. * `domain` - By default, Consul responds to DNS queries in the "consul." domain.
This flag can be used to change that domain. All queries in this domain are assumed This flag can be used to change that domain. All queries in this domain are assumed
to be handled by Consul, and will not be recursively resolved. to be handled by Consul, and will not be recursively resolved.