{"record":{"id":"35eeec96887afd75","repo":"apache/druid","slug":"announcer-not-started","errorCode":null,"errorMessage":"Announcer not started","messagePattern":"Announcer not started","errorType":"exception","errorClass":"IllegalStateException","httpStatus":null,"severity":"error","filePath":"extensions-contrib/consul-extensions/src/main/java/org/apache/druid/consul/discovery/ConsulDruidNodeAnnouncer.java","lineNumber":145,"sourceCode":"\n    for (String serviceId : announcedNodes.keySet()) {\n      try {\n        consulApiClient.deregisterService(serviceId);\n      }\n      catch (Exception e) {\n        LOGGER.error(e, \"Failed to deregister service [%s] during shutdown\", serviceId);\n      }\n    }\n\n    announcedNodes.clear();\n    lifecycleLock.exitStop();\n  }\n\n  @Override\n  public void announce(DiscoveryDruidNode discoveryDruidNode)\n  {\n    if (!lifecycleLock.awaitStarted(1, TimeUnit.SECONDS)) {\n      throw new ISE(\"Announcer not started\");\n    }\n\n    String serviceId = ConsulServiceIds.serviceId(config, discoveryDruidNode);\n\n    // Prevent concurrent duplicate registrations for the same serviceId\n    if (!registeringNodes.add(serviceId)) {\n      LOGGER.warn(\"Registration already in progress for serviceId [%s]\", serviceId);\n      return;\n    }\n\n    try {\n      // If already announced, skip duplicate registration\n      if (announcedNodes.containsKey(serviceId)) {\n        LOGGER.warn(\"ServiceId [%s] already announced, skipping\", serviceId);\n        return;\n      }\n\n      long registerStart = System.nanoTime();","sourceCodeStart":127,"sourceCodeEnd":163,"githubUrl":"https://github.com/apache/druid/blob/9b90983fd291f26935af934383ce360473179e4d/extensions-contrib/consul-extensions/src/main/java/org/apache/druid/consul/discovery/ConsulDruidNodeAnnouncer.java#L127-L163","documentation":"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.","triggerScenarios":"Thrown at extensions-contrib/consul-extensions/src/main/java/org/apache/druid/consul/discovery/ConsulDruidNodeAnnouncer.java:145 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Ensure start() completed before announcing; check startup ordering and any earlier startup errors.","Fix whatever blocked the lifecycle start so the await succeeds."],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"9b90983fd291f26935af934383ce360473179e4d","analyzedAt":"2026-09-07T13:32:30.957Z","contentChangedAt":"2026-09-07T13:32:30.957Z","schemaVersion":2},"datasetVersion":"2026-09-17T15:17:12.973Z"}