{"record":{"id":"bfe9f60b1b2925e5","repo":"apache/hadoop","slug":"configured-value-for-dfs-datanode-cache-revocati","errorCode":null,"errorMessage":"configured value {}for dfs.datanode.cache.revocation.polling.ms is too high.  It must not be more than half of the value of dfs.datanode.cache.revocation.timeout.ms.  Reconfigure this to {}","messagePattern":"configured value (.+?)for dfs\\.datanode\\.cache\\.revocation\\.polling\\.ms is too high\\.  It must not be more than half of the value of dfs\\.datanode\\.cache\\.revocation\\.timeout\\.ms\\.  Reconfigure this to (.+?)","errorType":"exception","errorClass":"RuntimeException","httpStatus":null,"severity":"error","filePath":"hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/fsdataset/impl/FsDatasetCache.java","lineNumber":174,"sourceCode":"        .setNameFormat(\"FsDatasetCache-%d-\" + dataset.toString())\n        .build();\n    this.uncachingExecutor = new ThreadPoolExecutor(\n            0, 1,\n            60, TimeUnit.SECONDS,\n            new LinkedBlockingQueue<Runnable>(),\n            workerFactory);\n    this.uncachingExecutor.allowCoreThreadTimeOut(true);\n    this.deferredUncachingExecutor = new ScheduledThreadPoolExecutor(\n            1, workerFactory);\n    this.revocationMs = dataset.datanode.getConf().getLong(\n        DFS_DATANODE_CACHE_REVOCATION_TIMEOUT_MS,\n        DFS_DATANODE_CACHE_REVOCATION_TIMEOUT_MS_DEFAULT);\n    long confRevocationPollingMs = dataset.datanode.getConf().getLong(\n        DFS_DATANODE_CACHE_REVOCATION_POLLING_MS,\n        DFS_DATANODE_CACHE_REVOCATION_POLLING_MS_DEFAULT);\n    long minRevocationPollingMs = revocationMs / 2;\n    if (minRevocationPollingMs < confRevocationPollingMs) {\n      throw new RuntimeException(\"configured value \" +\n              confRevocationPollingMs + \"for \" +\n              DFS_DATANODE_CACHE_REVOCATION_POLLING_MS +\n              \" is too high.  It must not be more than half of the \" +\n              \"value of \" +  DFS_DATANODE_CACHE_REVOCATION_TIMEOUT_MS +\n              \".  Reconfigure this to \" + minRevocationPollingMs);\n    }\n    this.revocationPollingMs = confRevocationPollingMs;\n\n    this.cacheLoader = MappableBlockLoaderFactory.createCacheLoader(\n        this.getDnConf());\n    // Both lazy writer and read cache are sharing this statistics.\n    this.memCacheStats = cacheLoader.initialize(this.getDnConf());\n  }\n\n  /**\n   * For persistent memory cache, create cache subdirectory specified with\n   * blockPoolId to store cache data.\n   * Recover the status of cache in persistent memory, if any.","sourceCodeStart":156,"sourceCodeEnd":192,"githubUrl":"https://github.com/apache/hadoop/blob/2add9630210752f88ceb1bb74eb65e37bf41da8e/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/fsdataset/impl/FsDatasetCache.java#L156-L192","documentation":"Error \"configured value {}for dfs.datanode.cache.revocation.polling.ms is too high.  It must not be more than half of the value of dfs.datanode.cache.revocation.timeout.ms.  Reconfigure this to {}\" thrown in apache/hadoop.","triggerScenarios":"DataNode startup when dfs.datanode.cache.revocation.polling.ms is configured larger than half of dfs.datanode.cache.revocation.timeout.ms.","commonSituations":"See trigger scenarios.","solutions":["Set dfs.datanode.cache.revocation.polling.ms to a value no greater than half of dfs.datanode.cache.revocation.timeout.ms.","Alternatively increase dfs.datanode.cache.revocation.timeout.ms so the polling interval is proportionally smaller."],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"2add9630210752f88ceb1bb74eb65e37bf41da8e","analyzedAt":"2026-08-22T19:55:07.957Z","schemaVersion":2},"datasetVersion":"2026-08-22T20:17:22.307Z"}