Skip to content

No ExclusiveJoinTask builder class — defaultExclusiveJoinTask field unreachable #429

Description

@nthmost-orkes

Summary

Tested against: Conductor OSS 3.32.0-rc.9

TaskType.EXCLUSIVE_JOIN exists in the SDK enum but there is no ExclusiveJoinTask
builder class. More critically, the defaultExclusiveJoinTask field (which tells
the server which task to use when no SWITCH branch ran) cannot be set through any
SDK path.

Details

JoinTask always produces TaskType.JOIN, not TaskType.EXCLUSIVE_JOIN. There
is no way to build an EXCLUSIVE_JOIN task using SDK classes alone.

EXCLUSIVE_JOIN is designed for SWITCH branches (where exactly one branch executes).
Without defaultExclusiveJoinTask set, EXCLUSIVE_JOIN workflows with a branch that
doesn't match will stall.

Suggested fix

class ExclusiveJoinTask(TaskInterface):
    def __init__(self, task_ref_name: str, join_on: List[str],
                 default_exclusive_join_task: Optional[List[str]] = None):
        super().__init__(task_ref_name, TaskType.EXCLUSIVE_JOIN)
        self._join_on = join_on
        self._default = default_exclusive_join_task or []

    def to_workflow_task(self) -> WorkflowTask:
        wf = super().to_workflow_task()
        wf.join_on = self._join_on
        wf.default_exclusive_join_task = self._default
        return wf

Verified against

Conductor server 3.32.0-rc.9. EXCLUSIVE_JOIN runs correctly when built via
raw WorkflowTask with the correct fields set. The gap is purely in the SDK —
no builder class exists.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions