{"record":{"id":"b1b68b499d7af02f","repo":"prestodb/presto","slug":"no-nodes-available-b1b68b","errorCode":"NO_NODES_AVAILABLE","errorMessage":"No assignment for split in bucketNodeMap. Split Info: %s","messagePattern":"No assignment for split in bucketNodeMap\\. Split Info: (.+?)","errorType":"error_code","errorClass":"PrestoException","httpStatus":null,"severity":"error","filePath":"presto-main-base/src/main/java/com/facebook/presto/execution/scheduler/NodeScheduler.java","lineNumber":425,"sourceCode":"            NodeMap nodeMap,\n            NodeTaskMap nodeTaskMap,\n            long maxSplitsWeightPerNode,\n            long maxPendingSplitsWeightPerTask,\n            int maxUnacknowledgedSplitsPerTask,\n            Set<Split> splits,\n            List<RemoteTask> existingTasks,\n            BucketNodeMap bucketNodeMap,\n            NodeSelectionStats nodeSelectionStats)\n    {\n        Multimap<InternalNode, Split> assignments = HashMultimap.create();\n        NodeAssignmentStats assignmentStats = new NodeAssignmentStats(nodeTaskMap, nodeMap, existingTasks);\n\n        Set<InternalNode> blockedNodes = new HashSet<>();\n        for (Split split : splits) {\n            // node placement is forced by the bucket to node map\n            Optional<InternalNode> optionalNode = bucketNodeMap.getAssignedNode(split);\n            if (!optionalNode.isPresent()) {\n                throw new PrestoException(NO_NODES_AVAILABLE, format(\"No assignment for split in bucketNodeMap. Split Info: %s\", split.getConnectorSplit().getInfoMap()));\n            }\n            InternalNode node = optionalNode.get();\n            boolean isCacheable = bucketNodeMap.isSplitCacheable(split);\n            SplitWeight splitWeight = split.getSplitWeight();\n\n            // if node is full, don't schedule now, which will push back on the scheduling of splits\n            if (canAssignSplitToDistributionNode(assignmentStats, node, maxSplitsWeightPerNode, maxPendingSplitsWeightPerTask, maxUnacknowledgedSplitsPerTask, splitWeight)) {\n                if (isCacheable) {\n                    split = new Split(split.getConnectorId(), split.getTransactionHandle(), split.getConnectorSplit(), split.getLifespan(), new SplitContext(true));\n                    nodeSelectionStats.incrementBucketedPreferredNodeSelectedCount();\n                }\n                else {\n                    nodeSelectionStats.incrementBucketedNonPreferredNodeSelectedCount();\n                }\n                assignments.put(node, split);\n                assignmentStats.addAssignedSplit(node, splitWeight);\n            }\n            else {","sourceCodeStart":407,"sourceCodeEnd":443,"githubUrl":"https://github.com/prestodb/presto/blob/55bb57d202de3b926896fa966c2c4a44c779634e/presto-main-base/src/main/java/com/facebook/presto/execution/scheduler/NodeScheduler.java#L407-L443","documentation":"NO_NODES_AVAILABLE failure in NodeScheduler.selectDistributionNodes: a bucketed split's bucketNodeMap maps its bucket to no active node (typically because the mapped node left the cluster or the map was built against a stale node set), so the split cannot be assigned anywhere.","triggerScenarios":"Thrown at presto-main-base/src/main/java/com/facebook/presto/execution/scheduler/NodeScheduler.java:425 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Retry the query after the cluster node set stabilizes","Check for recently dead/restarting workers and their re-registration","If persistent, restart the coordinator so bucket-to-node mappings are rebuilt","Verify all workers in the bucket mapping are healthy and not blacklisted"],"exampleFix":null,"handlingStrategy":"retry","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"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"}