{"record":{"id":"4b239289d51eb435","repo":"prestodb/presto","slug":"cannot-install-coordinator-plugins-on-router","errorCode":null,"errorMessage":"Cannot install coordinator plugins on router","messagePattern":"Cannot install coordinator plugins on router","errorType":"exception","errorClass":"UnsupportedOperationException","httpStatus":null,"severity":"error","filePath":"presto-router/src/main/java/com/facebook/presto/router/RouterPluginManager.java","lineNumber":140,"sourceCode":"            implements PluginInstaller\n    {\n        private final RouterPluginManager pluginManager;\n\n        public RouterPluginInstaller(RouterPluginManager pluginManager)\n        {\n            this.pluginManager = pluginManager;\n        }\n\n        @Override\n        public void installPlugin(Plugin plugin)\n        {\n            pluginManager.installPlugin(plugin);\n        }\n\n        @Override\n        public void installCoordinatorPlugin(CoordinatorPlugin plugin)\n        {\n            throw new UnsupportedOperationException(\"Cannot install coordinator plugins on router\");\n        }\n\n        @Override\n        public void installRouterPlugin(RouterPlugin plugin)\n        {\n            pluginManager.installRouterPlugin(plugin);\n        }\n    }\n\n    private List<PluginManagerUtil.PluginClassLoaderHandle> createPluginClassLoaders()\n    {\n        try {\n            return PluginManagerUtil.buildClassLoaders(\n                    installedPluginsDir,\n                    plugins,\n                    resolver,\n                    SPI_PACKAGES,\n                    null,","sourceCodeStart":122,"sourceCodeEnd":158,"githubUrl":"https://github.com/prestodb/presto/blob/55bb57d202de3b926896fa966c2c4a44c779634e/presto-router/src/main/java/com/facebook/presto/router/RouterPluginManager.java#L122-L158","documentation":"The router's PluginManager implementation explicitly rejects installCoordinatorPlugin by throwing UnsupportedOperationException, because the Presto router hosts only router plugins and has no coordinator plugin machinery.","triggerScenarios":"Calling RouterPluginManager.installCoordinatorPlugin with any CoordinatorPlugin instance — e.g. code that installs plugins generically on a router process assuming coordinator semantics.","commonSituations":"Reusing coordinator bootstrap/plugin installation code paths on a router deployment; tooling that installs all plugin kinds indiscriminately.","solutions":["Use installRouterPlugin (or pluginManager.installRouterPlugin) for plugins on the router","Only install coordinator plugins on a coordinator process, not the router","Branch on process role before installing plugins"],"exampleFix":"// before\npluginManager.installCoordinatorPlugin(coordPlugin);\n// after\npluginManager.installRouterPlugin(routerPlugin); // on the router","handlingStrategy":"type-guard","validationCode":"if (pluginManager instanceof RouterPluginManager) {\n    throw new IllegalArgumentException(\"Use installRouterPlugin on the router\");\n}","typeGuard":"boolean supportsCoordinatorPlugins(PluginManager pm) {\n    return !(pm instanceof RouterPluginManager);\n}","tryCatchPattern":"try { pluginManager.installCoordinatorPlugin(plugin); } catch (UnsupportedOperationException e) {\n    log.warn(\"Coordinator plugin not supported here; falling back to router plugin install\");\n    pluginManager.installRouterPlugin(toRouterPlugin(plugin));\n}","preventionTips":["Branch plugin installation code on process role (coordinator vs router)","Read the PluginManager interface docs before generic install tooling","Add unit tests asserting router deployments never invoke installCoordinatorPlugin"],"tags":["presto","router","plugins","unsupported-operation"],"backgroundTag":"unsupported-operation","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"}