W3C home > Mailing lists > Public > xproc-dev@w3.org > November 2010

Re: How to run unconnected steps in sequence?

From: David <dlee@calldei.com>
Date: Mon, 01 Nov 2010 09:41:34 -0400
Message-ID: <4CCEC38E.5090306@calldei.com>
To: vojtech.toman@emc.com
CC: xproc-dev@w3.org
I don't believe this is strictly true.
A pipe creates a dependency of the start of the output of A to the 
beginning of the input of B.
It does  not to my knowledge create a dependency that A *completes 
execution* before B begins.
Or in fact that they don't start in any order but B is waiting when it 
starts to read the data from the pipe.
Atleast that was my understanding last time I read the spec (could well 
be wrong).
Also I know in Calabash (when I last looked at the code) the processing 
is single threaded, thus data dependency == completion dependency, but I 
do not believe its guaranteed to behave that way.
But I believe a conforming processor could implement steps in a pipe 
asynchronously as long as the data flowing between them is synchronized.


For an analogy, in the unix pipeline (and also in xmlsh)
     a | b

The process (or in xmlsh's case; thread)  "b" is (or may be, depending 
on the implementation) started first.
If b is not consuming data from its input it may actually run to 
completion before "a" even starts.


But then again ... maybe I've misread the specs.



David A. Lee
dlee@calldei.com
http://www.xmlsh.org


On 11/1/2010 9:04 AM, vojtech.toman@emc.com wrote:
>
> Ad 1. The p:pipe element creates a connection – and a dependency – 
> between steps. If the step A contains a p:pipe that points to the step 
> B, it means that A must be executed *after* B. It does not matter if 
> the p:pipe is in p:input, p:with-option, p:with-param, or p:variable. 
> All p:pipe elements contained in the step contribute edges to the 
> dependency graph.
>
> Ad 2: There is no guarantee; but you don’t care in this case. The 
> p:load does not depend on p:sink being executed first. I used p:sink 
> just to introduce a side effect-free dependency on p:store. (You can 
> also use other steps than p:sink, provided they don’t introduce side 
> effects that would change the result of your pipeline.)
>
> Regards,
>
> Vojtech
>
> --
>
> Vojtech Toman
>
> Consultant Software Engineer
>
> EMC | Information Intelligence Group
>
> vojtech.toman@emc.com
>
> http://developer.emc.com/xmltech
>
> *From:*Jostein Austvik Jacobsen [mailto:josteinaj@gmail.com]
> *Sent:* Monday, November 01, 2010 1:46 PM
> *To:* Toman, Vojtech
> *Cc:* xproc-dev@w3.org
> *Subject:* Re: How to run unconnected steps in sequence?
>
> 1. Thanks. I didn't know dependencies could be introduced that way. Is 
> this similar to what happens when you have multiple p:pipes in a p:input?
>
> 2. and 3.: How am I guaranteed that p:load won't run before the p:sink?
>
> Regards
>
> Jostein
>
> 2010/11/1 <vojtech.toman@emc.com <mailto:vojtech.toman@emc.com>>
>
> The solution is to introduce the dependency explicitly. Here are some 
> examples (all are variations on the same theme, but some may be more 
> applicable to your use case):
>
> 1.
>
> <p:store href=”file.xml” name=”store”/>
>
> <p:load>
>
> <p:with-option name=”href” select=”’file.xml’”>
>
> <p:pipe step=”store” port=”result”/>
>
> </p:with-option>
>
> </p:load>
>
> 2.
>
> <p:store href=”file.xml” name=”store”/>
>
> <p:group>
>
> <p:sink>
>
> <p:input port=”source”>
>
> <p:pipe step=”store” port=”result”/>
>
> </p:input>
>
> </p:sink>
>
> <p:load href=”file.xml”/>
>
> </p:group>
>
> 3.
>
> <p:group>
>
> <p:store href=”file.xml”/>
>
> <p:identity>
>
> <p:input port="source">
>
> <p:empty/>
>
> </p:input>
>
> </p:identity>
>
> <p:group>
>
> <p:group>
>
> <p:sink/>
>
> <p:load href=”file.xml”/>
>
> </p:group>
>
> Some processors also support extension attributes to control 
> dependencies between steps, but I would recommend to avoid this unless 
> absolutely necessary.
>
> Regards,
>
> Vojtech
>
> --
>
> Vojtech Toman
>
> Consultant Software Engineer
>
> EMC | Information Intelligence Group
>
> vojtech.toman@emc.com <mailto:vojtech.toman@emc.com>
>
> http://developer.emc.com/xmltech
>
> *From:*xproc-dev-request@w3.org <mailto:xproc-dev-request@w3.org> 
> [mailto:xproc-dev-request@w3.org <mailto:xproc-dev-request@w3.org>] 
> *On Behalf Of *Jostein Austvik Jacobsen
> *Sent:* Monday, November 01, 2010 1:01 PM
> *To:* xproc-dev@w3.org <mailto:xproc-dev@w3.org>
> *Subject:* How to run unconnected steps in sequence?
>
> I remember seeing a note on this problem somewhere, but I can't find 
> it. Say I want to run these two steps in sequence:
>
> <p:store href="file.xml"/>
>
> <p:load href="file.xml"/>
>
> p:load would have to run after p:store, or the file wouldn't be there 
> yet. Since p:store has no primary output and p:load has no primary 
> input, the processor may choose the order they are run in.
>
> Is there a standard pattern for solving such issues? Something 
> general, not just for the store/load use-case?
>
> Regards
>
> Jostein Austvik Jacobsen
>
Received on Monday, 1 November 2010 13:42:11 GMT

This archive was generated by hypermail 2.2.0+W3C-0.50 : Monday, 1 November 2010 13:42:11 GMT