RFR: race with nested repos in hgforest.sh

David Holmes david.holmes at oracle.com
Wed Feb 6 01:53:40 UTC 2013


Hi Chris,

I don't speak fluent sh but ...

  204 # Terminate with exit 0 only if all subprocesses were successful
  205 ec=0
  206 if [ -d ${tmp} ]; then
  207   for rc in `ls ${tmp}/*.pid.rc` ; do

I don't think you need to subshell an invocation of ls, simply do

for rc in "${tmp}/*.pid.rc" ; do

  208     exit_code=`cat ${rc} | tr -d ' \n\r'`
  209     if [ "${exit_code}" != "0" ] ; then
  210       echo "WARNING: ${rc} exited abnormally."

Not sure printing ${rc} will be very informative there ??

  211       ec=1

Is there a "break" we can add here?

---

In get_source.sh

   # Get clones of all nested repositories
! sh ./common/bin/hgforest.sh clone "$@" || exit 1

   # Update all existing repositories to the latest sources
   sh ./common/bin/hgforest.sh pull -u

don't we want "|| exit 1" for the pull case as well?

Thanks,
David

On 6/02/2013 12:07 AM, Chris Hegarty wrote:
> On 02/05/2013 06:21 AM, David Holmes wrote:
>> Chris,
>>
>> When these failures occur does the failure get reflected in an error
>> exit code?
>
> Not currently, good point.
>
>> I'm seeing hudson builds merilly buildinh OpenJDK instead of Oracle JDK
>> because the closed repos were skipped due to this bug :(
>
> This is what I am seeing too, and the reason I proposed a patch to
> resolve it.
>
> Updated webrev;
> http://cr.openjdk.java.net/~chegar/hgforest_nestedRepos/webrev/
>
> 1) now checks, and returns, appropriate error code, so that higher
> level scripts can determine if it completed successfully
> 2) Added diagnostic error message to help identify potential future
> problems if a nested repo is blocked for too long
>
> -Chris.
>
>>
>> David
>>
>> On 2/02/2013 12:40 AM, Chris Hegarty wrote:
>>> [ to build-dev and core-libs-dev, expect reviewer from either, but will
>>> integrate through jdk8/tl ]
>>>
>>> This issue is mainly of interest to Oracle engineers, but it effects the
>>> public hgforest script.
>>>
>>> When hgforest.sh is run with an addition argument to specify a closed
>>> server, there is a problem/race between the creation of the directories
>>> to hold nested repositories and the clone itself. These directories need
>>> to be created before the clone command is executed, otherwise it will
>>> fail, as below.
>>>
>>> The trivial fix is to back off these nested repos until their containing
>>> directory exists.
>>>
>>> Webrev:
>>> http://cr.openjdk.java.net/~chegar/hgforest_nestedRepos/webrev/
>>>
>>> sh ./get_source.sh http://xxx.yyy.oracle.com | & tee clone.log
>>> # Repositories: corba jaxp jaxws langtools jdk hotspot jdk/src/closed
>>> jdk/make/closed jdk/test/closed hotspot/make/closed hotspot/src/closed
>>> hotspot/test/closed deploy install sponsors pubs
>>>
>>> Waiting 5 secs before spawning next background command.
>>> Waiting 5 secs before spawning next background command.
>>> Waiting 5 secs before spawning next background command.
>>> jdk/src/closed: /java/devtools/sparc/mercurial/0.9.5/bin/python -u
>>> /java/devtools/sparc/mercurial/latest/bin/hg clone
>>> http://xxx.yyy.oracle.com/jdk8/tl/jdk/src/closed jdk/src/closed
>>> jdk/src/closed: abort: No such file or directory: jdk/src/closed
>>> jdk/make/closed: /java/devtools/sparc/mercurial/0.9.5/bin/python -u
>>> /java/devtools/sparc/mercurial/latest/bin/hg clone
>>> http://xxx.yyy.oracle.com/jdk8/tl/jdk/make/closed jdk/make/closed
>>> jdk/make/closed: abort: No such file or directory: jdk/make/closed
>>> Waiting 5 secs before spawning next background command.
>>> ....
>>>
>>>
>>> -Chris.



More information about the core-libs-dev mailing list