{"record":{"id":"c7aea34e6270f69b","repo":"apache/dolphinscheduler","slug":"no-master-server-available-c7aea3","errorCode":null,"errorMessage":"no master server available","messagePattern":"no master server available","errorType":"exception","errorClass":"ServiceException","httpStatus":null,"severity":"critical","filePath":"dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/executor/workflow/TriggerWorkflowExecutorDelegate.java","lineNumber":46,"sourceCode":"import org.apache.dolphinscheduler.registry.api.enums.RegistryNodeType;\n\nimport lombok.extern.slf4j.Slf4j;\n\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Component;\n\n@Slf4j\n@Component\npublic class TriggerWorkflowExecutorDelegate implements IExecutorDelegate<TriggerWorkflowDTO, Integer> {\n\n    @Autowired\n    private RegistryClient registryClient;\n\n    @Override\n    public Integer execute(final TriggerWorkflowDTO triggerWorkflowDTO) {\n        final Server masterServer = registryClient.getRandomServer(RegistryNodeType.MASTER).orElse(null);\n        if (masterServer == null) {\n            throw new ServiceException(\"no master server available\");\n        }\n        final WorkflowManualTriggerResponse workflowManualTriggerResponse = Clients\n                .withService(IWorkflowControlClient.class)\n                .withHost(masterServer.getHost() + \":\" + masterServer.getPort())\n                .manualTriggerWorkflow(transform2WorkflowTriggerRequest(triggerWorkflowDTO));\n        if (!workflowManualTriggerResponse.isSuccess()) {\n            throw new ServiceException(\"Trigger workflow failed: \" + workflowManualTriggerResponse.getMessage());\n        }\n        return workflowManualTriggerResponse.getWorkflowInstanceId();\n\n    }\n\n    private WorkflowManualTriggerRequest transform2WorkflowTriggerRequest(TriggerWorkflowDTO triggerWorkflowDTO) {\n        return WorkflowManualTriggerRequest.builder()\n                .userId(triggerWorkflowDTO.getLoginUser().getId())\n                .workflowDefinitionCode(triggerWorkflowDTO.getWorkflowDefinition().getCode())\n                .workflowDefinitionVersion(triggerWorkflowDTO.getWorkflowDefinition().getVersion())\n                .startNodes(triggerWorkflowDTO.getStartNodes())","sourceCodeStart":28,"sourceCodeEnd":64,"githubUrl":"https://github.com/apache/dolphinscheduler/blob/02eac45a1b6676e639fcbfb4be2243de5771b05d/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/executor/workflow/TriggerWorkflowExecutorDelegate.java#L28-L64","documentation":"Thrown by TriggerWorkflowExecutorDelegate.execute when the registry has no available master server. Manually triggering a workflow requires dispatching a WorkflowManualTriggerRequest to a master, so with zero registered masters the trigger cannot proceed and this ServiceException is raised before any RPC.","triggerScenarios":"registryClient.getRandomServer(RegistryNodeType.MASTER).orElse(null) yields null because no master is registered — masters never started, all crashed, or registry (ZooKeeper) session lost.","commonSituations":"Calling the workflow trigger API before the master tier is up; all masters down after deployment or crash; ZooKeeper outage dropping master registrations; API and masters configured with different registry namespaces.","solutions":["Start at least one master server and confirm registration in the registry","Verify ZooKeeper connectivity and that masters renew their sessions","Ensure API server and masters share the same registry namespace configuration","Check master startup logs for registration errors"],"exampleFix":"// before\nServer masterServer = registryClient.getRandomServer(RegistryNodeType.MASTER).orElse(null);\nif (masterServer == null) { throw new ServiceException(\"no master server available\"); }\n// after\n// operational: bring up master and verify\n// zkCli.sh ls /dolphinscheduler/nodes/master  -> expect at least one entry","handlingStrategy":"retry","validationCode":"List<Server> masters = registryClient.getServerList(RegistryNodeType.MASTER);\nif (masters.isEmpty()) { throw new IllegalStateException(\"No masters registered; cannot trigger workflow\"); }","typeGuard":null,"tryCatchPattern":"try {\n    int id = delegate.execute(dto);\n} catch (ServiceException e) {\n    if (\"no master server available\".equals(e.getMessage())) {\n        retryWithBackoff(dto, 3); // after masters recover\n    }\n}","preventionTips":["Alert when master count in registry drops to zero","Ensure masters start before API-dependent jobs/runbooks","Verify registry (ZooKeeper) health and connectivity","Deploy multiple masters for redundancy"],"tags":["master-server","registry","availability","trigger"],"backgroundTag":"connection-refused","analyzedSha":"02eac45a1b6676e639fcbfb4be2243de5771b05d","analyzedAt":"2026-09-06T17:43:00.555Z","contentChangedAt":"2026-09-06T17:43:00.555Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}