apache/druid · error · ParseException
Descriptor not found at URL
Error message
Descriptor not found at URL: [%s]
What it means
Descriptor-fetch failure in FileBasedProtobufBytesDecoder.loadFileDescriptorSet: the descriptorFilePath was interpreted as a URL but opening the connection's input stream returned null or failed, so the descriptor could not be downloaded/read from that URL.
Solutions
- Verify the URL is reachable from the ingestion process (network, auth).
- Check that the URL serves the FileDescriptorSet content, not an error page.
- Place the descriptor on the classpath instead if remote access is unreliable.
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at extensions-core/protobuf-extensions/src/main/java/org/apache/druid/data/input/protobuf/FileBasedProtobufBytesDecoder.java:79 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/d0f1a31f49f24d03.
Report an issue: GitHub.
Appendix: source
Thrown at extensions-core/protobuf-extensions/src/main/java/org/apache/druid/data/input/protobuf/FileBasedProtobufBytesDecoder.java:79
InputStream fin;
DescriptorProtos.FileDescriptorSet descriptorSet;
try {
fin = this.getClass().getClassLoader().getResourceAsStream(descriptorFilePath);
if (fin == null) {
URL url;
try {
url = new URL(descriptorFilePath);
}
catch (MalformedURLException e) {
throw new ParseException(
descriptorFilePath,
e,
"Descriptor not found in class path or malformed URL: [%s]", descriptorFilePath
);
}
try (InputStream urlIn = url.openConnection().getInputStream()) {
if (urlIn == null) {
throw new ParseException(
descriptorFilePath,
"Descriptor not found at URL: [%s]", descriptorFilePath
);
}
descriptorSet = DescriptorProtos.FileDescriptorSet.parseFrom(urlIn);
}
} else {
descriptorSet = DescriptorProtos.FileDescriptorSet.parseFrom(fin);
}
if (descriptorSet.getFileCount() == 0) {
throw new ParseException(null, "No file descriptors found in the descriptor set");
}
return descriptorSet;
}
catch (IOException e) {
throw new ParseException(descriptorFilePath, e, "Failed to initialize descriptor at [%s]", descriptorFilePath);View on GitHub (pinned to 9b90983fd2)