Skip to content

Deadlock chaining iterable + JoinNode + iterable + JoinNode #3163

Open
@oesteban

Description

@oesteban

Summary

The following pattern:

Node(IdentityInterface) -- ... --> JoinNode(IdentityInterface) --> Node(IdentityInterface) -- ... --> JoinNode(IdentityInterface)
with iterable field   <---------------| (joinsource)               with iterable field   <---------------| (joinsource)          

Leads the last JoinNode to enter a deadlock. I think it only happens when the iterable and Join nodes wrap identity interfaces. The deadlock can be averted simply spliting out the iterable field from the second Node:

Node(IdentityInterface) -- ... --> JoinNode(IdentityInterface) --> Node(IdentityInterface) -- ... -------| 
with iterable field   <---------------| (joinsource)               without iterable field                |          
                                                                   Node(IdentityInterface) -- ... --> JoinNode(IdentityInterface)
                                                                   with iterable field   <---------------| (joinsource)          

The problem is rooted in that this expansion exploration for the first iterable node:
https://github.com/nipy/nipype/blob/master/nipype/pipeline/engine/utils.py#L992-L998
reaches out to the final JoinNode, instead of stopping at the first JoinNode.

My impression is that the problem has always been there, but after the refactor of the results files, the workflow enters a deadlock. I haven't checked, but changing this AttributeError (https://github.com/nipy/nipype/blob/master/nipype/pipeline/engine/nodes.py#L1066) to some other type (e.g., ValueError or RuntimeError) potentially could do

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions