Exemple #1
0
    def simple_all_convergence(self, wf_node_generator):
        g = WorkflowDAG()
        nodes = [wf_node_generator() for i in range(4)]
        for n in nodes:
            g.add_node(n)

            r'''
                0
               /\
            S /  \ S
             /    \
            1      2
             \    /
            F \  / S
               \/
                3

            '''
        g.add_edge(nodes[0], nodes[1], "success_nodes")
        g.add_edge(nodes[0], nodes[2], "success_nodes")
        g.add_edge(nodes[1], nodes[3], "failure_nodes")
        g.add_edge(nodes[2], nodes[3], "success_nodes")
        nodes[3].all_parents_must_converge = True
        nodes[0].job = Job(status='successful')
        nodes[1].job = Job(status='failed')
        nodes[2].job = Job(status='successful')
        return (g, nodes)
Exemple #2
0
def workflow_dag_1(wf_node_generator):
    g = WorkflowDAG()
    nodes = [wf_node_generator() for i in range(4)]
    for n in nodes:
        g.add_node(n)
    r'''
            0
           /\
        S /  \
         /    \
         1    |
         |    |
       F |    | S
         |    |
         3    |
          \   |
         F \  |
            \/
             2
    '''
    g.add_edge(nodes[0], nodes[1], "success_nodes")
    g.add_edge(nodes[0], nodes[2], "success_nodes")
    g.add_edge(nodes[1], nodes[3], "failure_nodes")
    g.add_edge(nodes[3], nodes[2], "failure_nodes")
    return (g, nodes)
Exemple #3
0
 def workflow_dag_canceled(self, wf_node_generator):
     g = WorkflowDAG()
     nodes = [wf_node_generator() for i in range(1)]
     for n in nodes:
         g.add_node(n)
     r'''
            F0
     '''
     nodes[0].job = Job(status='canceled')
     return (g, nodes)
Exemple #4
0
 def workflow_dag_canceled(self, wf_node_generator):
     g = WorkflowDAG()
     nodes = [wf_node_generator() for i in range(4)]
     for n in nodes:
         g.add_node(n)
     r'''
            C0
           / | \
        F / A|  \ S
         /   |   \
        1    2    3
     '''
     g.add_edge(nodes[0], nodes[1], "failure_nodes")
     g.add_edge(nodes[0], nodes[2], "always_nodes")
     g.add_edge(nodes[0], nodes[3], "success_nodes")
     nodes[0].job = Job(status='canceled')
     return (g, nodes)
Exemple #5
0
    def workflow_dag_root_children(self, wf_node_generator):
        g = WorkflowDAG()
        wf_root_nodes = [wf_node_generator() for i in range(0, 10)]
        wf_leaf_nodes = [wf_node_generator() for i in range(0, 10)]

        for n in wf_root_nodes + wf_leaf_nodes:
            g.add_node(n)
        '''
        Pair up a root node with a single child via an edge

        R1  R2 ... Rx
        |   |      |
        |   |      |
        C1  C2     Cx
        '''
        for i, n in enumerate(wf_leaf_nodes):
            g.add_edge(wf_root_nodes[i], n, 'label')
        return (g, wf_root_nodes, wf_leaf_nodes)
Exemple #6
0
 def workflow_all_converge_1(self, wf_node_generator):
     g = WorkflowDAG()
     nodes = [wf_node_generator() for i in range(3)]
     for n in nodes:
         g.add_node(n)
     r'''
            0
            |\ F
            | \
           S|  1
            | /
            |/ A
            2
     '''
     g.add_edge(nodes[0], nodes[1], "failure_nodes")
     g.add_edge(nodes[0], nodes[2], "success_nodes")
     g.add_edge(nodes[1], nodes[2], "always_nodes")
     nodes[2].all_parents_must_converge = True
     nodes[0].job = Job(status='successful')
     return (g, nodes)
Exemple #7
0
    def complex_dag(self, wf_node_generator):
        g = WorkflowDAG()
        nodes = [wf_node_generator() for i in range(10)]
        for n in nodes:
            g.add_node(n)

        g.add_edge(nodes[0], nodes[1], "failure_nodes")
        g.add_edge(nodes[0], nodes[2], "success_nodes")
        g.add_edge(nodes[0], nodes[3], "always_nodes")
        g.add_edge(nodes[1], nodes[4], "success_nodes")
        g.add_edge(nodes[1], nodes[5], "failure_nodes")

        g.add_edge(nodes[2], nodes[6], "failure_nodes")
        g.add_edge(nodes[3], nodes[6], "success_nodes")
        g.add_edge(nodes[4], nodes[6], "always_nodes")

        g.add_edge(nodes[6], nodes[7], "always_nodes")
        g.add_edge(nodes[6], nodes[8], "success_nodes")
        g.add_edge(nodes[6], nodes[9], "failure_nodes")

        return (g, nodes)
Exemple #8
0
    def workflow_all_converge_deep_dnr_tree(self, wf_node_generator):
        g = WorkflowDAG()
        nodes = [wf_node_generator() for i in range(7)]
        for n in nodes:
            g.add_node(n)
        r'''
               0    1    2
                \   |   /
               S \ S|  / F
                  \ | /
                   \|/
                    |
                    3
                   /\
                S /  \ S
                 /    \
               4|      | 5
                 \    /
                S \  / S
                   \/
                    6
        '''
        g.add_edge(nodes[0], nodes[3], "success_nodes")
        g.add_edge(nodes[1], nodes[3], "success_nodes")
        g.add_edge(nodes[2], nodes[3], "failure_nodes")
        g.add_edge(nodes[3], nodes[4], "success_nodes")
        g.add_edge(nodes[3], nodes[5], "success_nodes")
        g.add_edge(nodes[4], nodes[6], "success_nodes")
        g.add_edge(nodes[5], nodes[6], "success_nodes")
        nodes[3].all_parents_must_converge = True
        nodes[4].all_parents_must_converge = True
        nodes[5].all_parents_must_converge = True
        nodes[6].all_parents_must_converge = True

        nodes[0].job = Job(status='successful')
        nodes[1].job = Job(status='successful')
        nodes[2].job = Job(status='successful')
        return (g, nodes)
Exemple #9
0
    def workflow_all_converge_dnr(self, wf_node_generator):
        g = WorkflowDAG()
        nodes = [wf_node_generator() for i in range(4)]
        for n in nodes:
            g.add_node(n)
        r'''
               0    1    2
              S \ F |   / F
                 \  |  /
                  \ | /
                   \|/
                    |
                    3
        '''
        g.add_edge(nodes[0], nodes[3], "success_nodes")
        g.add_edge(nodes[1], nodes[3], "failure_nodes")
        g.add_edge(nodes[2], nodes[3], "failure_nodes")
        nodes[3].all_parents_must_converge = True

        nodes[0].job = Job(status='successful')
        nodes[1].job = Job(status='running')
        nodes[2].job = Job(status='failed')
        return (g, nodes)
Exemple #10
0
 def workflow_all_converge_2(self, wf_node_generator):
     """The ordering of _1 and this test, _2, is _slightly_ different.
     The hope is that topological sorting results in 2 being processed before 3
     and/or 3 before 2.
     """
     g = WorkflowDAG()
     nodes = [wf_node_generator() for i in range(3)]
     for n in nodes:
         g.add_node(n)
     r'''
            0
            |\ S
            | \
           F|  1
            | /
            |/ A
            2
     '''
     g.add_edge(nodes[0], nodes[1], "success_nodes")
     g.add_edge(nodes[0], nodes[2], "failure_nodes")
     g.add_edge(nodes[1], nodes[2], "always_nodes")
     nodes[2].all_parents_must_converge = True
     nodes[0].job = Job(status='successful')
     return (g, nodes)