EPICS Controls Argonne National Laboratory

Experimental Physics and
Industrial Control System

2002  2003  2004  <20052006  2007  2008  2009  2010  2011  2012  2013  2014  2015  2016  2017  2018  2019  2020  2021  2022  2023  2024  Index 2002  2003  2004  <20052006  2007  2008  2009  2010  2011  2012  2013  2014  2015  2016  2017  2018  2019  2020  2021  2022  2023  2024 
<== Date ==> <== Thread ==>

Subject: Re: Link arrays / syntax
From: Ralph Lange <[email protected]>
To: Marty Kraimer <[email protected]>
Cc: EPICS Core Talk <[email protected]>
Date: Wed, 19 Oct 2005 13:08:46 +0200
Marty Kraimer wrote:
Before starting on benjamin's message in details I do like "asyn" instead of "wait".
But perhaps callback is even better with callback=true meaning that link support will call a callback when the link completes. Either asyn or callback is better than wait.
I don't like "callback" or "asyn" at all as they are clearly pointing to implementations of a mechanism.
The database designer should configure what should be happening, not how it is achieved.
The proposal to have just

process - boolean, i.e. should request be made to process record
wait - boolean, i.e. link is not complete until linked record completes processing
block - boolean, i.e. dont do any more record processing until link completes

Could be implemented easily as follows:

When link support returns it specifies 1) If wait is true, i.e. it will call a callback when the link completes and
2) If block is true. If wait is true Record support incremements a counter indicating how many callbacks are outstanding. If block is true, record support will not do any more record processing until all outstanding callbacks complete.

This is simple and efficient. Is it intuitive for the Application Developer?
With regards to the example of the array of processLink, I say yes.
The application developer has control of the order. If the definition is:

processLink = [3] {
       {pvname = "incA"; wait=true},
       {pvname = "incB"; wait=true,block=true},
       {pvname = "getSample"; wait=true;}
}

The link for getSample will not be requested until both incA and incB complete. I think this is intuitive.
There is a problem for separate link fields rather than an array of links.
Now the order in which the fields appear in the record matter. The order can never be changed or databases will break.
I still hold up my already expressed concerns:
  • The configuration has different lines  for "incA" and "incB", while in the course of record execution they are treated the same.
    The "block" statement in your example controls something that happens afterwards, it would logically apply to "incA" in the same fashion.
    It is really rather the "getSample" link whose execution is blocked until all previous records have finished.
    I see a good chance of confusion as the designer always has to remember: Does "block=true" mean that this record is blocked or that the next record is blocked?
  • What happens if I set a link "wait=false, block=true"?
  • Why doesn't the "getSample" have a "block=true" definition? Isn't further processing of the record held up until the processing is finished? Is "block=true" inherent for the last link in the array? Even if it is set "wait=false"?
I guess what you really want to do is define a group of records that are waited for. The "block" directive is just a way of getting around a real group definition syntax. With side effects.
In a different view: It looks like your "block=true" really defines something like a checkpoint ("proceed after all outstanding procs have finished") after the link it is attached to. Is there a way to declare such checkpoints within the array, but separate from the links?

Seems like the "block" directive introduces some dangerous mixture of data (link info) and control (group info, checkpoints). Should these things be rather separated?

Ralph


Replies:
Re: Link arrays / syntax Marty Kraimer
References:
[Fwd: Re: Link arrays / syntax] Marty Kraimer
Re: [Fwd: Re: Link arrays / syntax] Benjamin Franksen
Re: [Fwd: Re: Link arrays / syntax] Marty Kraimer

Navigate by Date:
Prev: RE: FW: Ice GPL based Licensing Jeff Hill
Next: Re: Link arrays / syntax Marty Kraimer
Index: 2002  2003  2004  <20052006  2007  2008  2009  2010  2011  2012  2013  2014  2015  2016  2017  2018  2019  2020  2021  2022  2023  2024 
Navigate by Thread:
Prev: Re: [Fwd: Re: Link arrays / syntax] Marty Kraimer
Next: Re: Link arrays / syntax Marty Kraimer
Index: 2002  2003  2004  <20052006  2007  2008  2009  2010  2011  2012  2013  2014  2015  2016  2017  2018  2019  2020  2021  2022  2023  2024 
ANJ, 02 Feb 2012 Valid HTML 4.01! · Home · News · About · Base · Modules · Extensions · Distributions · Download ·
· Search · EPICS V4 · IRMIS · Talk · Bugs · Documents · Links · Licensing ·