Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package slurm for openSUSE:Factory checked in at 2022-07-13 13:45:23 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/slurm (Old) and /work/SRC/openSUSE:Factory/.slurm.new.1523 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "slurm" Wed Jul 13 13:45:23 2022 rev:74 rq:988733 version:22.05.2 Changes: -------- --- /work/SRC/openSUSE:Factory/slurm/slurm.changes 2022-05-31 16:04:53.608653468 +0200 +++ /work/SRC/openSUSE:Factory/.slurm.new.1523/slurm.changes 2022-07-13 13:45:44.846062405 +0200 @@ -1,0 +2,28 @@ +Mon Jun 20 09:23:17 UTC 2022 - Christian Goll <cg...@suse.com> + +- update to 22.05.2 with following fixes: + * Fix regression which allowed the oversubscription of licenses. + * Fix a segfault in slurmctld when requesting gres in job arrays. + +------------------------------------------------------------------- +Wed Jun 8 13:15:24 UTC 2022 - Egbert Eich <e...@suse.com> + +- Package the Slurm testsuite for QA purposes. + NOTE: This package is not meant to be used for testing by the + user but rather for testing by the maintainers to ensure the + package is working properly. + DO NOT report test suite failures unless you are able to confirm + that the failure is really a bug. + * Fixes for test suite: + Keep-logs-of-skipped-test-when-running-test-cases-sequentially.patch + Fix-test-21.41.patch + Fix-test-38.11.patch + Fix-test-32.8.patch + Fix-test-3.13.patch + Fix-test7.2-to-find-libpmix-under-lib64-as-well.patch + * Add documentation: + README_Testsuite.md +- Allow log in as user 'slurm'. This allows admins to run certain + priviledged commands more easily without becoming root. + +------------------------------------------------------------------- Old: ---- slurm-22.05.0.tar.bz2 New: ---- Fix-test-21.41.patch Fix-test-3.13.patch Fix-test-32.8.patch Fix-test-38.11.patch Fix-test7.2-to-find-libpmix-under-lib64-as-well.patch Keep-logs-of-skipped-test-when-running-test-cases-sequentially.patch README_Testsuite.md slurm-22.05.2.tar.bz2 test_setup.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ slurm.spec ++++++ --- /var/tmp/diff_new_pack.rrRvTg/_old 2022-07-13 13:45:45.442063251 +0200 +++ /var/tmp/diff_new_pack.rrRvTg/_new 2022-07-13 13:45:45.450063262 +0200 @@ -18,7 +18,7 @@ # Check file META in sources: update so_version to (API_CURRENT - API_AGE) %define so_version 38 -%define ver 22.05.0 +%define ver 22.05.2 %define _ver _22_05 %define dl_ver %{ver} # so-version is 0 and seems to be stable @@ -29,6 +29,8 @@ %define pname slurm +%define slurm_testsuite 1 + %ifarch i586 %arm s390 ExclusiveArch: do_not_build %endif @@ -49,7 +51,7 @@ %if 0%{?sle_version} == 150200 %define base_ver 2002 %endif -%if 0%{?sle_version} == 150300 +%if 0%{?sle_version} == 150300 || 0%{?sle_version} == 150400 %define base_ver 2011 %endif @@ -87,6 +89,7 @@ %define have_http_parser 1 %endif +# it seems as disabling slurmrestd has no effect on 22.05 %if 0%{?have_http_parser} && 0%{?have_json_c} %define build_slurmrestd 1 %endif @@ -124,7 +127,7 @@ %define slurm_g root %endif %define slurm_uid 120 -%define slurmdir %{_sysconfdir}/slurm +%define slurmdir %{_rundir}/slurm %define slurmdescr "SLURM workload manager" %define libslurm libslurm%{so_version} @@ -133,6 +136,9 @@ %if !0%{?_pam_moduledir:1} %define _pam_moduledir /%_lib %endif +%if !0%{?%_pam_secconfdir:1} +%define _pam_secconfdir %_sysconfdir/security +%endif Name: %{pname}%{?upgrade:%{_ver}} Version: %{ver} @@ -146,8 +152,17 @@ Source10: https://raw.githubusercontent.com/openSUSE/hpc/10c105e/files/slurm/slurmd.xml Source11: https://raw.githubusercontent.com/openSUSE/hpc/10c105e/files/slurm/slurmctld.xml Source12: https://raw.githubusercontent.com/openSUSE/hpc/10c105e/files/slurm/slurmdbd.xml +# create: tar --owner=nobody --group=nogroup -cvzf test_setup.tar.gz test_setup +Source20: test_setup.tar.gz +Source21: README_Testsuite.md Patch0: Remove-rpath-from-build.patch Patch2: pam_slurm-Initialize-arrays-and-pass-sizes.patch +Patch10: Fix-test-21.41.patch +Patch11: Fix-test-38.11.patch +Patch12: Fix-test-32.8.patch +Patch13: Fix-test-3.13.patch +Patch14: Keep-logs-of-skipped-test-when-running-test-cases-sequentially.patch +Patch15: Fix-test7.2-to-find-libpmix-under-lib64-as-well.patch %{?upgrade:Provides: %{pname} = %{version}} %{?upgrade:Conflicts: %{pname}} @@ -229,12 +244,14 @@ %package doc Summary: Documentation for SLURM Group: Documentation/HTML +BuildArch: noarch %{?upgrade:Provides: %{pname}-doc = %{version}} %{?upgrade:Conflicts: %{pname}-doc} %package webdoc Summary: Set up SLURM Documentation Server Group: Productivity/Clustering/Computing +BuildArch: noarch %if 0%{?have_apache_rpm_macros} BuildRequires: apache-rpm-macros %else @@ -500,6 +517,7 @@ %else Recommends: %{name}-munge = %version %endif +%{?with_pmix:Recommends: pmix-devel} %if 0%{?with_systemd} %{?systemd_ordering} %else @@ -515,6 +533,7 @@ Summary: Config files and directories for slurm services Group: Productivity/Clustering/Computing Requires: logrotate +BuildArch: noarch %if 0%{?suse_version} <= 1140 Requires(pre): pwdutils %else @@ -533,6 +552,7 @@ %package config-man Summary: Config files and directories for slurm services Group: Documentation/Man +BuildArch: noarch %{?upgrade:Provides: %{pname}-config-man = %{version}} %{?upgrade:Conflicts: %{pname}-config-man} @@ -556,12 +576,61 @@ Plugins for specific cray hardware, includes power and knl node management. Contains also cray specific documentation. +%package testsuite +Summary: Regression tests from Slurm sources +Group: Productivity/Clustering/Computing +Requires: %{name} = %version +Requires: %{name}-auth-none = %version +Requires: %{name}-cray = %version +Requires: %{name}-devel = %version +Requires: %{name}-hdf5 = %version +Requires: %{name}-lua = %version +Requires: %{name}-munge = %version +Requires: %{name}-node = %version +Requires: %{name}-openlava = %version +Requires: %{name}-rest = %version +Requires: %{name}-seff = %version +Requires: %{name}-sjstat = %version +Requires: %{name}-slurmdbd = %version +Requires: %{name}-sql = %version +Requires: %{name}-torque = %version +Requires: mariadb +%{?with_pmix:Requires: pmix-devel} +Requires: bzip2 +Requires: expect +Requires: gcc-c++ +Requires: libnuma-devel +Requires: openmpi4-gnu-hpc-devel +Requires: pdsh +Requires: perl-%{name} = %version +Requires: sudo +Requires: tar +BuildRequires: sudo + +%description testsuite +NOTE: THIS PACKAGE IS FOR TESTING PURPOSES ONLY. IT REQUIRES A +DEDICATED TESTING ENVIRONMENT. + +DO NOT INSTALL ON A PRODUCTION SYSTEM! + +Slurm provides a test set implemented as 'expect' scripts. +Not all of the tests are expected to pass, some require a modified +configuration. This test package is meant for internal purposes. +Do not run test suite and file bug reports for each failed test! + %prep %setup -q -n %{pname}-%{dl_ver} %patch0 -p1 #%%patch1 -p1 %patch2 -p1 #%%patch3 -p1 +%patch10 -p1 +%patch11 -p1 +%patch12 -p1 +%patch13 -p1 +%patch14 -p1 +%patch15 -p1 + %if 0%{?python_ver} < 3 # Workaround for wrongly flagged python3 to keep SLE-11-SP4 building mkdir -p mybin; ln -s /usr/bin/python2 mybin/python3 @@ -579,9 +648,9 @@ --without-datawarp \ --with-shared-libslurm \ --with-pam_dir=%_pam_moduledir \ - %{?with_pmix:--with-pmix=/usr/} \ -%if 0%{?build_slurmrestd} - --enable-slurmrestd \ + %{?with_pmix:--with-pmix=%_prefix/} \ +%if 0%{!?build_slurmrestd:1} + --disable-slurmrestd \ %endif --with-yaml \ %{!?have_netloc:--without-netloc} \ @@ -620,7 +689,6 @@ install -D -m644 etc/cgroup.conf.example %{buildroot}/%{_sysconfdir}/%{pname}/cgroup.conf install -D -m644 etc/slurm.conf.example %{buildroot}/%{_sysconfdir}/%{pname}/slurm.conf.example install -D -m600 etc/slurmdbd.conf.example %{buildroot}/%{_sysconfdir}/%{pname}/slurmdbd.conf -install -D -m600 etc/slurmdbd.conf.example %{buildroot}%{_sysconfdir}/%{pname}/slurmdbd.conf.example install -D -m755 contribs/sjstat %{buildroot}%{_bindir}/sjstat install -D -m755 contribs/sgather/sgather %{buildroot}%{_bindir}/sgather %if 0%{?have_firewalld} @@ -677,7 +745,8 @@ -e 's@After=\(.*\)@After=\1 mariadb.service@' \ %{buildroot}/%{_unitdir}/slurmdbd.service %if 0%{?have_sysuser} -echo "u %slurm_u %{slurm_uid} \"%slurmdescr\" %{slurmdir}\n" > system-user-%{pname}.conf +[ -e /usr/bin/bash ] && BASH_BIN=/usr/bin/bash || BASH_BIN=/bin/bash +echo "u %slurm_u %{slurm_uid} \"%slurmdescr\" %{slurmdir} ${BASH_BIN}" > system-user-%{pname}.conf %sysusers_generate_pre system-user-%{pname}.conf %{pname} system-user-%{pname}.conf install -D -m 644 system-user-%{pname}.conf %{buildroot}%{_sysusersdir}/system-user-%{pname}.conf %endif @@ -763,10 +832,84 @@ ## Specify if does not match hostname # NodeName myname EOF + +# Install testsuite +%if 0%{?slurm_testsuite} +# bug in testsuite +ln -sf /usr/lib64/libslurm.so %{buildroot}/usr/lib64/slurm/libslurm.so + +mkdir -p %{buildroot}/srv/slurm-testsuite +cd testsuite/expect +filelist="$(grep '#include' *.c | sed -ne 's/.*:#include *\"\([^\"]*\)\".*/\1/p' | sort | uniq)" +while true; do + oldfilelist=$filelist; tlist="" + for i in $filelist; do + nlist=" $(grep '#include' ../../$i | sed -ne 's/#include *\"\([^\"]*\)\".*/\1/p')" + tlist+=" $(for j in $nlist; do [ -e ../../$j ] && echo $j || true; done)" + done + filelist="$(for i in $filelist $tlist; do echo $i; done | sort | uniq)" + [ "$filelist" = "$oldfilelist" ] && break +done +filelist+=" $(grep -r "build_dir.*\.[oa]" | sed -e 's@.*[^ ]*{build_dir}/\([^\]*\.o\).*@\1@' | sort | uniq)" +cd - +newlist="" +for i in $filelist; do + dir=$(dirname $i) + [ -d %{buildroot}/srv/slurm-testsuite/$dir ] || mkdir -p %{buildroot}/srv/slurm-testsuite/$dir + cp -a $i %{buildroot}/srv/slurm-testsuite/$dir/ +done +mkdir -p %{buildroot}/srv/slurm-testsuite/testsuite/expect +cp -ax testsuite/expect %{buildroot}/srv/slurm-testsuite/testsuite/ +cat > %{buildroot}/srv/slurm-testsuite/testsuite/expect/globals.local <<EOF +set slurm_dir "/usr" +set build_dir "/srv/slurm-testsuite" +set src_dir "/srv/slurm-testsuite" +set mpicc [ exec which mpicc ] +set testsuite_user "auser" +#set testsuite_cleanup_on_failure false +EOF +mkdir -p %{buildroot}/srv/slurm-testsuite/shared +mkdir -p %{buildroot}%_localstatedir/lib/slurm/shared +cd %{buildroot}/srv/slurm-testsuite +tar --group=%slurm_g --owner=%slurm_u -cjf /tmp/slurmtest.tar.bz2 * +cd - +rm -rf %{buildroot}/srv/slurm-testsuite +mkdir -p %{buildroot}/srv/slurm-testsuite +mv /tmp/slurmtest.tar.bz2 %{buildroot}/srv/slurm-testsuite + +mkdir -p %{buildroot}/etc/sudoers.d +echo "slurm ALL=(auser) NOPASSWD:ALL" > %{buildroot}/etc/sudoers.d/slurm +chmod 0440 %{buildroot}/etc/sudoers.d/slurm + +SLURMD_SERVICE=%{buildroot}%_sysconfdir/systemd/system/slurmd.service +mkdir -p `dirname $SLURMD_SERVICE` +cp %{buildroot}/%_unitdir/slurmd.service $SLURMD_SERVICE +if grep -qE "^LimitNPROC" $SLURMD_SERVICE; then + sed -i -e '/LimitNPROC/s@=.*@=infinity@' $SLURMD_SERVICE +else + sed -i -e '/LimitSTACK/aLimitNPROC=infinity' $SLURMD_SERVICE +fi +sed -i -e '/ExecStart/aExecStartPre=/bin/bash -c "for i in 0 1 2 3; do test -e /dev/nvidia$i || mknod /dev/nvidia$i c 10 $((i+2)); done"' $SLURMD_SERVICE + +tar -xzf %{S:20} +mkdir -p %{buildroot}%{_pam_secconfdir}/limits.d +mv test_setup/slurm.conf.limits %{buildroot}%_pam_secconfdir/limits.d/slurm.conf + +mkdir -p %{buildroot}/root +mv test_setup/setup-testsuite.sh %{buildroot}/root + +mkdir -p %{buildroot}/srv/slurm-testsuite/config/plugstack.conf.d +mv test_setup/* %{buildroot}/srv/slurm-testsuite/config +cp %{S:21} . +%endif + %fdupes -s %{buildroot} + # Temporary - remove when build is fixed upstream. %if !0%{?build_slurmrestd} -rm -f %{buildroot}/%{_mandir}/man8/slurmrestd.* +rm -f %{buildroot}%{_mandir}/man8/slurmrestd.* +rm -f %{buildroot}%{_libdir}/slurm/openapi_*.so +rm -f %{buildroot}%{_libdir}/slurm/rest_auth_*.so %endif %check @@ -861,7 +1004,7 @@ %pre config %{?have_sysuser:-f %{pname}.pre} %if 0%{!?have_sysuser:1} getent group %slurm_g >/dev/null || groupadd -r %slurm_g -getent passwd %slurm_u >/dev/null || useradd -r -g %slurm_g -d %slurmdir -s /bin/false -c %{slurmdescr} %slurm_u +getent passwd %slurm_u >/dev/null || useradd -r -g %slurm_g -d %slurmdir -s /bin/bash -c %{slurmdescr} %slurm_u [ -d %{_localstatedir}/spool/slurm ] && /bin/chown -h %slurm_u:%slurm_g %{_localstatedir}/spool/slurm exit 0 %endif @@ -884,6 +1027,13 @@ %post -n libnss_%{pname}%{nss_so}%{?upgrade:%{_ver}} -p /sbin/ldconfig %postun -n libnss_%{pname}%{nss_so}%{?upgrade:%{_ver}} -p /sbin/ldconfig +%post testsuite +rm -rf /srv/slurm-testsuite/src /srv/slurm-testsuite/testsuite /srv/slurm-testsuite/config.h +tar --same-owner -C /srv/slurm-testsuite -xjf /srv/slurm-testsuite/slurmtest.tar.bz2 + +%preun testsuite +rm -rf /srv/slurm-testsuite/src /srv/slurm-testsuite/testsuite /srv/slurm-testsuite/config.h + %{!?nil: # On update the %%postun code of the old package restarts the # service. This breaks in case the ABI between slurm and its @@ -1015,7 +1165,7 @@ %files webdoc %{?comp_at} -%{apache_sysconfdir}/conf.d/slurm.conf +%config %{apache_sysconfdir}/conf.d/slurm.conf %files -n %{libslurm} %{?comp_at} @@ -1069,7 +1219,6 @@ %{_mandir}/man5/slurmdbd.* %{_mandir}/man8/slurmdbd.* %config(noreplace) %attr(0600,%slurm_u,%slurm_g) %{_sysconfdir}/%{pname}/slurmdbd.conf -%attr(0600,%slurm_u,%slurm_g) %{_sysconfdir}/%{pname}/slurmdbd.conf.example %if 0%{?with_systemd} %{_unitdir}/slurmdbd.service %else @@ -1105,7 +1254,9 @@ %{_libdir}/slurm/burst_buffer_lua.so %{?have_json_c:%{_libdir}/slurm/burst_buffer_datawarp.so} %{_libdir}/slurm/cgroup_v1.so +%if 0%{?suse_version} >= 1500 %{_libdir}/slurm/cgroup_v2.so +%endif %{_libdir}/slurm/core_spec_none.so %{_libdir}/slurm/cli_filter_none.so %{_libdir}/slurm/cli_filter_lua.so @@ -1310,4 +1461,23 @@ %{_libdir}/slurm/power_cray_aries.so %endif +%if 0%{?slurm_testsuite} +%files testsuite +%defattr(-, %slurm_u, %slurm_u, -) +%dir %attr(-, %slurm_u, %slurm_u) /srv/slurm-testsuite +%if 0%{?sle_version} == 120200 +%dir %{_pam_secconfdir}/limits.d +%endif +%doc testsuite/expect/README +%doc %{basename: %{S:21}} +%config %attr( -, root, root) %{_sysconfdir}/systemd/system/slurmd.service +%config %attr(0440, root, root) %{_sysconfdir}/sudoers.d/slurm +%config %attr( -, root, root) %{_pam_secconfdir}/limits.d/slurm.conf +%{_libdir}/slurm/libslurm.so +%attr(0600, %slurm_u, %slurm_g) /srv/slurm-testsuite/config/slurmdbd.conf +/srv/slurm-testsuite/* +%dir %attr(-, %slurm_u, %slurm_g) %_localstatedir/lib/slurm/shared +%attr( -, root, root) /root/setup-testsuite.sh +%endif + %changelog ++++++ Fix-test-21.41.patch ++++++ From: Egbert Eich <e...@suse.com> Date: Wed Jun 22 14:39:10 2022 +0200 Subject: Fix test 21.41 Patch-mainline: Not yet Git-repo: https://github.com/SchedMD/slurm Git-commit: 21619ffa15d1d656ee11a477ebb8215a06387fdd References: Since expect is not line oriented, the output is not matched line by line. Thus the order in which results are returned by sacctmgr actually matters: If the first test case matches what is returned first, this part will be consumed. If the 2nd test case will then match what is left over, the test will actually succeed. If this is not the case, ie if the first test matches a part that is actually sent later, the earlier parts will actually be forgotten and won't match at all. To make the test resilient to different order of results, the test has been rewritten to only contain a single match line. Signed-off-by: Egbert Eich <e...@suse.com> Signed-off-by: Egbert Eich <e...@suse.de> --- testsuite/expect/test21.41 | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/testsuite/expect/test21.41 b/testsuite/expect/test21.41 index c0961522db..1fd921a48f 100755 --- a/testsuite/expect/test21.41 +++ b/testsuite/expect/test21.41 @@ -372,21 +372,21 @@ expect { -re "There was a problem" { fail "There was a problem with the sacctmgr command" } - -re "$user1.$wckey1.($number)." { - set user1wckey1 $expect_out(1,string) - exp_continue - } - -re "$user2.$wckey1.($number)." { - set user2wckey1 $expect_out(1,string) - exp_continue - } - -re "$user1.$wckey2.($number)." { - set user1wckey2 $expect_out(1,string) - exp_continue - } - -re "$user2.$wckey2.($number)." { - set user2wckey2 $expect_out(1,string) - exp_continue + -re "($user1|$user2).($wckey1|$wckey2).($number)." { + if { $expect_out(1,string) eq $user1 } { + if { $expect_out(2,string) eq $wckey1 } { + set user1wckey1 $expect_out(3,string) + } elseif { $expect_out(2,string) eq $wckey2 } { + set user1wckey2 $expect_out(3,string) + } + } elseif { $expect_out(1,string) eq $user2 } { + if { $expect_out(2,string) eq $wckey1 } { + set user2wckey1 $expect_out(3,string) + } elseif { $expect_out(2,string) eq $wckey2 } { + set user2wckey2 $expect_out(3,string) + } + } + exp_continue } timeout { fail "sacctmgr wckeys not responding" ++++++ Fix-test-3.13.patch ++++++ From: Egbert Eich <e...@suse.com> Date: Wed Jun 15 08:40:50 2022 +0200 Subject: - Fix test 3.13 Patch-mainline: Not yet Git-repo: https://github.com/SchedMD/slurm Git-commit: cc82d21d77ccd4753ed56f80e14cfa13acd3643d References: Signed-off-by: Egbert Eich <e...@suse.com> Signed-off-by: Egbert Eich <e...@suse.de> --- testsuite/expect/test3.13 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/testsuite/expect/test3.13 b/testsuite/expect/test3.13 index bcce201215..9781ffcff9 100755 --- a/testsuite/expect/test3.13 +++ b/testsuite/expect/test3.13 @@ -109,7 +109,7 @@ log_info "Test 1" set no_jobs 0 spawn $scontrol update JobName=$script_name UserID=1 Priority=$new_prio expect { - -re "No jobs with" { + -re "Invalid UserID" { set no_jobs 1 exp_continue } @@ -130,7 +130,7 @@ set no_jobs 0 set my_uid [get_my_uid] spawn $scontrol update JobName=$script_name UserID=$my_uid Priority=$new_prio expect { - -re "No jobs with" { + -re "Invalid UserID" { set no_jobs 1 exp_continue } ++++++ Fix-test-32.8.patch ++++++ From: Egbert Eich <e...@suse.com> Date: Wed Jun 15 08:41:16 2022 +0200 Subject: Fix test 32.8 Patch-mainline: Not yet Git-repo: https://github.com/SchedMD/slurm Git-commit: 6641a03b1d1dfcb937617067f50c8069a04ec9b0 References: Signed-off-by: Egbert Eich <e...@suse.com> Signed-off-by: Egbert Eich <e...@suse.de> --- testsuite/expect/test32.8 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/testsuite/expect/test32.8 b/testsuite/expect/test32.8 index 76f65c3ccc..61dba8759b 100755 --- a/testsuite/expect/test32.8 +++ b/testsuite/expect/test32.8 @@ -86,7 +86,7 @@ if {$job_id == 0} { } wait_for_job -fail $job_id "DONE" -wai_for_file -fail $file_out +wait_for_file -fail $file_out set number_1 -1 set number_2 -1 ++++++ Fix-test-38.11.patch ++++++ From: Egbert Eich <e...@suse.com> Date: Wed Jun 15 08:41:45 2022 +0200 Subject: Fix test 38.11 Patch-mainline: Not yet Git-repo: https://github.com/SchedMD/slurm Git-commit: 235768790cb2e9cf011e6d08116a468ebec71582 References: Signed-off-by: Egbert Eich <e...@suse.com> Signed-off-by: Egbert Eich <e...@suse.de> --- testsuite/expect/test38.11 | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/testsuite/expect/test38.11 b/testsuite/expect/test38.11 index d2c07d60c7..bf5d10ecc9 100755 --- a/testsuite/expect/test38.11 +++ b/testsuite/expect/test38.11 @@ -99,9 +99,9 @@ make_bash_script $script " $srun -N1 -n1 --het-group=0 mkdir -p $tmp_dir/$node1 $srun -N1 -n1 --het-group=1 mkdir -p $tmp_dir/$node2 -$sbcast -f -j$het_job_id $srun $tmp_dir/file -$sbcast -f -j${het_job_id}+0 $srun $tmp_dir/$node1/file_comp0 -$sbcast -f -j${het_job_id}+1 $srun $tmp_dir/$node2/file_comp1 +$sbcast -f -j\$SLURM_JOBID $srun $tmp_dir/file +$sbcast -f -j\$SLURM_JOBID $srun $tmp_dir/$node1/file_comp0 +$sbcast -f -j\$((SLURM_JOBID+1)) $srun $tmp_dir/$node2/file_comp1 echo -n \"\nChecking node 1: \" $srun -Q -N1 -n1 --het-group=1 ls $tmp_dir/file ++++++ Fix-test7.2-to-find-libpmix-under-lib64-as-well.patch ++++++ From: Egbert Eich <e...@suse.com> Date: Sat Jul 2 11:25:11 2022 +0200 Subject: Fix test7.2 to find libpmix under lib64 as well Patch-mainline: Not yet Git-repo: https://github.com/SchedMD/slurm Git-commit: 4771b96995f90a64a828aac16a10bd56db61a711 References: Signed-off-by: Egbert Eich <e...@suse.com> Signed-off-by: Egbert Eich <e...@suse.de> --- testsuite/expect/test7.2 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/testsuite/expect/test7.2 b/testsuite/expect/test7.2 index 9d1f1a2dee..f63ecd643e 100755 --- a/testsuite/expect/test7.2 +++ b/testsuite/expect/test7.2 @@ -42,7 +42,7 @@ if {[get_config_param "SwitchType"] eq "switch/cray"} { skip "This test is incompatible with Cray systems" } -if { [file exists ${slurm_dir}/lib/libpmi.so] == 0 } { +if { ![file exists ${slurm_dir}/lib/libpmi.so] && ![file exists ${slurm_dir}/lib64/libpmi.so]} { skip "PMI library not compiled, can't perform pmi testing" } ++++++ Keep-logs-of-skipped-test-when-running-test-cases-sequentially.patch ++++++ From: Egbert Eich <e...@suse.com> Date: Wed Jun 22 16:32:35 2022 +0200 Subject: Keep logs of skipped test when running test cases sequentially. Patch-mainline: Not yet Git-repo: https://github.com/SchedMD/slurm Git-commit: 457a53ca97b50530bb2fafda72d465507c434960 References: Signed-off-by: Egbert Eich <e...@suse.com> Signed-off-by: Egbert Eich <e...@suse.de> --- testsuite/expect/regression.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/testsuite/expect/regression.py b/testsuite/expect/regression.py index bcccaadbf5..b39af0c4e2 100755 --- a/testsuite/expect/regression.py +++ b/testsuite/expect/regression.py @@ -199,7 +199,8 @@ def main(argv=None): sys.stdout.write('SKIPPED\n') if not options.keep_logs: try: - os.remove(testlog_name) +# os.remove(testlog_name) + os.rename(testlog_name, testlog_name+'.skipped') except IOError as e: print('ERROR failed to close %s %s' % (testlog_name, e), file=sys.stederr); ++++++ README_Testsuite.md ++++++ # Running the Slurm 'expect' Testsuite The ```slurm-testsuite``` package contains the Slurm expect test suite. This package is meant to be installed on a test setup only, it should NEVER BE INSTALLED ON A REGULAR OR EVEN PRODUCTION SYSTEM. SUSE uses this package to determine regressions and for quality assurance. The results are monitored and evaluated regularly in house. A specific configuration is required to run this test suite, this document attempts to describe the steps needed. A small subset of tests is currently failing. The reasons are yet to be determined. Please do not file bug reports based on test results! The testsuite is preconfigured to work with 4 nodes: ```node01```,..., ```node04```. ```node01``` serves as control and compute node. The slurm configuration, home, and the test suite are shared across the nodes. The test suite should be mounted under /home (to make ```sgather``` work correctly). For tests involving MPI this test suite currently uses OpenMPI version 4. ## Install and set up the Base System 1. Prepare image with a minimal minimal text mode installation. 2. Add NFS kernel server support: ``` # zypper install nfs-kernel-server ``` 3. Install, enable and start sshd and make sure root is able to log in without password across all nodes. ``` # zypper install openssh-server openssh-clients # systemctl enable --now sshd # ssh-keygen -t rsa -f .ssh/id_rsa -N # cat .ssh/id_rsa.pub >> .ssh/authorized_keys ``` 4. Create a test user 'auser' allow ssh from/to root: ``` # useradd -m auser # cp -r /root/.ssh /home/auser ``` 5. Set up a persistent network if to obtain the network address and hostname thru DHCP: ``` # echo 'SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", '\ 'ATTR{address}=="?*", ATTR{dev_id}=="0x0", ATTR{type}=="1",'\ ' KERNEL=="?*", NAME="lan0" # cat > root/etc/sysconfig/network/ifcfg-lan0 <<EOF BOOTPROTO='dhcp' MTU='' REMOTE_IPADDR='' STARTMODE='onboot' EOF # sed -i 's/DHCLIENT_SET_HOSTNAME="no"/DHCLIENT_SET_HOSTNAME="yes"/' \ /etc/sysconfig/network/dhcp ``` ## Install and set up the Slurm specific Environment 1. Install package slurm-testsuite. 2. Set up, enable mariadb, add slurm accounting database: ``` # sed -i -e "/^bind-address/s@\(^.*$\)@# \1@" /etc/my.cnf # systemctl start maridb # mysql -uroot -e "create user 'slurm'@'node01' identified by 'linux';" # mysql -uroot -e "create database slurm_acct_db;" # mysql -uroot -e "grant all on slurm_acct_db.* TO 'slurm'@'node01';" ``` 3. Set up shared home, testsuite and slurm config directories, enable NFS server: ``` # mkdir -p /srv/home # mv /home/auser /srv/home # mkdir /home/slurm-testsuite # chown slurm:slurm /home/slurm-testsuite # cat >> /etc/exports <<EOF /srv/home *(rw,no_subtree_check,sync,no_root_squash) /srv/slurm-testsuite *(rw,no_subtree_check,sync,no_root_squash) /srv/slurm-testsuite/shared *(rw,no_subtree_check,sync,no_root_squash) /srv/slurm-testsuite/config *(rw,no_subtree_check,sync,no_root_squash) EOF # cat >> /etc/fstab <<EOF node01:/srv/home /home nfs sync,hard,rw 0 0 node01:/srv/slurm-testsuite/config /etc/slurm nfs sync,hard,rw 0 0 node01:/srv/slurm-testsuite/shared /var/lib/slurm/shared nfs sync,hard,rw 0 0 node01:/srv/slurm-testsuite /home/slurm-testsuite nfs sync,hard,rw 0 0 # systemctl enable nfs-server ``` # Clone Nodes and bring up Test System 1. Now halt the system and duplicate it 3 times. 2. Set up the dhcp server and make sure the nodes receive the hostnames ``node01```,..., ```node04```. 3. Enable munge and slurmd: ``` # systemctl enable munge # systemctl enable slurmd ``` 4. Boot all 4 nodes (start with ```node01```). 5. On ```node01```, log in as ```root``` and run ```setup-testsuite.sh```: ``` # ./setup-testsuite.sh ``` 6. Load the environment and run the tests as user 'slurm': ``` # sudo -s -u slurm $ module load gnu openmpi $ cd /home/test/home/slurm-testsuite/testsuite/expect $ ./regression.py ``` There are a number of tests which require a different configuration and thus will be skipped. For a number of these, the alternatives are documented in the config file shipped with this package. A small number of tests fail for yet unknown reasons. Also, when run sequentially, some tests may fail intermittendly as the test suite is not race free. Often the reason for this is that tests try to determine the availability of resources and may behave incorrectly if an insufficient number is marked 'idle'. This problem may be less pronounced when more resources (nodes) are available. Usually, these issues will not show when tests are run manually. Therefore, it is important the re-check failed tests manually. ++++++ slurm-22.05.0.tar.bz2 -> slurm-22.05.2.tar.bz2 ++++++ /work/SRC/openSUSE:Factory/slurm/slurm-22.05.0.tar.bz2 /work/SRC/openSUSE:Factory/.slurm.new.1523/slurm-22.05.2.tar.bz2 differ: char 11, line 1 ++++++ slurm-rpmlintrc ++++++ --- /var/tmp/diff_new_pack.rrRvTg/_old 2022-07-13 13:45:45.598063472 +0200 +++ /var/tmp/diff_new_pack.rrRvTg/_new 2022-07-13 13:45:45.598063472 +0200 @@ -2,18 +2,50 @@ addFilter(".*obsolete-not-provided slurmdb-direct.*") # libslurm provides an ABI and a wire protocol. The wire protocol may change -# with any SLURM version in an incompatible way. Therefore, multiple versions -# of libslurm should not be installed on the same system. -# Thus, libraries depending on libslurm need to match the installed SLURM +# with any Slurm version in an incompatible way. The wire protocol is +# implemented in the library libslurm. +# Therefore, multiple versions of libslurm should not be installed on the +# same system. +# Thus, libraries depending on libslurm need to match the installed Slurm # version - independent of their major versions. -# To host multiple SLURM versions in the same repository we add the version +# To host multiple Slurm versions in the same repository we add the version # string to package names for none-base versions - even to library packages. # This mainly applies to upgrade packages for Leap and SLE in the maintenance # channel. -addFilter("libnss_slurm\d_\d{2}_\d{2}.*: .* shlib-policy-name-error.*") +addFilter("libnss_slurm\d_\d{2}_\d{2}.*: E: shlib-policy-name-error.*") -# slurms uses shared libraries for its plugins, so these plugins can have +# slurms uses shared libraries for its plugins, so these plugins can have # no dependency information addFilter(".*shared-library-without-dependency-information /usr/lib64/slurm/.*so") +# Our logrotate file names are derived from the service name. +addFilter(".* E: incoherent-logrotate-file /etc/logrotate.d/slurm.*\.conf") + +# ? Why should we package the log dir? +addFilter(".*: E: logrotate-log-dir-not-packaged /var/log") +# these packages contain %service_del_postun_without_restart - +# which we define if it is not defined. This needs to be kept +# as long as we need to support the HPC module for SLE-12. +addFilter("slurm(|-node|-slurmdbd)\..*: systemd-service-without-service_del_postun .*") + +# Testsuite is not meant to be installed on a user system. +# The idea is to place the test suite into a package mostly unaltered +# to place it to a test rig without requiring to install the full Slurm +# sources. +# ... and in the same vein +addFilter("slurm(|_.*)-testsuite.*: E: filelist-forbidden-opt /opt/slurmtest") +# This is by intention - the test suite requires a test suite specific +# systemd unit file. +addFilter("slurm(|_.*)-testsuite.*: E: filelist-forbidden-systemd-userdirs") +# It is not a devel package but a test suite. The test suite is designed to +# build test binaries when it is executed. +addFilter("slurm(|_.*)-testsuite.*: E: devel-file-in-non-devel-package") +# We want to give root a script to set up the test system +addFilter("slurm(|_.*)-testsuite.*: E: filelist-forbidden-fhs23 /root") +# Testsuite needs this as it builds test binaries. +addFilter("slurm(|_.*)-testsuite.*: devel-dependency libnuma-devel") +addFilter("slurm(|_.*)-testsuite.*: E: explicit-lib-dependency libnuma-devel") +# To reduce the amount of preparation, the test suite supplies all required +# settings. +addFilter("slurm(|_.*)-testsuite.*: sudoers-file-unauthorized .*")