← Back to team overview

nova-orchestration team mailing list archive

Re: Notes for pyutilib.workflow

 

On Wed, Nov 16, 2011 at 6:55 AM, Yun Mao <yunmao@xxxxxxxxx> wrote:
>
> Hi Mike, thanks for the info.
>
> You mentioned in the wiki that: "Error handling is decent; most of my
> logic mistakes generated a reasonable error when the workflow was
> being assembled. Some errors were head scratchers if the linking was
> really mixed up."
>
> Could you be more specific? For example, are you talking about design
> time errors or runtime errors?
>
> Thanks,
>
> Yun
>
Yun,

In the example I was thinking of, my error was design time / logical , but
caught at run time.  (The flows are validated when executed.)

Here's the rough sequence I implemented:

http://www.websequencediagrams.com/cgi-bin/cdraw?lz=V29ya2Zsb3cgLT4gU2NoZWR1bGU6IHJlcXVlc3Rfc3BlYwoAFwxSZXNlcnYABhxQcm92aXNpb24APApTcGVjCgBVCAA7CyA6IGNvbXB1dGVfbm9kZQAWDQA-CQAWDyAKADUIABYPcgCBFQVhdGlvbl9pZA&s=napkin

The Provision step needs the build_spec, compute_node, and
reservation_id as inputs. I forgot to link the reservation_id from
the Reserve step. At when the flow is executed, the error is:

Traceback (most recent call last):
  File "workflow1.py", line 109, in <module>
    result = create_instance_flow(request_spec=spec)
  File "/Users/mikeyp/Documents/Projects/OpenStack/essex/workflow/test_env/lib/python2.7/site-packages/pyutilib/workflow/task.py",
line 113, in __call__
    return self._call_fini(*options, **kwds)
  File "/Users/mikeyp/Documents/Projects/OpenStack/essex/workflow/test_env/lib/python2.7/site-packages/pyutilib/workflow/workflow.py",
line 126, in _call_fini
    self._final_task.inputs[key].compute_value()
  File "/Users/mikeyp/Documents/Projects/OpenStack/essex/workflow/test_env/lib/python2.7/site-packages/pyutilib/workflow/port.py",
line 106, in compute_value
    self.validate()
  File "/Users/mikeyp/Documents/Projects/OpenStack/essex/workflow/test_env/lib/python2.7/site-packages/pyutilib/workflow/port.py",
line 111, in validate
    raise ValueError, "Task %s Port %s requires a nontrivial value.
Value specified is None." % (str(self.task.id), self.name)
ValueError: Task 3 Port instance requires a nontrivial value.  Value
specified is None.

So, the error indicates a problem with instance, the _output_ of task
3, rather than
catching the missing input (reservation_id.)

As far as I can tell, this particular error would only occur during
workflow development

mike


References