apache/druid · info

lookup management on node

Error message

lookup management on node [%s:%s:%s] interrupted.

What it means

LookupCoordinatorManager's lookupManagementLoop submits doLookupManagementOnNode to an executor per node; if that work is interrupted while talking to the node, it logs this warning and returns null (the node's update is skipped for this round). It means the per-node lookup refresh did not complete due to interruption, not a lookup error.

Solutions

  1. If during shutdown, ignore — the next leader/run re-propagates lookups
  2. If lookups end up inconsistent, re-trigger lookup management via the lookup coordinator endpoints
  3. Check that the lookup management thread pool is not being shut down prematurely
  4. Inspect node HTTP endpoints (GET /druid/v1/lookups) to confirm actual state
Defensive patterns

Strategy: retry

Validate before calling

// verify node lookup endpoints before pushing lookups
curl -f http://host:port/druid/v1/lookups/status

Try / catch

try {
  lookupCoordinatorManager.updateLookups(...);
} catch (Exception e) {
  // interrupted nodes are skipped; re-trigger to converge
  retryUpdateWithBackoff();
}

Prevention

When it happens

Trigger: The executor thread running doLookupManagementOnNode (HTTP GET/POST to a historical/broker lookup endpoint) is interrupted — e.g. the lookup management loop is shut down while requests are in flight, or the HTTP client call is interrupted.

Common situations: Coordinator losing leadership or shutting down mid-lookup-propagation; lookup updates on many nodes while the process is being stopped; thread pool shutdown racing with in-flight node calls.

Related errors


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

Appendix: source

Thrown at server/src/main/java/org/apache/druid/server/lookup/cache/LookupCoordinatorManager.java:590

        final Map<String, LookupExtractorFactoryMapContainer> tierLookups = allLookupTiers.getOrDefault(tier, ImmutableMap.of());
        for (final HostAndPortWithScheme node : lookupNodeDiscovery.getNodesInTier(tier)) {

          LOG.debug(
              "Starting lookup mgmt for tier [%s] and host [%s:%s:%s].",
              tier,
              node.getScheme(),
              node.getHostText(),
              node.getPort()
          );

          futures.add(
              executorService.submit(
                  () -> {
                    try {
                      return new AbstractMap.SimpleImmutableEntry<>(node.getHostAndPort(), doLookupManagementOnNode(node, tierLookups));
                    }
                    catch (InterruptedException ex) {
                      LOG.warn(ex, "lookup management on node [%s:%s:%s] interrupted.", node.getScheme(), node.getHostText(), node.getPort());
                      return null;
                    }
                    catch (Exception ex) {
                      LOG.makeAlert(
                          ex,
                          "Failed to finish lookup management on node [%s:%s:%s]",
                          node.getScheme(),
                          node.getHostText(),
                          node.getPort()
                      ).emit();
                      return null;
                    }
                  }
              )
          );
        }
      }

View on GitHub (pinned to 9b90983fd2)