RE: Another take on versioning

> > But the dependency between the two steps must still be preserved.  
> > Simply
> > replacing the p:pipe binding would break the dependency graph.
> 
> I don't really understand why this is important, given that 
> if there's  
> no data passing between them then there is no dependency 
> between them.  
> But I will defer to the implementers.

Even if no data is flowing between the steps, you want to be sure they
are evaluated in the right order. Consider this example:

<p:v2-step name="v2"/>
<p:v1-step>
  <p:input port="source">
    <p:pipe step="v2" port="result"/>
  </p:input>
</p:v1-step>

In a V1 processor, this pipeline should fail because the processor does
not know how to perform p:v2-step. As a consequence, the p:v1-step step
is never invoked (because it depends on the result of p:v2-step).

Hovever, if you remove the dependency between p:v1-step and p:v2-step
(by replacing p:pipe with p:empty), the V1 processor is at liberty to
evaluate the two steps in arbitrary order. This means that p:v1-step can
be evaluated *before* p:v2-step, which typically you don't want (you
will be likely to get errors or really unexpected results when running
the pipeline). For instance, p:v1-step might store nonsense documents
somewhere, or update some records in a db too early, ...

Regards,
Vojtech

Received on Monday, 12 October 2009 09:06:49 UTC