apache/druid · error · ParseException

Failed to initialize descriptor

Error message

Failed to initialize descriptor

What it means

Initialization failure wrapper in InlineDescriptorProtobufBytesDecoder.loadFileDescriptorSet: parsing the base64-decoded bytes into a FileDescriptorSet threw IOException, meaning the decoded bytes are not a valid protobuf descriptor set (corrupt or wrong content), so the inline descriptor cannot be initialized.

Solutions

  1. Regenerate the base64 descriptor from a valid .proto file and verify by parsing it with protoc.
  2. Confirm the base64 payload decodes to a FileDescriptorSet, not some other protobuf message.
  3. Re-encode without transformations that could corrupt the bytes.
Defensive patterns

Strategy: try-catch

When it happens

Trigger: Thrown at extensions-core/protobuf-extensions/src/main/java/org/apache/druid/data/input/protobuf/InlineDescriptorProtobufBytesDecoder.java:74 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/7bd8986c69b8fe04. Report an issue: GitHub.

Appendix: source

Thrown at extensions-core/protobuf-extensions/src/main/java/org/apache/druid/data/input/protobuf/InlineDescriptorProtobufBytesDecoder.java:74

  @Override
  protected DescriptorProtos.FileDescriptorSet loadFileDescriptorSet()
  {
    try {
      byte[] decodedDesc = StringUtils.decodeBase64String(descriptorString);

      final var descriptorSet = DescriptorProtos.FileDescriptorSet.parseFrom(decodedDesc);
      if (descriptorSet.getFileCount() == 0) {
        throw new ParseException(null, "No file descriptors found in the descriptor set");
      }

      return descriptorSet;
    }
    catch (IllegalArgumentException e) {
      throw new IAE("Descriptor string does not have valid Base64 encoding");
    }
    catch (IOException e) {
      throw new ParseException(descriptorString, e, "Failed to initialize descriptor");
    }
  }

  @Override
  public boolean equals(Object o)
  {
    if (this == o) {
      return true;
    }
    if (o == null || getClass() != o.getClass()) {
      return false;
    }
    if (!super.equals(o)) {
      return false;
    }
    InlineDescriptorProtobufBytesDecoder that = (InlineDescriptorProtobufBytesDecoder) o;
    return Objects.equals(getDescriptorString(), that.getDescriptorString());
  }

View on GitHub (pinned to 9b90983fd2)