apache/druid · error · IllegalStateException

Announcer not started

Error message

Announcer not started

What it means

announce() requires the announcer lifecycle to have finished starting; the awaitStarted(1s) timed out, so the node registration is refused rather than silently dropped while the component is still starting up or already stopped.

Solutions

  1. Ensure start() completed before announcing; check startup ordering and any earlier startup errors.
  2. Fix whatever blocked the lifecycle start so the await succeeds.
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at extensions-contrib/consul-extensions/src/main/java/org/apache/druid/consul/discovery/ConsulDruidNodeAnnouncer.java:145 when the library encounters an invalid state.

Common situations: See trigger scenarios.


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

Appendix: source

Thrown at extensions-contrib/consul-extensions/src/main/java/org/apache/druid/consul/discovery/ConsulDruidNodeAnnouncer.java:145

    for (String serviceId : announcedNodes.keySet()) {
      try {
        consulApiClient.deregisterService(serviceId);
      }
      catch (Exception e) {
        LOGGER.error(e, "Failed to deregister service [%s] during shutdown", serviceId);
      }
    }

    announcedNodes.clear();
    lifecycleLock.exitStop();
  }

  @Override
  public void announce(DiscoveryDruidNode discoveryDruidNode)
  {
    if (!lifecycleLock.awaitStarted(1, TimeUnit.SECONDS)) {
      throw new ISE("Announcer not started");
    }

    String serviceId = ConsulServiceIds.serviceId(config, discoveryDruidNode);

    // Prevent concurrent duplicate registrations for the same serviceId
    if (!registeringNodes.add(serviceId)) {
      LOGGER.warn("Registration already in progress for serviceId [%s]", serviceId);
      return;
    }

    try {
      // If already announced, skip duplicate registration
      if (announcedNodes.containsKey(serviceId)) {
        LOGGER.warn("ServiceId [%s] already announced, skipping", serviceId);
        return;
      }

      long registerStart = System.nanoTime();

View on GitHub (pinned to 9b90983fd2)