apache/druid · error · ParseException

No message types found in the descriptor set

Error message

No message types found in the descriptor set

What it means

Descriptor-resolution failure in DescriptorBasedProtobufBytesDecoder.buildMessageDescriptor: the loaded FileDescriptorSet contains no message types at all, and no protoMessageType can be resolved from it, so the decoder cannot know which message schema to parse with.

Solutions

  1. Regenerate the descriptor set from a valid .proto file containing message definitions.
  2. Check that the descriptor file was not truncated or replaced with an empty file.
  3. Verify the protoc version used to produce the descriptor set.
Defensive patterns

Strategy: validation

When it happens

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

Appendix: source

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

  protected Descriptors.Descriptor buildMessageDescriptor(
      final DescriptorProtos.FileDescriptorSet descriptorSet
  )
  {
    try {
      // Build all descriptors with dependency resolution
      final var allDescriptors = new HashMap<String, Descriptors.FileDescriptor>();
      for (final var fileProto : descriptorSet.getFileList()) {
        buildFileDescriptor(fileProto, descriptorSet, allDescriptors);
      }

      // If protoMessageType has not been set, return the first message type found
      if (protoMessageType == null) {
        for (final var fileDescriptor : allDescriptors.values()) {
          if (!fileDescriptor.getMessageTypes().isEmpty()) {
            return fileDescriptor.getMessageTypes().get(0);
          }
        }
        throw new ParseException(null, "No message types found in the descriptor set");
      }

      // Otherwise, find the specific message type by name
      for (final var fileDescriptor : allDescriptors.values()) {
        final var desc = findMessageByName(fileDescriptor, protoMessageType);
        if (desc != null) {
          return desc;
        }
      }

      // Something went wrong... collect all available types for better error message
      final var availableTypes = new TreeSet<String>();
      for (final var fileDescriptor : allDescriptors.values()) {
        collectAvailableTypes(fileDescriptor, availableTypes);
      }

      throw new ParseException(
          null,

View on GitHub (pinned to 9b90983fd2)