{"record":{"id":"ecd3a40392f95d45","repo":"prestodb/presto","slug":"unrecognized-memory-pool","errorCode":null,"errorMessage":"Unrecognized memory pool: ","messagePattern":"Unrecognized memory pool: ","errorType":"exception","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"presto-main-base/src/main/java/com/facebook/presto/resourcemanager/ResourceManagerClusterStateProvider.java","lineNumber":315,"sourceCode":"                .collect(toImmutableList());\n\n        int queriesAssignedToGeneralPool = 0;\n        int queriesAssignedToReservedPool = 0;\n        Query largestGeneralPoolQuery = null;\n        for (CoordinatorQueriesState nodeQueryState : nodeQueryStates.values()) {\n            for (Query query : nodeQueryState.getActiveQueries()) {\n                MemoryPoolId memoryPool = query.getBasicQueryInfo().getMemoryPool();\n                if (GENERAL_POOL.equals(memoryPool)) {\n                    queriesAssignedToGeneralPool = Math.incrementExact(queriesAssignedToGeneralPool);\n                    if (!resourceOvercommit(query.getBasicQueryInfo().getSession().toSession(sessionPropertyManager))) {\n                        largestGeneralPoolQuery = getLargestMemoryQuery(Optional.ofNullable(largestGeneralPoolQuery), query);\n                    }\n                }\n                else if (RESERVED_POOL.equals(memoryPool)) {\n                    queriesAssignedToReservedPool = Math.incrementExact(queriesAssignedToReservedPool);\n                }\n                else {\n                    throw new IllegalArgumentException(\"Unrecognized memory pool: \" + memoryPool);\n                }\n            }\n        }\n\n        List<QueryId> runningQueries = nodeQueryStates.values().stream()\n                .map(CoordinatorQueriesState::getActiveQueries)\n                .flatMap(Collection::stream)\n                .filter(query -> query.getBasicQueryInfo().getState() == RUNNING)\n                .map(Query::getQueryId)\n                .collect(toImmutableList());\n\n        ImmutableMap.Builder<MemoryPoolId, ClusterMemoryPoolInfo> memoryPoolInfos = ImmutableMap.builder();\n        ClusterMemoryPool pool = new ClusterMemoryPool(GENERAL_POOL);\n        pool.update(memoryInfos, queriesAssignedToGeneralPool);\n        ClusterMemoryPoolInfo clusterInfo = pool.getClusterInfo(Optional.ofNullable(largestGeneralPoolQuery).map(Query::getQueryId), Optional.ofNullable(runningQueries));\n        memoryPoolInfos.put(GENERAL_POOL, clusterInfo);\n        if (isReservedPoolEnabled) {\n            pool = new ClusterMemoryPool(RESERVED_POOL);","sourceCodeStart":297,"sourceCodeEnd":333,"githubUrl":"https://github.com/prestodb/presto/blob/55bb57d202de3b926896fa966c2c4a44c779634e/presto-main-base/src/main/java/com/facebook/presto/resourcemanager/ResourceManagerClusterStateProvider.java#L297-L333","documentation":"ResourceManagerClusterStateProvider aggregates per-node memory usage by classifying each reported memory pool as GENERAL_POOL or RESERVED_POOL. When a node reports a pool ID matching neither, getClusterMemoryPoolInfoInternal throws IllegalArgumentException. This indicates coordinator/resource-manager configuration mismatch (e.g. a custom pool or outdated node config).","triggerScenarios":"A Presto node reports a memory pool whose ID is neither the configured general pool nor the reserved pool — typically after changing memory pool configuration on coordinators/workers inconsistently, or with custom pool plugins.","commonSituations":"Mixed-version clusters during rolling upgrades; one worker with a custom memory-pool config while the resource manager expects only default pools; stale node metadata after config changes.","solutions":["Align memory pool configuration across all coordinators, workers, and the resource manager (query.max-memory-per-node / memory-pool settings).","Restart/redeploy mismatched nodes so every worker reports only GENERAL_POOL and RESERVED_POOL.","If custom pools are in use, update ResourceManagerClusterStateProvider handling to recognize them.","Check for version skew: upgrade all nodes to the same Presto version."],"exampleFix":"// before (worker config.properties, mismatched)\nmemory.pools=custom\n// after\nmemory.pools=general,reserved","handlingStrategy":"validation","validationCode":"# pre-deploy check: every node's config reports only general/reserved pools\ngrep -E 'memory' config.properties  # ensure no custom pools unless the build supports them","typeGuard":null,"tryCatchPattern":"try {\n    poolInfo = provider.getClusterMemoryPoolInfo();\n} catch (IllegalArgumentException e) {\n    if (e.getMessage().startsWith(\"Unrecognized memory pool:\")) {\n        log.error(\"Node reports unknown pool {}; fix memory pool config cluster-wide\", e.getMessage());\n    }\n    throw e;\n}","preventionTips":["Keep memory-pool configuration identical across all workers, coordinators, and the resource manager.","Avoid mixed Presto versions during rolling upgrades; drain old nodes.","Only use custom memory pools if your build's resource manager recognizes them.","Monitor node heartbeats after config changes to catch stale nodes early."],"tags":["memory-management","resource-manager","configuration"],"backgroundTag":"unrecognized-memory-pool","analyzedSha":"55bb57d202de3b926896fa966c2c4a44c779634e","analyzedAt":"2026-09-04T12:50:26.162Z","contentChangedAt":"2026-09-04T12:50:26.162Z","schemaVersion":2},"datasetVersion":"2026-09-11T21:17:09.523Z"}