apache/hadoop · error · UnsupportedActionException
Cannot request to satisfy storage policy when storage policy
Error message
Cannot request to satisfy storage policy when storage policy satisfier feature has been disabled by admin. Seek for an admin help to enable it or use Mover tool.
What it means
satisfyStoragePolicy calls validateStoragePolicySatisfy first. If blockManager.getSPSManager() is null — the StoragePolicySatisfier was never instantiated because dfs.storage.policy.satisfier.mode is unset or 'none' — the request dies with UnsupportedActionException pointing to admin enablement or the Mover tool.
Source
Thrown at hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java:2624
dir, blockManager, src, logRetryCache);
} finally {
writeUnlock(RwLockMode.FS, operationName,
getLockReportInfoSupplier(src, null, auditStat));
}
} catch (AccessControlException e) {
logAuditEvent(false, operationName, src);
throw e;
}
getEditLog().logSync();
logAuditEvent(true, operationName, src, null, auditStat);
}
private void validateStoragePolicySatisfy()
throws UnsupportedActionException, IOException {
// checks sps status
boolean disabled = (blockManager.getSPSManager() == null);
if (disabled) {
throw new UnsupportedActionException(
"Cannot request to satisfy storage policy "
+ "when storage policy satisfier feature has been disabled"
+ " by admin. Seek for an admin help to enable it "
+ "or use Mover tool.");
}
// checks SPS Q has many outstanding requests. It will throw IOException if
// the limit exceeds.
blockManager.getSPSManager().verifyOutstandingPathQLimit();
}
/**
* unset storage policy set for a given file or a directory.
*
* @param src file/directory path
* @throws IOException
*/
void unsetStoragePolicy(String src) throws IOException {
final String operationName = "unsetStoragePolicy";View on GitHub (pinned to 2add963021)
Solutions
- Enable the satisfier: set dfs.storage.policy.satisfier.mode=external (or internal) in the NameNode's hdfs-site.xml, restart NameNodes, and for external mode deploy the external SPS service
- Keep SPS off and move blocks per policy with `hdfs mover -p <path>` instead
- Also confirm dfs.storage.policy.enabled=true, otherwise the earlier checkStoragePolicyEnabled check rejects the call first
Example fix
# before hdfs dfsadmin -satisfyStoragePolicy -path /data # UnsupportedActionException # after: hdfs-site.xml on NameNodes: dfs.storage.policy.satisfier.mode=external, restart NNs, deploy external SPS # immediate fallback without SPS: hdfs mover -p /data
Defensive patterns
Strategy: validation
Validate before calling
String mode = conf.get("dfs.storage.policy.satisfier.mode", "none");
if ("none".equals(mode) || mode == null) { useMoverInstead(path); } Try / catch
catch (UnsupportedActionException e) { if (e.getMessage() != null && e.getMessage().contains("storage policy satisfier")) useMoverInstead(path); else throw e; } Prevention
- Treat satisfyStoragePolicy as opt-in: verify the satisfier mode before calling
- Keep a Mover-based fallback for tiering when SPS is not deployed
When it happens
Trigger: `hdfs dfsadmin -satisfyStoragePolicy -path <p>` (ClientProtocol.satisfyStoragePolicy) on a NameNode where dfs.storage.policy.satisfier.mode is not set to 'internal' or 'external'.
Common situations: SPS ships disabled/experimental by default; operators follow satisfyStoragePolicy docs without enabling the mode; external-mode clusters where the external SPS service was never deployed; storage.policy.enabled=true but satisfier mode left empty.
Related errors
- For enabling or disabling storage policy satisfier, must pas
- Enabling or disabling storage policy satisfier service on {s
- Can not create a Path from a null string
- Can not create a Path from an empty string
- no SharedFileDescriptorFactory paths were configured.
AI-assisted analysis of apache/hadoop@2add963021 (2026-08-22).
Data as JSON: /api/errors/7dbbb36e84900801.
Report an issue: GitHub.