cylc-ui icon indicating copy to clipboard operation
cylc-ui copied to clipboard

Suicide triggers can cause arrows to permanently disappear from graph view

Open MetRonnie opened this issue 9 months ago • 2 comments

The arrows may disappear from the graph view, which I have tracked down to the layout() method: https://github.com/cylc/cylc-ui/blob/c151c9a8084e48cc07b664e0188c62665c675016/src/views/Graph.vue#L652-L659

where bbox is undefined.

Originally reported in #1470 but not fixed it seems.

This is accompanied by the console error message (in Chrome):

TypeError: Cannot read properties of undefined (reading 'width')

Reproducible example

[scheduler]
    allow implicit tasks = True
[scheduling]
    cycling mode = integer
    runahead limit = P0
    [[graph]]
        P1 = """
            forecast[-P1] => foo?
            foo? => !x1 & !x2 & !x3
            foo:fail? => x1
            x1 => x2 => x3
            x3 | bar => forecast
        """

image

It seems the suicide trigger edges in the workflow subscription are not pruned, leading to a mismatch between the nodes and edges that the Graph view is trying to plot. In fact the suicide trigger edges do not seem to be pruned at all and keep accumulating?

MetRonnie avatar May 07 '24 15:05 MetRonnie

Reproduced using; using

query {
  workflows (ids: ["edges/run1"]) {
    name
    stateTotals
    taskProxies{
      id
    }
    edges {
      edges {
        id
      }
    }
  }
}
{
  "data": {
    "workflows": [
      {
        "name": "edges/run1",
        "stateTotals": {
          "waiting": 8,
          "expired": 0,
          "preparing": 0,
          "submit-failed": 0,
          "submitted": 0,
          "running": 0,
          "failed": 0,
          "succeeded": 0
        },
        "taskProxies": [
          {
            "id": "~sutherlander/edges/run1//1/bar"
          },
          {
            "id": "~sutherlander/edges/run1//1/forecast"
          },
          {
            "id": "~sutherlander/edges/run1//2/bar"
          },
          {
            "id": "~sutherlander/edges/run1//2/forecast"
          },
          {
            "id": "~sutherlander/edges/run1//1/foo"
          },
          {
            "id": "~sutherlander/edges/run1//1/x2"
          },
          {
            "id": "~sutherlander/edges/run1//1/x1"
          },
          {
            "id": "~sutherlander/edges/run1//1/x3"
          }
        ],
        "edges": {
          "edges": [
            {
              "id": "~sutherlander/edges/run1//$edge|1/bar|1/forecast"
            },
            {
              "id": "~sutherlander/edges/run1//$edge|2/bar|2/forecast"
            },
            {
              "id": "~sutherlander/edges/run1//$edge|1/foo|1/x2"
            },
            {
              "id": "~sutherlander/edges/run1//$edge|1/foo|1/x1"
            },
            {
              "id": "~sutherlander/edges/run1//$edge|1/foo|1/x3"
            }
          ]
        }
      }
    ]
  }
}

but after running for a while:

{
  "data": {
    "workflows": [
      {
        "name": "edges/run1",
        "stateTotals": {
          "waiting": 4,
          "expired": 0,
          "preparing": 0,
          "submit-failed": 0,
          "submitted": 0,
          "running": 0,
          "failed": 0,
          "succeeded": 2
        },
        "taskProxies": [
          {
            "id": "~sutherlander/edges/run1//19/bar"
          },
          {
            "id": "~sutherlander/edges/run1//19/forecast"
          },
          {
            "id": "~sutherlander/edges/run1//19/x3"
          },
          {
            "id": "~sutherlander/edges/run1//20/bar"
          },
          {
            "id": "~sutherlander/edges/run1//20/forecast"
          },
          {
            "id": "~sutherlander/edges/run1//20/foo"
          }
        ],
        "edges": {
          "edges": [
            {
              "id": "~sutherlander/edges/run1//$edge|1/x1|1/x2"
            },
            {
              "id": "~sutherlander/edges/run1//$edge|2/x1|2/x2"
            },
            {
              "id": "~sutherlander/edges/run1//$edge|3/x1|3/x2"
            },
            {
              "id": "~sutherlander/edges/run1//$edge|4/x1|4/x2"
            },
            {
              "id": "~sutherlander/edges/run1//$edge|5/x1|5/x2"
            },
            {
              "id": "~sutherlander/edges/run1//$edge|6/x1|6/x2"
            },
            {
              "id": "~sutherlander/edges/run1//$edge|7/x1|7/x2"
            },
            {
              "id": "~sutherlander/edges/run1//$edge|8/x1|8/x2"
            },
            {
              "id": "~sutherlander/edges/run1//$edge|9/x1|9/x2"
            },
            {
              "id": "~sutherlander/edges/run1//$edge|10/x1|10/x2"
            },
            {
              "id": "~sutherlander/edges/run1//$edge|11/x1|11/x2"
            },
            {
              "id": "~sutherlander/edges/run1//$edge|12/x1|12/x2"
            },
            {
              "id": "~sutherlander/edges/run1//$edge|13/x1|13/x2"
            },
            {
              "id": "~sutherlander/edges/run1//$edge|14/x1|14/x2"
            },
            {
              "id": "~sutherlander/edges/run1//$edge|15/x1|15/x2"
            },
            {
              "id": "~sutherlander/edges/run1//$edge|16/x1|16/x2"
            },
            {
              "id": "~sutherlander/edges/run1//$edge|17/x1|17/x2"
            },
            {
              "id": "~sutherlander/edges/run1//$edge|19/bar|19/forecast"
            },
            {
              "id": "~sutherlander/edges/run1//$edge|18/x1|18/x2"
            },
            {
              "id": "~sutherlander/edges/run1//$edge|20/bar|20/forecast"
            },
            {
              "id": "~sutherlander/edges/run1//$edge|19/forecast|20/foo"
            },
            {
              "id": "~sutherlander/edges/run1//$edge|19/x3|19/forecast"
            },
            {
              "id": "~sutherlander/edges/run1//$edge|19/x2|19/x3"
            },
            {
              "id": "~sutherlander/edges/run1//$edge|19/x1|19/x2"
            }
          ]
        }
      }
    ]
  }
}

I'll look at the pruning mechanism.. For some reason it's always x1 -> x2 that doesn't get pruned .. never x2 -> x3

dwsutherland avatar May 09 '24 04:05 dwsutherland

Fix up https://github.com/cylc/cylc-flow/pull/6096

Some deltas we discard (if the nodes they apply to are about to be pruned), we needed to delete any associated edges too..

dwsutherland avatar May 09 '24 06:05 dwsutherland

Closed by https://github.com/cylc/cylc-flow/pull/6096

hjoliver avatar May 13 '24 10:05 hjoliver