{"record":{"id":"31494423bba35d29","repo":"apache/druid","slug":"ignore-unparseable-druidservice-for-s-s","errorCode":null,"errorMessage":"Ignore unparseable DruidService for [%s]: %s","messagePattern":"Ignore unparseable DruidService for \\[(.+?)\\]: (.+?)","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"server/src/main/java/org/apache/druid/discovery/DiscoveryDruidNode.java","lineNumber":131,"sourceCode":"  @JsonCreator\n  private static DiscoveryDruidNode fromJson(\n      @JsonProperty(\"druidNode\") DruidNode druidNode,\n      @JsonProperty(\"nodeType\") NodeRole nodeRole,\n      @JsonProperty(\"services\") Map<String, Object> rawServices,\n      @JsonProperty(\"startTime\") DateTime startTime,\n      @JsonProperty(\"availableProcessors\") Integer availableProcessors,\n      @JsonProperty(\"totalMemory\") Long totalMemory,\n      @JacksonInject ObjectMapper jsonMapper\n  )\n  {\n    Map<String, DruidService> services = new HashMap<>();\n    if (rawServices != null && !rawServices.isEmpty()) {\n      for (Entry<String, Object> entry : rawServices.entrySet()) {\n        try {\n          services.put(entry.getKey(), jsonMapper.convertValue(entry.getValue(), DruidService.class));\n        }\n        catch (RuntimeException e) {\n          LOG.warn(\"Ignore unparseable DruidService for [%s]: %s\", druidNode.getHostAndPortToUse(), entry.getValue());\n        }\n      }\n    }\n    return new DiscoveryDruidNode(druidNode, nodeRole, services, startTime, availableProcessors, totalMemory);\n  }\n\n  @JsonProperty\n  public Map<String, DruidService> getServices()\n  {\n    return services;\n  }\n\n  /**\n   * Keeping the legacy name 'nodeType' property name for backward compatibility. When the project is updated to\n   * Jackson 2.9 it could be changed, see https://github.com/apache/druid/issues/7152.\n   */\n  @JsonProperty(\"nodeType\")\n  public NodeRole getNodeRole()","sourceCodeStart":113,"sourceCodeEnd":149,"githubUrl":"https://github.com/apache/druid/blob/9b90983fd291f26935af934383ce360473179e4d/server/src/main/java/org/apache/druid/discovery/DiscoveryDruidNode.java#L113-L149","documentation":"Log warning in DiscoveryDruidNode.fromJson. When deserializing a node announcement, any entry in the services map that cannot be converted to a DruidService via the JSON mapper is skipped, so the node is discovered but missing that service capability. This lets the cluster tolerate version skew where a newer node announces an unknown service type.","triggerScenarios":"A node in the cluster announces a service key whose JSON shape does not match any DruidService subtype (e.g. a service added in a newer Druid version, or corrupted/malformed service data in its announcement).","commonSituations":"Rolling upgrades where nodes of mixed Druid versions announce new service types; custom forks or extensions registering services not on the consuming node's classpath; manually edited or corrupted ZK data.","solutions":["Upgrade all cluster nodes to the same Druid version so service classes match.","Identify the offending service key in the log payload and check whether the reading node's extensions include the module providing it.","Check the announcing node's logs for errors serializing its services.","Ignore if the missing service is not needed by this watcher's listeners."],"exampleFix":null,"handlingStrategy":"validation","validationCode":"// Validate announced service JSON before use\nfor (var e : rawServices.entrySet()) {\n  try { mapper.convertValue(e.getValue(), DruidService.class); }\n  catch (RuntimeException ex) { log.warn(\"Skipping unparseable service %s\", e.getKey()); }\n}","typeGuard":null,"tryCatchPattern":"try {\n  DruidService svc = jsonMapper.convertValue(value, DruidService.class);\n} catch (RuntimeException e) {\n  log.warn(\"Ignoring unparseable service %s\", value);\n}","preventionTips":["Keep all cluster nodes on the same Druid version","Load extensions providing custom services on every consuming node","Watch for this warning during rolling upgrades — it signals version skew"],"tags":["json","serialization","version-skew"],"backgroundTag":"json-unmarshal-failed","analyzedSha":"9b90983fd291f26935af934383ce360473179e4d","analyzedAt":"2026-09-07T13:32:30.957Z","contentChangedAt":"2026-09-07T13:32:30.957Z","schemaVersion":2},"datasetVersion":"2026-09-14T11:17:12.474Z"}