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
- Regenerate the descriptor set from a valid .proto file containing message definitions.
- Check that the descriptor file was not truncated or replaced with an empty file.
- 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)