Skip to content

Commit f9fbb72

Browse files
committed
Issue #780: added tests to catch failure and fix
1 parent d752d58 commit f9fbb72

File tree

6 files changed

+238
-1
lines changed

6 files changed

+238
-1
lines changed

rt/cached_loads/cached_loads.tdesc

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,38 @@ testdescript = {
102102
runLmod use $(testDir)/fallback_test_dir #22
103103
runLmod load toolchain/gcc #23 - Should show FALLBACK only for fallback_test_dir
104104
105+
#----------------------------------------
106+
# Issue #780: Core regression test - MODULEPATH modified in same call
107+
# Test that module B can be loaded in same call as module A when A modifies MODULEPATH
108+
# This is the core regression: loading A and B together where A adds MODULEPATH containing B
109+
#----------------------------------------
110+
runLmod purge #24
111+
unsetMT
112+
export MODULEPATH_ROOT=$(testDir)/mf3
113+
export MODULEPATH=$MODULEPATH_ROOT/Core
114+
unset LMOD_CACHED_LOADS
115+
unset LMOD_IGNORE_CACHE
116+
117+
# Core regression test: Load modA and modB in same call where modA modifies MODULEPATH
118+
# modA adds NewPath, modB is in NewPath - both should load successfully
119+
runLmod load modA modB #25 - Should succeed: modA adds NewPath, modB is in NewPath
120+
runLmod list #26 - Verify both modules loaded and active
121+
122+
# Test with cached loads enabled
123+
runLmod purge #27
124+
export LMOD_CACHED_LOADS=1
125+
runLmod load modA modB #28 - Should work with cached loads too
126+
runLmod list #29
127+
unset LMOD_CACHED_LOADS
128+
129+
# Test reloading modules when MODULEPATH changes
130+
# Load modA first, then load modB (modA should remain active)
131+
runLmod purge #30
132+
runLmod load modA #31 - Load modA first
133+
runLmod list #32 - Verify modA is loaded
134+
runLmod load modB #33 - Load modB, which should work and modA should remain active
135+
runLmod list #34 - Both should be active
136+
105137
HOME=$ORIG_HOME
106138
cat _stdout.[0-9][0-9][0-9] > _stdout.orig
107139
joinBase64Results -bash _stdout.orig _stdout.new

rt/cached_loads/err.txt

Lines changed: 53 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
step 1
33
lua ProjectDIR/src/lmod.in.lua shell --regression_testing --version
44
===========================
5-
Modules based on Lua: Version 8.7.64 2025-07-08 12:40 -06:00
5+
Modules based on Lua: Version 9.0.4 2025-11-12 09:30 -06:00
66
https://lmod.readthedocs.io
77
===========================
88
step 2
@@ -111,3 +111,55 @@ lua ProjectDIR/src/lmod.in.lua shell --regression_testing use ProjectDIR/rt/cach
111111
step 23
112112
lua ProjectDIR/src/lmod.in.lua shell --regression_testing load toolchain/gcc
113113
===========================
114+
===========================
115+
step 24
116+
lua ProjectDIR/src/lmod.in.lua shell --regression_testing purge
117+
===========================
118+
===========================
119+
step 25
120+
lua ProjectDIR/src/lmod.in.lua shell --regression_testing load modA modB
121+
===========================
122+
===========================
123+
step 26
124+
lua ProjectDIR/src/lmod.in.lua shell --regression_testing list
125+
===========================
126+
Currently Loaded Modules:
127+
1) modA/1.0 2) modB/1.0
128+
===========================
129+
step 27
130+
lua ProjectDIR/src/lmod.in.lua shell --regression_testing purge
131+
===========================
132+
===========================
133+
step 28
134+
lua ProjectDIR/src/lmod.in.lua shell --regression_testing load modA modB
135+
===========================
136+
===========================
137+
step 29
138+
lua ProjectDIR/src/lmod.in.lua shell --regression_testing list
139+
===========================
140+
Currently Loaded Modules:
141+
1) modA/1.0 2) modB/1.0
142+
===========================
143+
step 30
144+
lua ProjectDIR/src/lmod.in.lua shell --regression_testing purge
145+
===========================
146+
===========================
147+
step 31
148+
lua ProjectDIR/src/lmod.in.lua shell --regression_testing load modA
149+
===========================
150+
===========================
151+
step 32
152+
lua ProjectDIR/src/lmod.in.lua shell --regression_testing list
153+
===========================
154+
Currently Loaded Modules:
155+
1) modA/1.0
156+
===========================
157+
step 33
158+
lua ProjectDIR/src/lmod.in.lua shell --regression_testing load modB
159+
===========================
160+
===========================
161+
step 34
162+
lua ProjectDIR/src/lmod.in.lua shell --regression_testing list
163+
===========================
164+
Currently Loaded Modules:
165+
1) modA/1.0 2) modB/1.0
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
-- Module modA: Modifies MODULEPATH to add NewPath
2+
local mroot = os.getenv("MODULEPATH_ROOT")
3+
if (mode() == "load") then
4+
prepend_path("MODULEPATH", pathJoin(mroot, "NewPath"))
5+
end
6+
7+
8+
9+
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
-- Module modB: Lives in NewPath (added by module modA)
2+
setenv("MODULE_B_LOADED", "yes")
3+
4+
5+
6+
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
-- Module modC: Also lives in NewPath (added by module modA)
2+
setenv("MODULE_C_LOADED", "yes")
3+
4+
5+
6+

rt/cached_loads/out.txt

Lines changed: 132 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -318,3 +318,135 @@ PATH=/apps/gcc/12.3/bin:ProjectDIR/proj_mgmt:PATH_to_TM;
318318
export PATH;
319319
_ModuleTable_='_ModuleTable_={MTversion=3,depthT={},family={prgenvs="toolchain",},mT={gcc={actionA={[[append_path("MODULEPATH","ProjectDIR/rt/cached_loads/mf2/flavours/gcc/12.3")]],},fn="ProjectDIR/rt/cached_loads/mf2/compilers/gcc/12.3.lua",fullName="gcc/12.3",loadOrder=1,propT={},stackDepth=1,status="active",userName="gcc",wV="000000012.000000003.*zfinal",},toolchain={actionA={[[append_path("MODULEPATH","ProjectDIR/rt/cached_loads/mf2/compilers")]],},fn="ProjectDIR/rt/cached_loads/mf2/toolchains/toolchain/gcc.lua",fullName="toolchain/gcc",loadOrder=2,propT={},stackDepth=0,status="active",userName="toolchain/gcc",wV="*gcc.*zfinal",},},mpathA={"ProjectDIR/rt/cached_loads/fallback_test_dir","ProjectDIR/rt/cached_loads/empty_dir","ProjectDIR/rt/cached_loads/mf2/toolchains","ProjectDIR/rt/cached_loads/mf2/compilers","ProjectDIR/rt/cached_loads/mf2/flavours/gcc/12.3",},systemBaseMPATH="ProjectDIR/rt/cached_loads/mf2/toolchains",}';
320320
export _ModuleTable_;
321+
===========================
322+
step 24
323+
lua ProjectDIR/src/lmod.in.lua shell --regression_testing purge
324+
===========================
325+
unset LMOD_FAMILY_PRGENVS;
326+
unset LMOD_FAMILY_PRGENVS_VERSION;
327+
unset LOADEDMODULES;
328+
__LMOD_REF_COUNT_MODULEPATH=ProjectDIR/rt/cached_loads/fallback_test_dir:1\;ProjectDIR/rt/cached_loads/empty_dir:1\;ProjectDIR/rt/cached_loads/mf2/toolchains:1;
329+
export __LMOD_REF_COUNT_MODULEPATH;
330+
MODULEPATH=ProjectDIR/rt/cached_loads/fallback_test_dir:ProjectDIR/rt/cached_loads/empty_dir:ProjectDIR/rt/cached_loads/mf2/toolchains;
331+
export MODULEPATH;
332+
__LMOD_REF_COUNT_PATH=ProjectDIR/proj_mgmt:1\;PATH_to_TM:1;
333+
export __LMOD_REF_COUNT_PATH;
334+
PATH=ProjectDIR/proj_mgmt:PATH_to_TM;
335+
export PATH;
336+
unset _LMFILES_;
337+
_ModuleTable_='_ModuleTable_={MTversion=3,depthT={},family={},mT={},mpathA={"ProjectDIR/rt/cached_loads/fallback_test_dir","ProjectDIR/rt/cached_loads/empty_dir","ProjectDIR/rt/cached_loads/mf2/toolchains",},systemBaseMPATH="ProjectDIR/rt/cached_loads/mf2/toolchains",}';
338+
export _ModuleTable_;
339+
===========================
340+
step 25
341+
lua ProjectDIR/src/lmod.in.lua shell --regression_testing load modA modB
342+
===========================
343+
LOADEDMODULES=modA/1.0:modB/1.0;
344+
export LOADEDMODULES;
345+
__LMOD_REF_COUNT_MODULEPATH=ProjectDIR/rt/cached_loads/mf3/NewPath:1\;ProjectDIR/rt/cached_loads/mf3/Core:1;
346+
export __LMOD_REF_COUNT_MODULEPATH;
347+
MODULEPATH=ProjectDIR/rt/cached_loads/mf3/NewPath:ProjectDIR/rt/cached_loads/mf3/Core;
348+
export MODULEPATH;
349+
MODULE_B_LOADED=yes;
350+
export MODULE_B_LOADED;
351+
_LMFILES_=ProjectDIR/rt/cached_loads/mf3/Core/modA/1.0.lua:ProjectDIR/rt/cached_loads/mf3/NewPath/modB/1.0.lua;
352+
export _LMFILES_;
353+
_ModuleTable_='_ModuleTable_={MTversion=3,depthT={},family={},mT={modA={actionA={[[prepend_path("MODULEPATH","ProjectDIR/rt/cached_loads/mf3/NewPath")]],},fn="ProjectDIR/rt/cached_loads/mf3/Core/modA/1.0.lua",fullName="modA/1.0",loadOrder=1,propT={},stackDepth=0,status="active",userName="modA",wV="000000001.*zfinal",},modB={fn="ProjectDIR/rt/cached_loads/mf3/NewPath/modB/1.0.lua",fullName="modB/1.0",loadOrder=2,propT={},stackDepth=0,status="active",userName="modB",wV="000000001.*zfinal",},},mpathA={"ProjectDIR/rt/cached_loads/mf3/NewPath","ProjectDIR/rt/cached_loads/mf3/Core",},systemBaseMPATH="ProjectDIR/rt/cached_loads/mf3/Core",}';
354+
export _ModuleTable_;
355+
===========================
356+
step 26
357+
lua ProjectDIR/src/lmod.in.lua shell --regression_testing list
358+
===========================
359+
MODULEPATH=ProjectDIR/rt/cached_loads/mf3/NewPath:ProjectDIR/rt/cached_loads/mf3/Core;
360+
export MODULEPATH;
361+
_ModuleTable_='_ModuleTable_={MTversion=3,depthT={},family={},mT={modA={actionA={[[prepend_path("MODULEPATH","ProjectDIR/rt/cached_loads/mf3/NewPath")]],},fn="ProjectDIR/rt/cached_loads/mf3/Core/modA/1.0.lua",fullName="modA/1.0",loadOrder=1,propT={},stackDepth=0,status="active",userName="modA",wV="000000001.*zfinal",},modB={fn="ProjectDIR/rt/cached_loads/mf3/NewPath/modB/1.0.lua",fullName="modB/1.0",loadOrder=2,propT={},stackDepth=0,status="active",userName="modB",wV="000000001.*zfinal",},},mpathA={"ProjectDIR/rt/cached_loads/mf3/NewPath","ProjectDIR/rt/cached_loads/mf3/Core",},systemBaseMPATH="ProjectDIR/rt/cached_loads/mf3/Core",}';
362+
export _ModuleTable_;
363+
===========================
364+
step 27
365+
lua ProjectDIR/src/lmod.in.lua shell --regression_testing purge
366+
===========================
367+
unset LOADEDMODULES;
368+
MODULEPATH=ProjectDIR/rt/cached_loads/mf3/NewPath:ProjectDIR/rt/cached_loads/mf3/Core;
369+
export MODULEPATH;
370+
unset MODULE_B_LOADED;
371+
unset _LMFILES_;
372+
_ModuleTable_='_ModuleTable_={MTversion=3,depthT={},family={},mT={},mpathA={"ProjectDIR/rt/cached_loads/mf3/NewPath","ProjectDIR/rt/cached_loads/mf3/Core",},systemBaseMPATH="ProjectDIR/rt/cached_loads/mf3/Core",}';
373+
export _ModuleTable_;
374+
===========================
375+
step 28
376+
lua ProjectDIR/src/lmod.in.lua shell --regression_testing load modA modB
377+
===========================
378+
LOADEDMODULES=modA/1.0:modB/1.0;
379+
export LOADEDMODULES;
380+
__LMOD_REF_COUNT_MODULEPATH=ProjectDIR/rt/cached_loads/mf3/NewPath:2\;ProjectDIR/rt/cached_loads/mf3/Core:1;
381+
export __LMOD_REF_COUNT_MODULEPATH;
382+
MODULEPATH=ProjectDIR/rt/cached_loads/mf3/NewPath:ProjectDIR/rt/cached_loads/mf3/Core;
383+
export MODULEPATH;
384+
MODULE_B_LOADED=yes;
385+
export MODULE_B_LOADED;
386+
_LMFILES_=ProjectDIR/rt/cached_loads/mf3/Core/modA/1.0.lua:ProjectDIR/rt/cached_loads/mf3/NewPath/modB/1.0.lua;
387+
export _LMFILES_;
388+
_ModuleTable_='_ModuleTable_={MTversion=3,depthT={},family={},mT={modA={actionA={[[prepend_path("MODULEPATH","ProjectDIR/rt/cached_loads/mf3/NewPath")]],},fn="ProjectDIR/rt/cached_loads/mf3/Core/modA/1.0.lua",fullName="modA/1.0",loadOrder=1,propT={},stackDepth=0,status="active",userName="modA",wV="000000001.*zfinal",},modB={fn="ProjectDIR/rt/cached_loads/mf3/NewPath/modB/1.0.lua",fullName="modB/1.0",loadOrder=2,propT={},stackDepth=0,status="active",userName="modB",wV="000000001.*zfinal",},},mpathA={"ProjectDIR/rt/cached_loads/mf3/NewPath","ProjectDIR/rt/cached_loads/mf3/Core",},systemBaseMPATH="ProjectDIR/rt/cached_loads/mf3/Core",}';
389+
export _ModuleTable_;
390+
===========================
391+
step 29
392+
lua ProjectDIR/src/lmod.in.lua shell --regression_testing list
393+
===========================
394+
MODULEPATH=ProjectDIR/rt/cached_loads/mf3/NewPath:ProjectDIR/rt/cached_loads/mf3/Core;
395+
export MODULEPATH;
396+
_ModuleTable_='_ModuleTable_={MTversion=3,depthT={},family={},mT={modA={actionA={[[prepend_path("MODULEPATH","ProjectDIR/rt/cached_loads/mf3/NewPath")]],},fn="ProjectDIR/rt/cached_loads/mf3/Core/modA/1.0.lua",fullName="modA/1.0",loadOrder=1,propT={},stackDepth=0,status="active",userName="modA",wV="000000001.*zfinal",},modB={fn="ProjectDIR/rt/cached_loads/mf3/NewPath/modB/1.0.lua",fullName="modB/1.0",loadOrder=2,propT={},stackDepth=0,status="active",userName="modB",wV="000000001.*zfinal",},},mpathA={"ProjectDIR/rt/cached_loads/mf3/NewPath","ProjectDIR/rt/cached_loads/mf3/Core",},systemBaseMPATH="ProjectDIR/rt/cached_loads/mf3/Core",}';
397+
export _ModuleTable_;
398+
===========================
399+
step 30
400+
lua ProjectDIR/src/lmod.in.lua shell --regression_testing purge
401+
===========================
402+
unset LOADEDMODULES;
403+
MODULEPATH=ProjectDIR/rt/cached_loads/mf3/NewPath:ProjectDIR/rt/cached_loads/mf3/Core;
404+
export MODULEPATH;
405+
unset MODULE_B_LOADED;
406+
unset _LMFILES_;
407+
_ModuleTable_='_ModuleTable_={MTversion=3,depthT={},family={},mT={},mpathA={"ProjectDIR/rt/cached_loads/mf3/NewPath","ProjectDIR/rt/cached_loads/mf3/Core",},systemBaseMPATH="ProjectDIR/rt/cached_loads/mf3/Core",}';
408+
export _ModuleTable_;
409+
===========================
410+
step 31
411+
lua ProjectDIR/src/lmod.in.lua shell --regression_testing load modA
412+
===========================
413+
LOADEDMODULES=modA/1.0;
414+
export LOADEDMODULES;
415+
__LMOD_REF_COUNT_MODULEPATH=ProjectDIR/rt/cached_loads/mf3/NewPath:3\;ProjectDIR/rt/cached_loads/mf3/Core:1;
416+
export __LMOD_REF_COUNT_MODULEPATH;
417+
MODULEPATH=ProjectDIR/rt/cached_loads/mf3/NewPath:ProjectDIR/rt/cached_loads/mf3/Core;
418+
export MODULEPATH;
419+
_LMFILES_=ProjectDIR/rt/cached_loads/mf3/Core/modA/1.0.lua;
420+
export _LMFILES_;
421+
_ModuleTable_='_ModuleTable_={MTversion=3,depthT={},family={},mT={modA={actionA={[[prepend_path("MODULEPATH","ProjectDIR/rt/cached_loads/mf3/NewPath")]],},fn="ProjectDIR/rt/cached_loads/mf3/Core/modA/1.0.lua",fullName="modA/1.0",loadOrder=1,propT={},stackDepth=0,status="active",userName="modA",wV="000000001.*zfinal",},},mpathA={"ProjectDIR/rt/cached_loads/mf3/NewPath","ProjectDIR/rt/cached_loads/mf3/Core",},systemBaseMPATH="ProjectDIR/rt/cached_loads/mf3/Core",}';
422+
export _ModuleTable_;
423+
===========================
424+
step 32
425+
lua ProjectDIR/src/lmod.in.lua shell --regression_testing list
426+
===========================
427+
MODULEPATH=ProjectDIR/rt/cached_loads/mf3/NewPath:ProjectDIR/rt/cached_loads/mf3/Core;
428+
export MODULEPATH;
429+
_ModuleTable_='_ModuleTable_={MTversion=3,depthT={},family={},mT={modA={actionA={[[prepend_path("MODULEPATH","ProjectDIR/rt/cached_loads/mf3/NewPath")]],},fn="ProjectDIR/rt/cached_loads/mf3/Core/modA/1.0.lua",fullName="modA/1.0",loadOrder=1,propT={},stackDepth=0,status="active",userName="modA",wV="000000001.*zfinal",},},mpathA={"ProjectDIR/rt/cached_loads/mf3/NewPath","ProjectDIR/rt/cached_loads/mf3/Core",},systemBaseMPATH="ProjectDIR/rt/cached_loads/mf3/Core",}';
430+
export _ModuleTable_;
431+
===========================
432+
step 33
433+
lua ProjectDIR/src/lmod.in.lua shell --regression_testing load modB
434+
===========================
435+
LOADEDMODULES=modA/1.0:modB/1.0;
436+
export LOADEDMODULES;
437+
MODULEPATH=ProjectDIR/rt/cached_loads/mf3/NewPath:ProjectDIR/rt/cached_loads/mf3/Core;
438+
export MODULEPATH;
439+
MODULE_B_LOADED=yes;
440+
export MODULE_B_LOADED;
441+
_LMFILES_=ProjectDIR/rt/cached_loads/mf3/Core/modA/1.0.lua:ProjectDIR/rt/cached_loads/mf3/NewPath/modB/1.0.lua;
442+
export _LMFILES_;
443+
_ModuleTable_='_ModuleTable_={MTversion=3,depthT={},family={},mT={modA={actionA={[[prepend_path("MODULEPATH","ProjectDIR/rt/cached_loads/mf3/NewPath")]],},fn="ProjectDIR/rt/cached_loads/mf3/Core/modA/1.0.lua",fullName="modA/1.0",loadOrder=1,propT={},stackDepth=0,status="active",userName="modA",wV="000000001.*zfinal",},modB={fn="ProjectDIR/rt/cached_loads/mf3/NewPath/modB/1.0.lua",fullName="modB/1.0",loadOrder=2,propT={},stackDepth=0,status="active",userName="modB",wV="000000001.*zfinal",},},mpathA={"ProjectDIR/rt/cached_loads/mf3/NewPath","ProjectDIR/rt/cached_loads/mf3/Core",},systemBaseMPATH="ProjectDIR/rt/cached_loads/mf3/Core",}';
444+
export _ModuleTable_;
445+
===========================
446+
step 34
447+
lua ProjectDIR/src/lmod.in.lua shell --regression_testing list
448+
===========================
449+
MODULEPATH=ProjectDIR/rt/cached_loads/mf3/NewPath:ProjectDIR/rt/cached_loads/mf3/Core;
450+
export MODULEPATH;
451+
_ModuleTable_='_ModuleTable_={MTversion=3,depthT={},family={},mT={modA={actionA={[[prepend_path("MODULEPATH","ProjectDIR/rt/cached_loads/mf3/NewPath")]],},fn="ProjectDIR/rt/cached_loads/mf3/Core/modA/1.0.lua",fullName="modA/1.0",loadOrder=1,propT={},stackDepth=0,status="active",userName="modA",wV="000000001.*zfinal",},modB={fn="ProjectDIR/rt/cached_loads/mf3/NewPath/modB/1.0.lua",fullName="modB/1.0",loadOrder=2,propT={},stackDepth=0,status="active",userName="modB",wV="000000001.*zfinal",},},mpathA={"ProjectDIR/rt/cached_loads/mf3/NewPath","ProjectDIR/rt/cached_loads/mf3/Core",},systemBaseMPATH="ProjectDIR/rt/cached_loads/mf3/Core",}';
452+
export _ModuleTable_;

0 commit comments

Comments
 (0)