Skip to content

[resolver/dns] Allow configuration of dns resolution polling interval #3170

Closed
@APTy

Description

@APTy

Use case(s) - what problem will this feature solve?

In cases where DNS is used by workloads for peer discovery, it may be necessary to make dynamic changes to allow traffic to flow from one failure domain to another. In such cases, the gRPC default polling interval of 30 minutes is too slow to allow for flexible traffic movement - it could instead be configurable for users who require more precise control over their traffic flow.

Proposed Solution

Extend resolver.BuildOption to include additional configuration.

type BuildOption struct {
    ...

    // PollingInterval is the minimum amount of time to wait
    // between name resolution attempts.
    PollingInterval time.Duration
}

This creates an implicit contract for Builder implementations to respect the provided configuration. Since I'm not familiar with what implementations of Builder exist beyond DNS, I'll defer to the maintainers to decide whether this is a good idea.

The usage would need to include some way to bubble this configuration up to the Client, for example:

func WithResolverPollingInterval(time.Duration) DialOption

This isn't a great API, but 🤷‍♂I'm open to suggestions.

Alternatives Considered

Extend internal/resolver/dns to expose additional constructor options and re-export them in resolver/dns.

type BuilderOption func(*dnsBuilder)

func WithPollingInterval(time.Duration)
func WithScheme(string)

func NewBuilder(...BuilderOption) resolver.Builder

Usage would be something like:

resolver.Register(dns.NewBuilder(
    dns.WithScheme("customdns"),
    dns.WithPollingInterval(time.Minute),
))

This approach is kind of nice because the polling configuration can be isolated to the dns package. On the other hand, users must Register() the custom Builder inside an init() function, which generally occurs before any configuration can been loaded, which creates a bit of an awkward API surface.

Thanks for your consideration!

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type: FeatureNew features or improvements in behavior

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions