{"record":{"id":"dee1b4c9931de77d","repo":"prestodb/presto","slug":"unknown-pinot-split-type-s","errorCode":null,"errorMessage":"Unknown Pinot split type: %s","messagePattern":"Unknown Pinot split type: (.+?)","errorType":"exception","errorClass":"UnsupportedOperationException","httpStatus":null,"severity":"error","filePath":"presto-pinot-toolkit/src/main/java/com/facebook/presto/pinot/PinotPageSourceProvider.java","lineNumber":107,"sourceCode":"            case SEGMENT:\n                return new PinotSegmentPageSource(\n                    session,\n                    pinotConfig,\n                    pinotStreamingQueryClient,\n                    pinotSplit,\n                    handles);\n            case BROKER:\n                return new PinotBrokerPageSource(\n                    pinotConfig,\n                    session,\n                    pinotSplit.getBrokerPinotQuery().get(),\n                    handles,\n                    pinotSplit.getExpectedColumnHandles(),\n                    clusterInfoFetcher,\n                    objectMapper,\n                    brokerAuthenticationProvider);\n            default:\n                throw new UnsupportedOperationException(\"Unknown Pinot split type: \" + pinotSplit.getSplitType());\n        }\n    }\n\n    @VisibleForTesting\n    static GrpcConfig extractGrpcQueryClientConfig(PinotConfig config)\n    {\n        Map<String, Object> target = new HashMap<>();\n        target.put(CONFIG_USE_PLAIN_TEXT, !config.isUseSecureConnection());\n        target.put(CONFIG_MAX_INBOUND_MESSAGE_BYTES_SIZE, config.getStreamingServerGrpcMaxInboundMessageBytes());\n        if (config.isUseSecureConnection()) {\n            setOrRemoveProperty(target, \"tls.keystore.path\", config.getGrpcTlsKeyStorePath());\n            setOrRemoveProperty(target, \"tls.keystore.password\", config.getGrpcTlsKeyStorePassword());\n            setOrRemoveProperty(target, \"tls.keystore.type\", config.getGrpcTlsKeyStoreType());\n            setOrRemoveProperty(target, \"tls.truststore.path\", config.getGrpcTlsTrustStorePath());\n            setOrRemoveProperty(target, \"tls.truststore.password\", config.getGrpcTlsTrustStorePassword());\n            setOrRemoveProperty(target, \"tls.truststore.type\", config.getGrpcTlsTrustStoreType());\n        }\n        return new GrpcConfig(target);","sourceCodeStart":89,"sourceCodeEnd":125,"githubUrl":"https://github.com/prestodb/presto/blob/55bb57d202de3b926896fa966c2c4a44c779634e/presto-pinot-toolkit/src/main/java/com/facebook/presto/pinot/PinotPageSourceProvider.java#L89-L125","documentation":"Pinot splits come in several types (e.g. broker splits and segment splits), and createPageSource dispatches on the split type with a switch. If the connector encounters a PinotSplit whose split type is not one of the handled cases, it throws this UnsupportedOperationException. This indicates an internal inconsistency rather than a user error: a split kind the provider was never written to serve.","triggerScenarios":"A PinotSplit with a new or unexpected PinotSplitType reaches PinotPageSourceProvider.createPageSource and falls into the switch's default branch.","commonSituations":"Running a coordinator/worker with mismatched plugin versions where a newer split type is generated upstream; custom forks that add split types; classpath mixing of different connector builds.","solutions":["Ensure all Presto nodes (coordinator and workers) run the same plugin/connector version so split types are consistent","Rebuild/redeploy the pinot toolkit so the switch handles every PinotSplitType value","Check for stale worker processes serving an old jar after an upgrade; restart the full cluster","If you added a custom split type, add a corresponding case in the switch that builds the right PageSource"],"exampleFix":"// before\ndefault:\n    throw new UnsupportedOperationException(\"Unknown Pinot split type: \" + pinotSplit.getSplitType());\n// after\ncase SEGMENT:\n    return createSegmentPageSource(...);\ncase BROKER:\n    return new PinotBrokerPageSource(...);\ndefault:\n    throw new UnsupportedOperationException(\"Unknown Pinot split type: \" + pinotSplit.getSplitType());","handlingStrategy":"validation","validationCode":"// before submitting, ensure the split type is one the connector serves\nif (split instanceof PinotSplit) {\n    PinotSplitType type = ((PinotSplit) split).getSplitType();\n    if (type != PinotSplitType.BROKER && type != PinotSplitType.SEGMENT) {\n        throw new IllegalStateException(\"Unsupported split type: \" + type);\n    }\n}","typeGuard":"boolean isSupportedSplit(PinotSplit s) {\n    return s.getSplitType() == PinotSplitType.BROKER || s.getSplitType() == PinotSplitType.SEGMENT;\n}","tryCatchPattern":null,"preventionTips":["Keep all cluster nodes on the same connector version","Restart all nodes after plugin upgrades to avoid stale jars","Add a switch case for every new PinotSplitType when extending the connector"],"tags":["pinot","split-type","unsupported-operation","internal-inconsistency"],"backgroundTag":"unknown-split-type","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"}