Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Make EasyBuild first recheck dependencies when using --wait-on-lock-* #4059

Open
anselmicz opened this issue Aug 16, 2022 · 0 comments
Open

Comments

@anselmicz
Copy link

anselmicz commented Aug 16, 2022

Problem description
Hi. Recently, I have been making two compilations with common dependencies on the same filesystem, utilizing the robot, wait-on-lock-limit and wait-on-lock-interval features. The first process got to a point where it had to wait for the other to release the lock, i. e. the second process was currently compiling the first process' required dependency. After the lock was released, EasyBuild rebuilt said dependency instead of checking first whether the dependency is satisfied, which is not at all something I understood from the description of wait-on-lock-limit and wait-on-lock-interval functions (eb --confighelp) or from the documentation.

Example

easybuild@login1:/apps/easybuild/easyconfigs-it4i/y/Yambo [it4i-karolina]$ eb Yambo-5.1.0-intel-2020a.eb
== Temporary log file in case of crash /tmp/eb-lt_spzi5/easybuild-3wn2wnn7.log
== resolving dependencies ...

No conflicts detected!

== Temporary log file(s) /tmp/eb-lt_spzi5/easybuild-3wn2wnn7.log* have been removed.
== Temporary directory /tmp/eb-lt_spzi5 has been removed.
== Temporary log file in case of crash /tmp/eb-w8vj9m4r/easybuild-rki71avs.log
== resolving dependencies ...
== processing EasyBuild easyconfig /apps/easybuild/easyconfigs-it4i/l/libxc/libxc-5.1.5-intel-2020a.eb
== building and installing libxc/5.1.5-intel-2020a...
  >> installation prefix: /apps/all/libxc/5.1.5-intel-2020a
== lock /apps/easybuild/.locks/_apps_all_libxc_5.1.5-intel-2020a.lock exists, waiting 60 seconds...
== lock /apps/easybuild/.locks/_apps_all_libxc_5.1.5-intel-2020a.lock exists, waiting 60 seconds...
== lock /apps/easybuild/.locks/_apps_all_libxc_5.1.5-intel-2020a.lock exists, waiting 60 seconds...
== lock /apps/easybuild/.locks/_apps_all_libxc_5.1.5-intel-2020a.lock exists, waiting 60 seconds...
== lock /apps/easybuild/.locks/_apps_all_libxc_5.1.5-intel-2020a.lock exists, waiting 60 seconds...
== lock /apps/easybuild/.locks/_apps_all_libxc_5.1.5-intel-2020a.lock exists, waiting 60 seconds...
== lock /apps/easybuild/.locks/_apps_all_libxc_5.1.5-intel-2020a.lock exists, waiting 60 seconds...
== lock /apps/easybuild/.locks/_apps_all_libxc_5.1.5-intel-2020a.lock exists, waiting 60 seconds...
== lock /apps/easybuild/.locks/_apps_all_libxc_5.1.5-intel-2020a.lock exists, waiting 60 seconds...
== lock /apps/easybuild/.locks/_apps_all_libxc_5.1.5-intel-2020a.lock exists, waiting 60 seconds...
== lock /apps/easybuild/.locks/_apps_all_libxc_5.1.5-intel-2020a.lock exists, waiting 60 seconds...
== lock /apps/easybuild/.locks/_apps_all_libxc_5.1.5-intel-2020a.lock exists, waiting 60 seconds...
== lock /apps/easybuild/.locks/_apps_all_libxc_5.1.5-intel-2020a.lock exists, waiting 60 seconds...
== lock /apps/easybuild/.locks/_apps_all_libxc_5.1.5-intel-2020a.lock exists, waiting 60 seconds...
== lock /apps/easybuild/.locks/_apps_all_libxc_5.1.5-intel-2020a.lock exists, waiting 60 seconds...
== lock /apps/easybuild/.locks/_apps_all_libxc_5.1.5-intel-2020a.lock exists, waiting 60 seconds...
== fetching files...
  >> sources:
  >> /mnt/proj3/easybuild/sources/l/libxc/libxc-5.1.5.tar.gz [SHA256: 02e4615a22dc3ec87a23efbd3d9be5bfad2445337140bad1720699571c45c3f9]
== ... (took < 1 sec)
== creating build dir, resetting environment...
  >> build dir: /dev/shm/easybuild/build/libxc/5.1.5/intel-2020a
== starting iteration #0 ...

Steps to reproduce the behavior

  1. Begin compiling the dependency.
  2. Begin compiling your required software whose dependency you are compiling at 1).
  3. After 1) releases its lock, 2) recompiles the dependency and then proceeds as normal.

Attempt at reproduction

Dependency compilation:

easybuild@cn80:/apps/easybuild/easyconfigs-develop/easybuild/easyconfigs/i/ICU [develop]$ eb ICU-71.1-GCCcore-11.3.0.eb
== Temporary log file in case of crash /tmp/eb-3m7i4sxe/easybuild-vu_k4r3v.log
== resolving dependencies ...

No conflicts detected!

== Temporary log file(s) /tmp/eb-3m7i4sxe/easybuild-vu_k4r3v.log* have been removed.
== Temporary directory /tmp/eb-3m7i4sxe has been removed.
== Temporary log file in case of crash /tmp/eb-uxxfcco3/easybuild-pq_i0i3k.log
== resolving dependencies ...
== processing EasyBuild easyconfig /apps/easybuild/easyconfigs-develop/easybuild/easyconfigs/i/ICU/ICU-71.1-GCCcore-11.3.0.eb
== building and installing ICU/71.1-GCCcore-11.3.0...
  >> installation prefix: /apps/all/ICU/71.1-GCCcore-11.3.0
== fetching files...
  >> download succeeded: https://github.com/unicode-org/icu/releases/download/release-71-1/icu4c-71_1-src.tgz
  >> sources:
  >> /mnt/proj3/easybuild/sources/i/ICU/icu4c-71_1-src.tgz [SHA256: 67a7e6e51f61faf1306b6935333e13b2c48abd8da6d2f46ce6adca24b1e21ebf]
== ... (took 5 secs)
== creating build dir, resetting environment...
  >> build dir: /dev/shm/easybuild/build/ICU/71.1/GCCcore-11.3.0
== ... (took < 1 sec)
== unpacking...
  >> running command:
        [started at: 2022-08-16 12:24:20]
        [working dir: /dev/shm/easybuild/build/ICU/71.1/GCCcore-11.3.0]
        [output logged in /tmp/eb-uxxfcco3/easybuild-run_cmd-16ry4868.log]
        tar xzf /mnt/proj3/easybuild/sources/i/ICU/icu4c-71_1-src.tgz
  >> command completed: exit 0, ran in < 1s
== ... (took < 1 sec)
== patching...
== ... (took < 1 sec)
== preparing...
  >> loading toolchain module: GCCcore/11.3.0
  >> loading modules for build dependencies:
  >>  * binutils/2.38-GCCcore-11.3.0
  >>  * Python/3.10.4-GCCcore-11.3.0-bare
  >> (no (runtime) dependencies specified)
  >> defining build environment for GCCcore/11.3.0 toolchain
== ... (took 1 secs)
== configuring...
  >> running command:
        [started at: 2022-08-16 12:24:22]
        [working dir: /dev/shm/easybuild/build/ICU/71.1/GCCcore-11.3.0/icu/source]
        [output logged in /tmp/eb-uxxfcco3/easybuild-run_cmd-n961zcfr.log]
        /mnt/proj3/easybuild/sources/generic/eb_v4.6.0/ConfigureMake/config.guess
  >> command completed: exit 0, ran in < 1s
  >> running command:
        [started at: 2022-08-16 12:24:22]
        [working dir: /dev/shm/easybuild/build/ICU/71.1/GCCcore-11.3.0/icu/source]
        [output logged in /tmp/eb-uxxfcco3/easybuild-run_cmd-v4f54bi9.log]
        ./configure --prefix=/apps/all/ICU/71.1-GCCcore-11.3.0  --build=x86_64-pc-linux-gnu  --host=x86_64-pc-linux-gnu
  >> command completed: exit 0, ran in 00h00m04s
== ... (took 5 secs)
== building...
  >> running command:
        [started at: 2022-08-16 12:24:27]
        [working dir: /dev/shm/easybuild/build/ICU/71.1/GCCcore-11.3.0/icu/source]
        [output logged in /tmp/eb-uxxfcco3/easybuild-run_cmd-gmrzxz5n.log]
        make  -j 36
  >> command completed: exit 0, ran in 00h00m26s
== ... (took 26 secs)
== testing...
== ... (took < 1 sec)
== installing...
  >> running command:
        [started at: 2022-08-16 12:24:54]
        [working dir: /dev/shm/easybuild/build/ICU/71.1/GCCcore-11.3.0/icu/source]
        [output logged in /tmp/eb-uxxfcco3/easybuild-run_cmd-rhgr8cgs.log]
        make install
  >> command completed: exit 0, ran in 00h00m01s
== ... (took 1 secs)
== taking care of extensions...
== ... (took < 1 sec)
== restore after iterating...
== ... (took < 1 sec)
== postprocessing...
== ... (took < 1 sec)
== sanity checking...
  >> file 'lib/libicudata.so' found: OK
  >> file 'lib/libicui18n.so' found: OK
  >> file 'lib/libicuio.so' found: OK
  >> file 'lib/libicutest.so' found: OK
  >> file 'lib/libicutu.so' found: OK
  >> file 'lib/libicuuc.so' found: OK
  >> (non-empty) directory 'bin' found: OK
  >> (non-empty) directory 'include/unicode' found: OK
  >> (non-empty) directory 'share/icu' found: OK
  >> (non-empty) directory 'share/man' found: OK
  >> loading modules: ICU/71.1-GCCcore-11.3.0...
== ... (took < 1 sec)
== cleaning up...
== ... (took < 1 sec)
== creating module...
  >> generating module file @ /apps/modules/all/ICU/71.1-GCCcore-11.3.0.lua
== ... (took < 1 sec)
== permissions...
== ... (took < 1 sec)
== packaging...
== ... (took < 1 sec)
== COMPLETED: Installation ended successfully (took 42 secs)
== Results of the build can be found in the log file(s) /apps/all/ICU/71.1-GCCcore-11.3.0/easybuild/easybuild-ICU-71.1-20220816.122457.log

== Build succeeded for 1 out of 1
== Temporary log file(s) /tmp/eb-uxxfcco3/easybuild-pq_i0i3k.log* have been removed.
== Temporary directory /tmp/eb-uxxfcco3 has been removed.

Compiling dependent software:

easybuild@cn80:/apps/easybuild/easyconfigs-develop/easybuild/easyconfigs/b/Boost [develop]$ eb Boost-1.79.0-GC
C-11.3.0.eb
== Temporary log file in case of crash /tmp/pbs.623215.isrv1/eb-ocne0gx1/easybuild-sb5200bi.log
== resolving dependencies ...

No conflicts detected!

== Temporary log file(s) /tmp/pbs.623215.isrv1/eb-ocne0gx1/easybuild-sb5200bi.log* have been removed.
== Temporary directory /tmp/pbs.623215.isrv1/eb-ocne0gx1 has been removed.
== Temporary log file in case of crash /tmp/pbs.623215.isrv1/eb-77iz8xq0/easybuild-26g2hghw.log
== resolving dependencies ...
== processing EasyBuild easyconfig
/apps/easybuild/easyconfigs-master/easybuild/easyconfigs/i/ICU/ICU-71.1-GCCcore-11.3.0.eb
== building and installing ICU/71.1-GCCcore-11.3.0...
  >> installation prefix: /apps/all/ICU/71.1-GCCcore-11.3.0
== lock /apps/easybuild/.locks/_apps_all_ICU_71.1-GCCcore-11.3.0.lock exists, waiting 60 seconds...
== fetching files...
  >> sources:
  >> /mnt/proj3/easybuild/sources/i/ICU/icu4c-71_1-src.tgz [SHA256:
67a7e6e51f61faf1306b6935333e13b2c48abd8da6d2f46ce6adca24b1e21ebf]
== ... (took < 1 sec)
== creating build dir, resetting environment...
  >> build dir: /dev/shm/easybuild/build/ICU/71.1/GCCcore-11.3.0
== ... (took < 1 sec)
== unpacking...
  >> running command:
        [started at: 2022-08-16 12:25:19]
        [working dir: /dev/shm/easybuild/build/ICU/71.1/GCCcore-11.3.0]
        [output logged in /tmp/pbs.623215.isrv1/eb-77iz8xq0/easybuild-run_cmd-qioj6dwu.log]
        tar xzf /mnt/proj3/easybuild/sources/i/ICU/icu4c-71_1-src.tgz
  >> command completed: exit 0, ran in < 1s
== ... (took < 1 sec)
== patching...
== ... (took < 1 sec)
== preparing...
  >> loading toolchain module: GCCcore/11.3.0
  >> loading modules for build dependencies:
  >>  * binutils/2.38-GCCcore-11.3.0
  >>  * Python/3.10.4-GCCcore-11.3.0-bare
  >> (no (runtime) dependencies specified)
  >> defining build environment for GCCcore/11.3.0 toolchain
== ... (took < 1 sec)
== configuring...
  >> running command:
        [started at: 2022-08-16 12:25:21]
        [working dir: /dev/shm/easybuild/build/ICU/71.1/GCCcore-11.3.0/icu/source]
        [output logged in /tmp/pbs.623215.isrv1/eb-77iz8xq0/easybuild-run_cmd-1hl7yycb.log]
        /mnt/proj3/easybuild/sources/generic/eb_v4.6.0/ConfigureMake/config.guess
  >> command completed: exit 0, ran in < 1s
  >> running command:
        [started at: 2022-08-16 12:25:21]
        [working dir: /dev/shm/easybuild/build/ICU/71.1/GCCcore-11.3.0/icu/source]
        [output logged in /tmp/pbs.623215.isrv1/eb-77iz8xq0/easybuild-run_cmd-8vc0bx1e.log]
        ./configure --prefix=/apps/all/ICU/71.1-GCCcore-11.3.0  --build=x86_64-pc-linux-gnu
--host=x86_64-pc-linux-gnu
  >> command completed: exit 0, ran in 00h00m03s
== ... (took 3 secs)
== building...
  >> running command:
        [started at: 2022-08-16 12:25:25]
        [working dir: /dev/shm/easybuild/build/ICU/71.1/GCCcore-11.3.0/icu/source]
        [output logged in /tmp/pbs.623215.isrv1/eb-77iz8xq0/easybuild-run_cmd-bdt2m7jt.log]
        make  -j 36
  >> command completed: exit 0, ran in 00h00m26s
== ... (took 26 secs)
== testing...
== ... (took < 1 sec)
== installing...
  >> running command:
        [started at: 2022-08-16 12:25:51]
        [working dir: /dev/shm/easybuild/build/ICU/71.1/GCCcore-11.3.0/icu/source]
        [output logged in /tmp/pbs.623215.isrv1/eb-77iz8xq0/easybuild-run_cmd-ancck6fk.log]
        make install
  >> command completed: exit 0, ran in 00h00m01s
== ... (took 1 secs)
== taking care of extensions...
== ... (took < 1 sec)
== restore after iterating...
== ... (took < 1 sec)
== postprocessing...
== ... (took < 1 sec)
== sanity checking...
  >> file 'lib/libicudata.so' found: OK
  >> file 'lib/libicui18n.so' found: OK
  >> file 'lib/libicuio.so' found: OK
  >> file 'lib/libicutest.so' found: OK
  >> file 'lib/libicutu.so' found: OK
  >> file 'lib/libicuuc.so' found: OK
  >> (non-empty) directory 'bin' found: OK
  >> (non-empty) directory 'include/unicode' found: OK
  >> (non-empty) directory 'share/icu' found: OK
  >> (non-empty) directory 'share/man' found: OK
  >> loading modules: ICU/71.1-GCCcore-11.3.0...
== ... (took < 1 sec)
== cleaning up...
== ... (took < 1 sec)
== creating module...
  >> generating module file @ /apps/modules/all/ICU/71.1-GCCcore-11.3.0.lua
== ... (took < 1 sec)
== permissions...
== ... (took < 1 sec)
== packaging...
== ... (took < 1 sec)
== COMPLETED: Installation ended successfully (took 1 min 35 secs)
== Results of the build can be found in the log file(s)
/apps/all/ICU/71.1-GCCcore-11.3.0/easybuild/easybuild-ICU-71.1-20220816.122554.log
== processing EasyBuild easyconfig
/apps/easybuild/easyconfigs-develop/easybuild/easyconfigs/b/Boost/Boost-1.79.0-GCC-11.3.0.eb
== building and installing Boost/1.79.0-GCC-11.3.0...
... (continues as usual) ...

Expected behavior

EasyBuild confighelp states the following:

...
# Wait interval (in seconds) to use when waiting for existing lock to be removed (type <class 'int'>; default: 60)
#wait-on-lock-interval=
# Maximum amount of time (in seconds) to wait until lock is released (0 means no waiting at all, exit with error; -1 means no waiting limit, keep waiting) (type <class 'int'>; default: 0)
#wait-on-lock-limit=
...

The precise behavior of these parameters is ambiguous and can lead to situations like mine; I was expecting EasyBuild to first check if the dependency was already satisfied instead of recompiling it (note that this compilation was not run with --force).

Where to reproduce

Due to the nature of the problem, it is reproducible on any system.

Additional context

We often compile software in parallel; I am not the only person at my workplace who is responsible for software. Situation described above happened to us more than once.

@Micket Micket added this to the 4.x milestone Aug 16, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants