prestodb/presto · error · PinotException
PINOT_UNABLE_TO_FIND_INSTANCE
PINOT_UNABLE_TO_FIND_INSTANCE
Error message
Error when fetching instance configs for %s
What it means
Thrown when fetching a Pinot instance's configuration JSON from the controller (GET on the instance API) fails for any reason. The connector needs the instance config (e.g. server ports) to talk to a Pinot server, so any HTTP/parse failure becomes PINOT_UNABLE_TO_FIND_INSTANCE.
Source
Thrown at presto-pinot-toolkit/src/main/java/com/facebook/presto/pinot/PinotClusterInfoFetcher.java:607
{
return tags;
}
@JsonProperty
public List<String> getPools()
{
return pools;
}
}
public Instance getInstance(String instanceName)
{
try {
String responseBody = sendHttpGetToController(String.format(INSTANCE_API_TEMPLATE, instanceName));
return instanceJsonCodec.fromJson(responseBody);
}
catch (Exception throwable) {
throw new PinotException(PINOT_UNABLE_TO_FIND_INSTANCE, Optional.empty(), "Error when fetching instance configs for " + instanceName, throwable);
}
}
// Fetch grpc port from Pinot instance config.
public int getGrpcPort(String serverInstance)
{
try {
return instanceConfigCache.get(serverInstance).getGrpcPort();
}
catch (ExecutionException e) {
Throwable cause = e.getCause();
if (cause instanceof PinotException) {
throw (PinotException) cause;
}
throw new PinotException(
PINOT_UNABLE_TO_FIND_INSTANCE,
Optional.empty(),
"Error when getting instance config for " + serverInstance,View on GitHub (pinned to 55bb57d202)
Solutions
- Check the cause in logs: 404 means the instance no longer exists in Pinot — refresh routing/instance caches or restart the query
- Verify the controller is reachable with curl http://<controller>/v2/instances
- Confirm the instance still exists in ZooKeeper (Helix) and Pinot cluster is healthy
- Clear stale Presto caches (instance config cache) by restarting the connector/coordinator
Defensive patterns
Strategy: retry
Validate before calling
// Verify the instance exists on the controller curl -sf http://<controller>:9000/v2/instances | jq '.instances'
Try / catch
try {
Table result = session.execute(...);
} catch (PinotException e) {
if (e.getMessage().startsWith("Error when fetching instance configs")) {
// retry after controller recovery; check cause for 404 vs network
}
throw e;
} Prevention
- Keep Pinot cluster membership stable; avoid dropping instances mid-query
- Monitor controller availability and HTTP error rates
- Refresh routing/instance caches after Pinot scale-in events
- Check ZooKeeper (Helix) consistency when instances are reported missing
When it happens
Trigger: sendHttpGetToController(INSTANCE_API_TEMPLATE) throws — 404 for unknown instance, controller unreachable, timeout, or non-parseable instance JSON — inside getInstance.
Common situations: Stale routing table referencing a server instance that was decommissioned; controller restarted with different instance IDs; network/firewall blocking controller access; typo in instance name when using grpc config lookups.
Related errors
- PINOT_HTTP_ERROR
- PINOT_UNEXPECTED_RESPONSE
- PINOT_UNCLASSIFIED_ERROR
- PINOT_UNSUPPORTED_COLUMN_TYPE
- PINOT_UNEXPECTED_RESPONSE
AI-assisted analysis of prestodb/presto@55bb57d202 (2026-09-04).
Data as JSON: /api/errors/fc875cf12cc8c52c.
Report an issue: GitHub.