apache/druid · warning

Call returned null IP for

Error message

Call returned null IP for %s, skipping

What it means

GceAutoScaler resolves GCE instance names to IPs when scaling out. When the GCE API lookup returns null or the literal string "null" for an instance, the scaler logs this warning and skips the instance instead of adding a bogus 'null' host that callers would wait on for maxScalingDuration.

Solutions

  1. Wait and retry: the instance may still be provisioning; verify the instance reaches RUNNING state with an assigned IP in the GCE console.
  2. If instances are intentionally internal-only, configure the autoScaler to read the internal network interface IP instead of the external access config.
  3. Check that the instance's network interface has an access config (external IP) or that the lookup code targets the correct NIC.
  4. Investigate why the GCE API returned the literal "null" string — often an outdated metadata/API response; update the GCE client library version.

Example fix

// before
if (ip != null && !"null".equals(ip)) {
  instanceIps.add(ip);
}
// after
String ip = getInternalIp(instance); // prefer NIC networkInterfaces[0].networkIP
if (ip != null && !"null".equals(ip) && !ip.isEmpty()) {
  instanceIps.add(ip);
} else {
  log.warnEvents("Instance %s has no usable IP yet; will retry next poll", instance.getName());
}
Defensive patterns

Strategy: retry

Validate before calling

Instance instance = compute.instances().get(project, zone, name).execute();
boolean hasIp = instance.getNetworkInterfaces().stream()
    .anyMatch(nic -> nic.getAccessConfigs() != null && nic.getAccessConfigs().stream()
        .anyMatch(ac -> ac.getNatIP() != null));

Prevention

When it happens

Trigger: Calling idToIpLookup (via ips1/ips3) for a GCE instance that has no external/internal IP yet: instance still provisioning, instance terminated while listing, or the network interface access config missing (no external IP assigned).

Common situations: Autoscaling during rapid scale-up where new workers have not finished provisioning; GCE instances launched without external IPs on networks relying on internal-only addressing; transient GCE API inconsistencies during concurrent termination.

Understand the failure class

Background: EmptyResultError / "no results found": when an API or scraper succeeds but returns zero rows — this error's family across 9 libraries.

Related errors


AI-assisted analysis of apache/druid@9b90983fd2 (2026-09-07). Data as JSON: /api/errors/630a4203c3407e6c. Report an issue: GitHub.

Appendix: source

Thrown at extensions-contrib/gce-extensions/src/main/java/org/apache/druid/indexing/overlord/autoscaling/gce/GceAutoScaler.java:479

      List<String> instanceIps = new ArrayList<>();
      InstanceList response;
      do {
        response = request.execute();
        if (response.getItems() == null) {
          continue;
        }
        for (Instance instance : response.getItems()) {
          // Assuming that every server has at least one network interface...
          String ip = instance.getNetworkInterfaces().get(0).getNetworkIP();
          // ...even though some IPs are reported as null on the spot but later they are ok,
          // so we skip the ones that are null. fear not, they are picked up later this just
          // prevents to have a machine called 'null' around which makes the caller wait for
          // it for maxScalingDuration time before doing anything else
          if (ip != null && !"null".equals(ip)) {
            instanceIps.add(ip);
          } else {
            // log and skip it
            log.warn("Call returned null IP for %s, skipping", instance.getName());
          }
        }
        request.setPageToken(response.getNextPageToken());
      } while (response.getNextPageToken() != null);

      return instanceIps;
    }
    catch (Exception e) {
      log.error(e, "Unable to convert IDs to IPs.");
    }

    return new ArrayList<>();
  }

  @Override
  public String toString()
  {
    return "gceAutoScaler={" +

View on GitHub (pinned to 9b90983fd2)