aeron-io/aeron · error · AeronEvent
could not re-resolve: control=
Error message
could not re-resolve: control={control} What it means
Thrown during dynamic re-resolution of an existing channel's control address (MDC control param). The driver scheduled a DNS re-resolution, got a result back, but the address is still unresolved — the hostname cannot be resolved to an IP at re-resolution time.
Solutions
- Fix DNS so the control hostname resolves (dig/nslookup the name from the driver host).
- Replace the hostname in the control= parameter with a literal IP to avoid re-resolution.
- Configure a custom NameResolver (io.aeron.driver.NameResolver) with a resilient/ cached resolver.
- Catch AeronEvent and fall back to the previous address or restart the endpoint once DNS recovers.
Example fix
// before
Aeron.connect(new Aeron.Context()).addPublication("aeron:udp?control=mdc-host-1:40456", streamId);
// after
Aeron.connect(new Aeron.Context()).addPublication("aeron:udp?control=192.168.1.10:40456", streamId); // literal IP avoids re-resolution Defensive patterns
Strategy: retry
Validate before calling
InetSocketAddress addr = new InetSocketAddress(controlHost, port);
if (addr.isUnresolved()) { /* fix DNS or use IP before creating channel */ } Try / catch
try {
configureControlAddress(control);
} catch (AeronEvent e) {
if (e.getMessage().startsWith("could not re-resolve: control=")) {
backoffAndRetryDnsResolution();
} else { throw e; }
} Prevention
- Prefer IP literals for control addresses in production
- Monitor DNS health on driver hosts
- Install a caching/custom NameResolver for resilience
When it happens
Trigger: A channel endpoint whose control-mode=manual/dynamic URI contains a hostname in the control= parameter; the driver's address resolver re-resolve task runs and the underlying resolver (DNS, NameResolver) returns an unresolved InetSocketAddress.
Common situations: DNS outage or resolver misconfiguration while a long-lived publication/subscription is active; hostname removed from /etc/hosts or DNS zone; using a name the JVM resolver cannot resolve in the current network (e.g. container networking changes).
Understand the failure class
Background: Request timed out: what client-side request timeouts mean across libraries (Request timed out, TIMED_OUT, APITimeoutError) — this error's family across 39 libraries.
Related errors
- could not re-resolve: endpoint=
- could not resolve endpoint address:
- could not resolve control address:
- failed to fetch remote recording descriptor
- failed to resolve subscription endpoint: channel=" +…
AI-assisted analysis of aeron-io/aeron@6d60124e15 (2026-09-12).
Data as JSON: /api/errors/1daa75137827e953.
Report an issue: GitHub.
Appendix: source
Thrown at aeron-driver/src/main/java/io/aeron/driver/DriverConductor.java:3840
final UdpChannel udpChannel,
final ReceiveChannelEndpoint channelEndpoint,
final InetSocketAddress address)
{
resolvedAddressResult = nativeResourceAgentProxy.reResolveAddress(control, MDC_CONTROL_PARAM_NAME);
this.control = control;
this.udpChannel = udpChannel;
this.channelEndpoint = channelEndpoint;
this.address = address;
}
boolean execute()
{
final InetSocketAddress newAddress = resolvedAddressResult.get();
if (null != newAddress)
{
if (newAddress.isUnresolved())
{
throw new AeronEvent("could not re-resolve: " + MDC_CONTROL_PARAM_NAME + "=" + control);
}
if (ChannelEndpointStatus.ACTIVE == channelEndpoint.status())
{
if (!Objects.equals(address, newAddress))
{
receiverProxy.onResolutionChange(channelEndpoint, udpChannel, newAddress);
}
}
return true;
}
return false;
}
}
private final class ReResolveEndpointAddress extends Command
{
private final String endpoint;View on GitHub (pinned to 6d60124e15)