apache/druid · warning
Skipping deep storage directory kill: storage directory not
Error message
Skipping deep storage directory kill: storage directory not configured
What it means
constructHdfsDeletePath requires druid.storage.storageDirectory to be configured; if storageDirectory is null it logs this warning and returns null, skipping the directory kill. Without a configured base directory the killer cannot safely compute the absolute HDFS path to delete.
Source
Thrown at extensions-core/hdfs-storage/src/main/java/org/apache/druid/storage/hdfs/HdfsDataSegmentKiller.java:202
return null;
}
if (relativePath.charAt(0) == '/') {
log.warn("Skipping deep storage directory kill: relative path must not be absolute, got [%s]", relativePath);
return null;
}
if (relativePath.indexOf('\\') >= 0) {
log.warn("Skipping deep storage directory kill: backslash not allowed in path [%s]", relativePath);
return null;
}
for (String segment : StringUtils.splitPreserveAllTokens(relativePath, '/')) {
if (segment.isEmpty() || "..".equals(segment)) {
log.warn("Skipping deep storage directory kill: invalid path[%s]", relativePath);
return null;
}
}
if (storageDirectory == null) {
log.warn("Skipping deep storage directory kill: storage directory not configured");
return null;
}
final String hdfsRelativePath = relativePath.replace(':', '_');
final String storageDirectoryString = storageDirectory.toString();
final String sep = storageDirectoryString.endsWith(Path.SEPARATOR) ? "" : Path.SEPARATOR;
return new Path(storageDirectoryString + sep + hdfsRelativePath);
}
}
View on GitHub (pinned to 9b90983fd2)
Solutions
- Set druid.storage.storageDirectory in the common runtime properties (e.g. druid.storage.storageDirectory=/druid/segments)
- Restart the affected services so the config is picked up
- Verify HdfsDataSegmentPusher pushes to the same directory so killer and pusher agree
Example fix
// before (runtime.properties) druid.storage.type=hdfs // after druid.storage.type=hdfs druid.storage.storageDirectory=/druid/segments
Defensive patterns
Strategy: validation
Validate before calling
String dir = props.getProperty("druid.storage.storageDirectory");
if (dir == null || dir.isEmpty()) { throw new IllegalStateException("druid.storage.storageDirectory must be set when druid.storage.type=hdfs"); } Prevention
- Include druid.storage.storageDirectory in every runtime.properties template
- Add startup config checks for hdfs deep storage
- Keep common runtime properties identical across coordinator/historical/middleManager nodes
When it happens
Trigger: Running the kill task (or segment kill via coordinator) with the HDFS deep storage extension loaded but druid.storage.storageDirectory unset in the runtime properties.
Common situations: Fresh cluster setups where druid.storage.type=hdfs was set but the storageDirectory property was omitted, or different runtime property files between coordinator and historical nodes.
Understand the failure class
Background: "missing required config value" errors: why libraries refuse to start when a configuration key is empty, unset, or blank — this error's family across 48 libraries.
Related errors
- Segment path [%s] does not exist
- Skipping deep storage directory kill: relative path is empty
- Skipping deep storage directory kill: relative path must not
- Skipping deep storage directory kill: backslash not allowed
- Skipping deep storage directory kill: invalid path[%s]
AI-assisted analysis of apache/druid@9b90983fd2 (2026-09-07).
Data as JSON: /api/errors/9ff7820707b08ec1.
Report an issue: GitHub.