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

Not able to switch a sticky virtual module #506

Closed
adrien-cotte opened this issue Aug 22, 2023 · 4 comments
Closed

Not able to switch a sticky virtual module #506

adrien-cotte opened this issue Aug 22, 2023 · 4 comments
Labels
Milestone

Comments

@adrien-cotte
Copy link
Contributor

Describe the bug

Switching two versions of a virtual module tagged sticky results in an error:

  ERROR: Unload of sticky module skipped

To Reproduce

Steps to reproduce the behavior:

$ module switch virt-mod/1.0 virt-mod/2.0
Switching from virt-mod/1.0 to virt-mod/2.0
  ERROR: Unload of sticky module skipped

Location and content of any modulerc or modulefile involved:

$ cat path/to/modulepath/virt-mod/.common
#%Module

$ cat path/to/modulepath/virt-mod/.modulerc
#%Module
module-tag sticky virt-mod
module-virtual virt-mod/1.0 .common
module-virtual virt-mod/2.0 .common

Expected behavior

When switching two versions of a sticky "usual" module, I get no error.
I expect having the same behavior while doing the same with virtual modules.

Error and debugging information

$ module switch -D virt-mod/1.0 virt-mod/2.0

DEBUG setState: cmdline set to '/home/acotte/workspace/module-5.4.0-dev/install/libexec/modulecmd.tcl bash switch -D virt-mod/1.0 virt-mod/2.0'
DEBUG setConf: tcl_ext_lib set to '/home/acotte/workspace/module-5.4.0-dev/install/lib/libtclenvmodules.so'
DEBUG Load Tcl extension library (/home/acotte/workspace/module-5.4.0-dev/install/lib/libtclenvmodules.so)
DEBUG setState: tcl_ext_lib_loaded set to '1'
DEBUG setConf: siteconfig set to '/home/acotte/workspace/module-5.4.0-dev/install/etc/siteconfig.tcl'
DEBUG sourceSiteConfig: Source site configuration (/home/acotte/workspace/module-5.4.0-dev/install/etc/siteconfig.tcl)
DEBUG setState: siteconfig_loaded set to '1'
DEBUG setConf: locked_configs set to ''
DEBUG setState: supported_shells set to 'sh bash ksh zsh csh tcsh fish cmd tcl perl python ruby lisp cmake r'
DEBUG setState: shell set to 'bash'
DEBUG setState: subcmd set to 'switch'
DEBUG setState: subcmd_args set to 'virt-mod/1.0 virt-mod/2.0'
DEBUG setState: init_error_report set to '1'
DEBUG setConf: verbosity set to 'debug'
DEBUG setState: is_stderr_tty set to '0'
DEBUG setConf: term_background set to 'dark'
DEBUG setConf: colors set to 'hi=1:db=2:tr=2:se=2:er=91:wa=93:me=95:in=94:mp=1;94:di=94:al=96:va=93:sy=95:de=4:cm=92:aL=100:L=90;47:H=2:F=41:nF=43:S=46:sS=44:kL=30;48;5;109'
DEBUG setConf: color set to '0'
DEBUG setConf: pager set to '/usr/bin/less -eFKRX'
DEBUG setState: paginate set to '0'
DEBUG setState: report_format set to 'regular'
DEBUG setState: reportfd set to 'stderr'
DEBUG setState: timer set to '0'
DEBUG lappendState: modulefile appended with '{}'
DEBUG parseModuleCommandName: (command=switch, cmdvalid=1, cmdempty=0)
DEBUG lappendState: always_read_full_file appended with '1'
DEBUG lappendState: commandname appended with 'switch'
DEBUG setConf: avail_indepth set to '1'
DEBUG setConf: search_match set to 'starts_with'
DEBUG parseModuleCommandArgs: (show_oneperline=0, show_mtime=0, show_filter=, search_filter=, search_match=starts_with, dump_state=0, addpath_pos=prepend, not_req=0, tag_list=, otherargs=virt-mod/1.0 virt-mod/2.0)
DEBUG setConf: advanced_version_spec set to '1'
DEBUG setConf: variant_shortcut set to ''
DEBUG setModuleVersSpec: Set module 'virt-mod/1.0' (escglob 'virt-mod/1.0'),  module name 'virt-mod' (re ''), module root 'virt-mod', version cmp 'eq', version(s) '', variant(s) '' and module name version spec 'virt-mod/1.0' for argument 'virt-mod/1.0' (raw 'virt-mod/1.0'), extra specifier(s) '' and matching available module(s) ''
DEBUG setModuleVersSpec: Set module 'virt-mod/2.0' (escglob 'virt-mod/2.0'),  module name 'virt-mod' (re ''), module root 'virt-mod', version cmp 'eq', version(s) '', variant(s) '' and module name version spec 'virt-mod/2.0' for argument 'virt-mod/2.0' (raw 'virt-mod/2.0'), extra specifier(s) '' and matching available module(s) ''
DEBUG setState: rc_running set to '1'
DEBUG setConf: ignore_user_rc set to '0'
DEBUG runModulerc: Executing /home/acotte/.modulerc
DEBUG setState: cwd set to '/home/acotte/workspace/module-5.4.0-dev'
DEBUG lappendState: mode appended with 'load'
DEBUG lappendState: modulefile appended with '/home/acotte/.modulerc'
DEBUG lappendState: modulename appended with '/home/acotte/.modulerc'
DEBUG lappendState: modulenamevr appended with '/home/acotte/.modulerc'
DEBUG lappendState: specifiedname appended with '/home/acotte/.modulerc'
DEBUG lappendState: modulepath appended with '{}'
DEBUG [#1:load:/home/acotte/.modulerc] lappendState: debug_msg_prefix appended with '{[#1:load:/home/acotte/.modulerc] }'
DEBUG [#1:load:/home/acotte/.modulerc] setState: inhibit_interp set to '0'
DEBUG [#1:load:/home/acotte/.modulerc] setState: inhibit_errreport set to '0'
Evaluate modulefile: '/home/acotte/.modulerc' as '/home/acotte/.modulerc'
DEBUG [#1:load:/home/acotte/.modulerc] setConf: auto_handling set to '1'
DEBUG [#1:load:/home/acotte/.modulerc] execute-modulefile: creating interp __modfile_load_1_1
DEBUG [#1:load:/home/acotte/.modulerc] dumpInterpState: saving for __modfile var tcl_version
DEBUG [#1:load:/home/acotte/.modulerc] dumpInterpState: saving for __modfile var tcl_interactive
DEBUG [#1:load:/home/acotte/.modulerc] dumpInterpState: saving for __modfile var ModuleToolVersion
DEBUG [#1:load:/home/acotte/.modulerc] dumpInterpState: saving for __modfile var ModuleTool
DEBUG [#1:load:/home/acotte/.modulerc] dumpInterpState: saving for __modfile var auto_path
DEBUG [#1:load:/home/acotte/.modulerc] dumpInterpState: saving for __modfile var tcl_pkgPath
DEBUG [#1:load:/home/acotte/.modulerc] dumpInterpState: saving for __modfile var tcl_patchLevel
DEBUG [#1:load:/home/acotte/.modulerc] dumpInterpState: saving for __modfile var tcl_platform
DEBUG [#1:load:/home/acotte/.modulerc] dumpInterpState: saving for __modfile var tcl_library
DEBUG [#1:load:/home/acotte/.modulerc] dumpInterpState: saving for __modfile proc list auto_load unknown tclLog auto_qualify auto_execok auto_import auto_load_index
DEBUG [#1:load:/home/acotte/.modulerc] resetInterpState: saving for __modfile_load_1_1 command list modulepath-label module-version tell socket subst conflict open eof add-property pwd glob list module-hide pid exec auto_load_index time unknown eval module-forbid lassign lrange module-user module-virtual reportWarning is-loaded append-path fblocked lsearch auto_import gets report case lappend proc throw setenv break reportTraceExecEnter variable llength module-info set-function prereq auto_execok extensions return linsert is-used error catch unique-name-conflict clock info split variant readModuleContent array if fconfigure coroutine concat join lreplace source fcopy global switch isVerbosityLevel auto_qualify update prereq-any module-log reportError unset-alias close reportCmdTrace cd for auto_load file append lreverse source-sh getenv format lmap unload read package set namespace binary scan always-load versioncmp apply module-tag raiseErrorCount trace remove-property unsetenv seek complete zlib while isWin chan flush after vwait is-saved dict getvariant system uplevel continue is-avail require-fullname try remove-path foreach lset rename pushenv chdir fileevent yieldto module-whatis regexp uncomplete module-alias x-resource lrepeat upvar tailcall formatErrStackTrace reportInternalBug encoding expr unset prepend-path load regsub module-verbosity unset-function exit module-trace family interp set-alias _puts puts incr lindex lsort prereq-all depends-on tclLog uname module string yield
DEBUG [#1:load:/home/acotte/.modulerc] execute-modulefile: readModuleContent /home/acotte/.modulerc 1
DEBUG [#1:load:/home/acotte/.modulerc] execute-modulefile: unique-name-conflict
DEBUG [#1:load:/home/acotte/.modulerc] setConf: unique_name_loaded set to '0'
DEBUG [#1:load:/home/acotte/.modulerc] execute-modulefile: module-info mode
DEBUG [#1:load:/home/acotte/.modulerc] execute-modulefile: exiting /home/acotte/.modulerc
DEBUG setState: debug_msg_prefix set to ''
DEBUG setState: modulepath set to ''
DEBUG setState: specifiedname set to ''
DEBUG setState: modulename set to ''
DEBUG setState: modulenamevr set to ''
DEBUG setState: modulefile set to '{}'
DEBUG setState: mode set to ''
DEBUG lappendState: rc_loaded appended with '/home/acotte/.modulerc'
DEBUG unsetState: rc_running unset
DEBUG cmdModuleSwitch: old='virt-mod/1.0' new='virt-mod/2.0' (uasked=1)
DEBUG lappendState: evalid appended with 'switch-virt-mod/1.0-virt-mod/2.0-0'
DEBUG lappendState: msgrecordid appended with 'switch-virt-mod/1.0-virt-mod/2.0-0'
DEBUG lappendState: inhibit_req_record appended with 'switch-virt-mod/1.0-virt-mod/2.0-0'
DEBUG getPathToModule: finding 'virt-mod/1.0' in '' (report_issue=0, look_loaded=match, excdir='')
DEBUG setConf: unload_match_order set to 'returnlast'
DEBUG setState: is_win set to '0'
DEBUG setState: path_separator set to ':'
DEBUG setConf: icase set to 'search'
DEBUG setConf: extended_default set to '1'
DEBUG setState: lm_info_cached set to '1'
DEBUG setState: sub1_separator set to '&'
DEBUG setState: sub2_separator set to '|'
DEBUG getTagList: 'virt-mod/1.0' has tag list 'sticky'
DEBUG doesModuleConflict: 'virt-mod/1.0' conflicts with '' (declared as '')
DEBUG setModuleDependency: set requirements of 'virt-mod/1.0' to ''
DEBUG setModuleDependency: set NPO requirements of 'virt-mod/1.0' to ''
DEBUG cacheCurrentModules: 1 loaded
DEBUG getLoadedMatchingName: 'virt-mod/1.0' matches 'virt-mod/1.0'
DEBUG getTagList: 'virt-mod/1.0' has tag list 'loaded sticky'
DEBUG getModules: get 'virt-mod/1.0' in /home/acotte/workspace/module-5.4.0-dev/install/modulefiles/vir (fetch_mtime=0, search=rc_defs_included, filter=)
DEBUG setConf: implicit_default set to '1'
DEBUG findModules: finding 'virt-mod' in /home/acotte/workspace/module-5.4.0-dev/install/modulefiles/vir (depthlvl=0, fetch_mtime=0)
DEBUG setConf: ignore_cache set to '0'
DEBUG findModulesInCacheFile: cache file '/home/acotte/workspace/module-5.4.0-dev/install/modulefiles/vir/.modulecache' cannot be found or read
DEBUG getModules: create cache entry '/home/acotte/workspace/module-5.4.0-dev/install/modulefiles/vir:virt-mod/1.0:0:rc_defs_included:'
DEBUG isStickinessReloading: stickiness (sticky) applies to '', is reloading=0
DEBUG getTagList: 'virt-mod/1.0' has tag list 'loaded sticky'
DEBUG cmdModuleUnload: unloading virt-mod/1.0 (context=swunload, match=match, auto=1, force=0, onlyureq=0, onlyndep=0)
DEBUG lappendState: mode appended with 'unload'
DEBUG getPathToModule: finding 'virt-mod/1.0' in '' (report_issue=1, look_loaded=match, excdir='')
DEBUG getLoadedMatchingName: 'virt-mod/1.0' matches 'virt-mod/1.0'
DEBUG lappendState: evalid appended with 'unload-virt-mod/1.0-0'
DEBUG lappendState: msgrecordid appended with 'unload-virt-mod/1.0-0'
DEBUG getTagList: 'virt-mod/1.0' has tag list 'sticky loaded'
DEBUG pushSettings: settings saved (#1)
DEBUG getDependentLoadedModuleList: get loaded mod dependent of 'virt-mod/1.0' (strong=1, direct=1, nporeq=0, loading=1, sat_constraint=0, being_unload=0)
DEBUG getDependentLoadedModuleList: got ''
DEBUG getDependentLoadedModuleList: get loaded mod dependent of 'virt-mod/1.0' (strong=1, direct=0, nporeq=1, loading=0, sat_constraint=0, being_unload=0)
DEBUG getDependentLoadedModuleList: got ''
DEBUG getDependentLoadedModuleList: get loaded mod dependent of 'virt-mod/1.0' (strong=1, direct=0, nporeq=0, loading=0, sat_constraint=0, being_unload=0)
DEBUG getDependentLoadedModuleList: got ''
DEBUG cmdModuleUnload: depun mod list is ''
DEBUG getUnloadableLoadedModuleList: got ''
DEBUG cmdModuleUnload: urequn mod list is ''
DEBUG getDependentLoadedModuleList: get loaded mod dependent of 'virt-mod/1.0' (strong=0, direct=0, nporeq=1, loading=0, sat_constraint=1, being_unload=1)
DEBUG doesModuleConflict: 'virt-mod/1.0' conflicts with '' (declared as '')
DEBUG getDependentLoadedModuleList: got ''
DEBUG cmdModuleUnload: depre mod list is ''
DEBUG lappendState: modulefile appended with '/home/acotte/workspace/module-5.4.0-dev/install/modulefiles/virt-mod/.common'
DEBUG lappendState: modulename appended with 'virt-mod/1.0'
DEBUG lappendState: modulenamevr appended with 'virt-mod/1.0'
DEBUG lappendState: specifiedname appended with 'virt-mod/1.0'
DEBUG lappendState: modulepath appended with '{}'
DEBUG [#1:unload:virt-mod/1.0] lappendState: debug_msg_prefix appended with '{[#1:unload:virt-mod/1.0] }'
DEBUG [#1:unload:virt-mod/1.0] getTagList: 'virt-mod/1.0' has tag list 'loaded sticky'
DEBUG [#1:unload:virt-mod/1.0] getTagList: 'virt-mod/1.0' has tag list 'loaded sticky'
DEBUG [#1:unload:virt-mod/1.0] setState: force set to '0'
DEBUG setState: debug_msg_prefix set to ''
DEBUG setState: modulepath set to ''
DEBUG setState: specifiedname set to ''
DEBUG setState: modulename set to ''
DEBUG setState: modulenamevr set to ''
DEBUG setState: modulefile set to '{}'
DEBUG setState: error_count set to '0'
DEBUG setState: error_count set to '1'
DEBUG interp-sync-env: set var='::env(LS_COLORS)', val='rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.wim=01;31:*.swm=01;31:*.dwm=01;31:*.esd=01;31:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36:' on interp(s) __modfile_load_1_1
DEBUG interp-sync-env: set var='::env(HOME)', val='/home/acotte' on interp(s) __modfile_load_1_1
DEBUG interp-sync-env: set var='::env(LANG)', val='fr_FR.UTF-8' on interp(s) __modfile_load_1_1
DEBUG interp-sync-env: set var='::env(LOGNAME)', val='acotte' on interp(s) __modfile_load_1_1
DEBUG interp-sync-env: set var='::env(__MODULES_LMTAG)', val='virt-mod/1.0&sticky' on interp(s) __modfile_load_1_1
DEBUG interp-sync-env: set var='::env(IM_CONFIG_PHASE)', val='2' on interp(s) __modfile_load_1_1
DEBUG interp-sync-env: set var='::env(XDG_VTNR)', val='2' on interp(s) __modfile_load_1_1
DEBUG interp-sync-env: set var='::env(XDG_SEAT)', val='seat0' on interp(s) __modfile_load_1_1
DEBUG interp-sync-env: set var='::env(GTK_IM_MODULE)', val='ibus' on interp(s) __modfile_load_1_1
DEBUG interp-sync-env: set var='::env(SHELL)', val='/bin/bash' on interp(s) __modfile_load_1_1
DEBUG interp-sync-env: set var='::env(XDG_SESSION_ID)', val='3' on interp(s) __modfile_load_1_1
DEBUG interp-sync-env: set var='::env(BASH_FUNC_ml%%)', val='() {  module ml "$@"
}' on interp(s) __modfile_load_1_1
DEBUG interp-sync-env: set var='::env(__MODULES_LMINIT)', val='module use --append /home/acotte/workspace/module-5.4.0-dev/install/modulefiles' on interp(s) __modfile_load_1_1
DEBUG interp-sync-env: set var='::env(QT4_IM_MODULE)', val='xim' on interp(s) __modfile_load_1_1
DEBUG interp-sync-env: set var='::env(XDG_MENU_PREFIX)', val='gnome-' on interp(s) __modfile_load_1_1
DEBUG interp-sync-env: set var='::env(TEXTDOMAINDIR)', val='/usr/share/locale/' on interp(s) __modfile_load_1_1
DEBUG interp-sync-env: set var='::env(GNOME_DESKTOP_SESSION_ID)', val='this-is-deprecated' on interp(s) __modfile_load_1_1
DEBUG interp-sync-env: set var='::env(USER)', val='acotte' on interp(s) __modfile_load_1_1
DEBUG interp-sync-env: set var='::env(GPG_AGENT_INFO)', val='/run/user/1002/gnupg/S.gpg-agent:0:1' on interp(s) __modfile_load_1_1
DEBUG interp-sync-env: set var='::env(GNOME_TERMINAL_SCREEN)', val='/org/gnome/Terminal/screen/78884ccb_e721_4d66_ac56_dfe8ea2c0b4c' on interp(s) __modfile_load_1_1
DEBUG interp-sync-env: set var='::env(XDG_CONFIG_DIRS)', val='/etc/xdg/xdg-ubuntu:/etc/xdg' on interp(s) __modfile_load_1_1
DEBUG interp-sync-env: set var='::env(MANPATH)', val='/home/acotte/workspace/module-5.4.0-dev/install/share/man:' on interp(s) __modfile_load_1_1
DEBUG interp-sync-env: set var='::env(GJS_DEBUG_OUTPUT)', val='stderr' on interp(s) __modfile_load_1_1
DEBUG interp-sync-env: set var='::env(GDMSESSION)', val='ubuntu' on interp(s) __modfile_load_1_1
DEBUG interp-sync-env: set var='::env(MODULES_CMD)', val='/home/acotte/workspace/module-5.4.0-dev/install/libexec/modulecmd.tcl' on interp(s) __modfile_load_1_1
DEBUG interp-sync-env: set var='::env(LESSCLOSE)', val='/usr/bin/lesspipe %s %s' on interp(s) __modfile_load_1_1
DEBUG interp-sync-env: set var='::env(DESKTOP_SESSION)', val='ubuntu' on interp(s) __modfile_load_1_1
DEBUG interp-sync-env: set var='::env(SESSION_MANAGER)', val='local/UN00306315:@/tmp/.ICE-unix/3802,unix/UN00306315:/tmp/.ICE-unix/3802' on interp(s) __modfile_load_1_1
DEBUG interp-sync-env: set var='::env(DBUS_SESSION_BUS_ADDRESS)', val='unix:path=/run/user/1002/bus' on interp(s) __modfile_load_1_1
DEBUG interp-sync-env: set var='::env(COLORTERM)', val='truecolor' on interp(s) __modfile_load_1_1
DEBUG interp-sync-env: set var='::env(BASH_FUNC_module%%)', val='() {  local _mlredir=1;
 if [ -n "${MODULES_REDIRECT_OUTPUT+x}" ]; then
 if [ "$MODULES_REDIRECT_OUTPUT" = '0' ]; then
 _mlredir=0;
 else
 if [ "$MODULES_REDIRECT_OUTPUT" = '1' ]; then
 _mlredir=1;
 fi;
 fi;
 fi;
 case " $@ " in 
 *' --no-redirect '*)
 _mlredir=0
 ;;
 *' --redirect '*)
 _mlredir=1
 ;;
 esac;
 if [ $_mlredir -eq 0 ]; then
 _module_raw "$@";
 else
 _module_raw "$@" 2>&1;
 fi
}' on interp(s) __modfile_load_1_1
DEBUG interp-sync-env: set var='::env(USERNAME)', val='acotte' on interp(s) __modfile_load_1_1
DEBUG interp-sync-env: set var='::env(SHLVL)', val='1' on interp(s) __modfile_load_1_1
DEBUG interp-sync-env: set var='::env(GJS_DEBUG_TOPICS)', val='JS ERROR;JS LOG' on interp(s) __modfile_load_1_1
DEBUG interp-sync-env: set var='::env(MODULEPATH)', val='/home/acotte/workspace/module-5.4.0-dev/install/modulefiles' on interp(s) __modfile_load_1_1
DEBUG interp-sync-env: set var='::env(MANDATORY_PATH)', val='/usr/share/gconf/ubuntu.mandatory.path' on interp(s) __modfile_load_1_1
DEBUG interp-sync-env: set var='::env(GNOME_SHELL_SESSION_MODE)', val='ubuntu' on interp(s) __modfile_load_1_1
DEBUG interp-sync-env: set var='::env(PATH)', val='/home/acotte/workspace/module-5.4.0-dev/install/bin:/home/acotte/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin' on interp(s) __modfile_load_1_1
DEBUG interp-sync-env: set var='::env(CLUTTER_IM_MODULE)', val='xim' on interp(s) __modfile_load_1_1
DEBUG interp-sync-env: set var='::env(GTK_MODULES)', val='gail:atk-bridge' on interp(s) __modfile_load_1_1
DEBUG interp-sync-env: set var='::env(_)', val='/usr/bin/tclsh' on interp(s) __modfile_load_1_1
DEBUG interp-sync-env: set var='::env(BASH_FUNC__module_raw%%)', val='() {  eval "$(/usr/bin/tclsh '/home/acotte/workspace/module-5.4.0-dev/install/libexec/modulecmd.tcl' bash "$@")";
 _mlstatus=$?;
 return $_mlstatus
}' on interp(s) __modfile_load_1_1
DEBUG interp-sync-env: set var='::env(LESSOPEN)', val='| /usr/bin/lesspipe %s' on interp(s) __modfile_load_1_1
DEBUG interp-sync-env: set var='::env(MODULESHOME)', val='/home/acotte/workspace/module-5.4.0-dev/install' on interp(s) __modfile_load_1_1
DEBUG interp-sync-env: set var='::env(LOADEDMODULES)', val='virt-mod/1.0' on interp(s) __modfile_load_1_1
DEBUG interp-sync-env: set var='::env(XMODIFIERS)', val='@im=ibus' on interp(s) __modfile_load_1_1
DEBUG interp-sync-env: set var='::env(PWD)', val='/home/acotte/workspace/module-5.4.0-dev' on interp(s) __modfile_load_1_1
DEBUG interp-sync-env: set var='::env(LANGUAGE)', val='fr_FR.UTF-8:' on interp(s) __modfile_load_1_1
DEBUG interp-sync-env: set var='::env(DISPLAY)', val=':0' on interp(s) __modfile_load_1_1
DEBUG interp-sync-env: set var='::env(DEFAULTS_PATH)', val='/usr/share/gconf/ubuntu.default.path' on interp(s) __modfile_load_1_1
DEBUG interp-sync-env: set var='::env(TEXTDOMAIN)', val='im-config' on interp(s) __modfile_load_1_1
DEBUG interp-sync-env: set var='::env(QT_IM_MODULE)', val='ibus' on interp(s) __modfile_load_1_1
DEBUG interp-sync-env: set var='::env(SSH_AGENT_PID)', val='3900' on interp(s) __modfile_load_1_1
DEBUG interp-sync-env: set var='::env(GNOME_TERMINAL_SERVICE)', val=':1.81' on interp(s) __modfile_load_1_1
DEBUG interp-sync-env: set var='::env(_LMFILES_)', val='/home/acotte/workspace/module-5.4.0-dev/install/modulefiles/virt-mod/.common' on interp(s) __modfile_load_1_1
DEBUG interp-sync-env: set var='::env(QT_ACCESSIBILITY)', val='1' on interp(s) __modfile_load_1_1
DEBUG interp-sync-env: set var='::env(VTE_VERSION)', val='5202' on interp(s) __modfile_load_1_1
DEBUG interp-sync-env: set var='::env(XDG_DATA_DIRS)', val='/usr/share/ubuntu:/usr/local/share/:/usr/share/:/var/lib/snapd/desktop' on interp(s) __modfile_load_1_1
DEBUG interp-sync-env: set var='::env(WINDOWPATH)', val='2' on interp(s) __modfile_load_1_1
DEBUG interp-sync-env: set var='::env(SSH_AUTH_SOCK)', val='/run/user/1002/keyring/ssh' on interp(s) __modfile_load_1_1
DEBUG interp-sync-env: set var='::env(XDG_SESSION_TYPE)', val='x11' on interp(s) __modfile_load_1_1
DEBUG interp-sync-env: set var='::env(TERM)', val='xterm-256color' on interp(s) __modfile_load_1_1
DEBUG interp-sync-env: set var='::env(XAUTHORITY)', val='/run/user/1002/gdm/Xauthority' on interp(s) __modfile_load_1_1
DEBUG interp-sync-env: set var='::env(__MODULES_SHARE_MANPATH)', val=':1' on interp(s) __modfile_load_1_1
DEBUG interp-sync-env: set var='::env(OLDPWD)', val='/home/acotte/workspace' on interp(s) __modfile_load_1_1
DEBUG interp-sync-env: set var='::env(XDG_RUNTIME_DIR)', val='/run/user/1002' on interp(s) __modfile_load_1_1
DEBUG interp-sync-env: set var='::env(XDG_CURRENT_DESKTOP)', val='ubuntu:GNOME' on interp(s) __modfile_load_1_1
DEBUG interp-sync-env: set var='::env(XDG_SESSION_DESKTOP)', val='ubuntu' on interp(s) __modfile_load_1_1
DEBUG restoreSettings: previously saved settings restored (#1)
DEBUG popSettings: previously saved settings flushed (#1)
DEBUG setConf: tag_abbrev set to 'auto-loaded=aL:loaded=L:hidden=H:hidden-loaded=H:forbidden=F:nearly-forbidden=nF:sticky=S:super-sticky=sS:keep-loaded=kL'
DEBUG setConf: tag_color_name set to ''
DEBUG setConf: term_width set to '0'
DEBUG setState: term_columns set to '142'
DEBUG unsetState: report_sep_next unset

DEBUG setState: report_sep_next set to '1'
Unloading virt-mod/1.0 <S>
  Evaluate modulefile: '/home/acotte/workspace/module-5.4.0-dev/install/modulefiles/virt-mod/.common' as 'virt-mod/1.0'
DEBUG unsetState: report_sep_next unset

DEBUG setState: report_sep_next set to '1'
DEBUG setState: evalid set to 'switch-virt-mod/1.0-virt-mod/2.0-0'
DEBUG setState: msgrecordid set to 'switch-virt-mod/1.0-virt-mod/2.0-0'
DEBUG setState: mode set to ''
DEBUG unsetState: report_sep_next unset

DEBUG setState: report_sep_next set to '1'
Switching from virt-mod/1.0 <S> to virt-mod/2.0
  Select module: 'virt-mod/1.0' (/home/acotte/workspace/module-5.4.0-dev/install/modulefiles/virt-mod/.common) matching 'virt-mod/1.0'
  Get modules: {} matching 'virt-mod/1.0' in '/home/acotte/workspace/module-5.4.0-dev/install/modulefiles/vir'
  Select module: 'virt-mod/1.0' (/home/acotte/workspace/module-5.4.0-dev/install/modulefiles/virt-mod/.common) matching 'virt-mod/1.0'
  ERROR: Unload of sticky module skipped
DEBUG unsetState: report_sep_next unset

DEBUG setState: report_sep_next set to '1'
DEBUG setState: evalid set to ''
DEBUG setState: msgrecordid set to ''
DEBUG setState: inhibit_req_record set to ''
DEBUG setState: commandname set to ''
DEBUG setState: always_read_full_file set to ''
DEBUG setState: autoinit set to '0'
DEBUG renderSettings: 1 error(s) detected.
DEBUG setState: false_rendered set to '1'
DEBUG setState: shelltype set to 'sh'

...

Modules version and configuration

$ module --version
Modules Release 5.3.1+74-gb78fcd48 (2023-07-19)

$ module config --dump-state
Modules Release 5.3.1+74-gb78fcd48 (2023-07-19)

- Config. name ---------.- Value (set by if default overridden) ---------------
advanced_version_spec     1
auto_handling             1
avail_indepth             1
avail_output              modulepath:alias:dirwsym:sym:tag:variantifspec:key
avail_terse_output        modulepath:alias:dirwsym:sym:tag:variantifspec
cache_buffer_bytes        32768
cache_expiry_secs         0
collection_pin_tag        0
collection_pin_version    0
collection_target         <undef>
color                     never
colors                    hi=1:db=2:tr=2:se=2:er=91:wa=93:me=95:in=94:mp=1;94:di=94:al=96:va=93:sy=95:de=4:cm=92:aL=100:L=90;47:H=2:F=41:nF=43:S=46:sS=44:kL=30;48;5;109
contact                   root@localhost
csh_limit                 4000
editor                    vi
extended_default          1
extra_siteconfig          <undef>
home                      /home/acotte/workspace/module-5.4.0-dev/install (env-var)
icase                     search
ignore_cache              0
ignore_user_rc            0
ignored_dirs              CVS RCS SCCS .svn .git .SYNC .sos
implicit_default          1
implicit_requirement      1
list_output               header:idx:variant:sym:tag:key
list_terse_output         header
locked_configs            
mcookie_check             always
mcookie_version_check     1
ml                        1
nearly_forbidden_days     14
pager                     /usr/bin/less -eFKRX
protected_envvars         <undef>
quarantine_support        0
rcfile                    <undef>
redirect_output           1
reset_target_state        __init__
run_quarantine            <undef>
search_match              starts_with
set_shell_startup         0
shells_with_ksh_fpath     
silent_shell_debug        0
siteconfig                /home/acotte/workspace/module-5.4.0-dev/install/etc/siteconfig.tcl
sticky_purge              error
tag_abbrev                auto-loaded=aL:loaded=L:hidden=H:hidden-loaded=H:forbidden=F:nearly-forbidden=nF:sticky=S:super-sticky=sS:keep-loaded=kL
tag_color_name            
tcl_ext_lib               /home/acotte/workspace/module-5.4.0-dev/install/lib/libtclenvmodules.so
tcl_linter                nagelfar.tcl
term_background           dark
term_width                0
unique_name_loaded        0
unload_match_order        returnlast
variant_shortcut          
verbosity                 normal
wa_277                    0

- State name -----------.- Value ----------------------------------------------
always_read_full_file     1
autoinit                  0
clock_seconds             1692698895
cmdline                   /home/acotte/workspace/module-5.4.0-dev/install/libexec/modulecmd.tcl bash config --dump-state
commandname               config
cwd                       /home/acotte/workspace/module-5.4.0-dev
debug_msg_prefix          
domainname                (none)
error_count               0
extra_siteconfig_loaded   0
false_rendered            0
force                     0
hiding_threshold          0
inhibit_errreport         0
inhibit_interp            0
init_error_report         1
is_stderr_tty             0
is_win                    0
kernelversion             #140~18.04.1-Ubuntu SMP Fri Aug 5 11:43:34 UTC 2022
lm_info_cached            0
machine                   x86_64
mode                      
modulefile                {}
modulename                
modulenamevr              
modulepath                
nodename                  UN00306315
os                        Linux
osversion                 5.4.0-124-generic
paginate                  0
path_separator            :
rc_loaded                 /home/acotte/.modulerc
report_format             regular
reportfd                  stderr
return_false              0
shell                     bash
shelltype                 sh
siteconfig_loaded         1
specifiedname             
sub1_separator            &
sub2_separator            |
subcmd                    config
subcmd_args               --dump-state
supported_shells          sh bash ksh zsh csh tcsh fish cmd tcl perl python ruby lisp cmake r
tcl_ext_lib_loaded        1
tcl_version               8.6.8
term_columns              142
timer                     0
usergroups                sudo acotte
username                  acotte

- Env. variable --------.- Value ----------------------------------------------
BASH_FUNC__module_raw%%   () {  eval "$(/usr/bin/tclsh '/home/acotte/workspace/module-5.4.0-dev/install/libexec/modulecmd.tcl' bash "$@")";
 _mlstatus=$?;
 return $_mlstatus
}
BASH_FUNC_module%%        () {  local _mlredir=1;
 if [ -n "${MODULES_REDIRECT_OUTPUT+x}" ]; then
 if [ "$MODULES_REDIRECT_OUTPUT" = '0' ]; then
 _mlredir=0;
 else
 if [ "$MODULES_REDIRECT_OUTPUT" = '1' ]; then
 _mlredir=1;
 fi;
 fi;
 fi;
 case " $@ " in 
 *' --no-redirect '*)
 _mlredir=0
 ;;
 *' --redirect '*)
 _mlredir=1
 ;;
 esac;
 if [ $_mlredir -eq 0 ]; then
 _module_raw "$@";
 else
 _module_raw "$@" 2>&1;
 fi
}
LOADEDMODULES             virt-mod/1.0
MODULEPATH                /home/acotte/workspace/module-5.4.0-dev/install/modulefiles
MODULESHOME               /home/acotte/workspace/module-5.4.0-dev/install
MODULES_CMD               /home/acotte/workspace/module-5.4.0-dev/install/libexec/modulecmd.tcl
_LMFILES_                 /home/acotte/workspace/module-5.4.0-dev/install/modulefiles/virt-mod/.common
__MODULES_LMINIT          module use --append /home/acotte/workspace/module-5.4.0-dev/install/modulefiles
__MODULES_LMTAG           virt-mod/1.0&sticky
__MODULES_SHARE_MANPATH   :1

Additional context

I tried to put the tag in ~/.modulerc or in /home/acotte/workspace/module-5.4.0-dev/install/modulefiles/ but it changes nothing.

I can switch a "file version" of a module by a "virtual version" but the revert is not possible.

This issue was written after a Module mailling-list discussion with a similar subject.

@xdelaruelle
Copy link
Member

Nice catch @adrien-cotte !

I am able to reproduce on my side. This issue is there since the introduction of the sticky feature (v4.7.0).

It is due to the logic of guessing the modulepath of a module based on its modulefile. It is used by isStickinessReloading procedure, but it cannot work with a virtual module.

modules/tcl/modeval.tcl

Lines 768 to 770 in b78fcd4

set modfile [getModulefileFromLoadedModule $modname]
set dir [getModulepathFromModuleName $modfile $modname]
getModules $dir $modname 0 [list rc_defs_included]

@adrien-cotte
Copy link
Contributor Author

What do you suggest?
Maybe we could just store in env the stickiness of a virtual module?

@xdelaruelle
Copy link
Member

Stickiness of loaded modules are already stored in environment (through __MODULES_LMTAG variable).

isStickinessReloading searches for all the modulerc in the path toward the loaded module to get the module-tag definition. Then it is able to check if this sticky definition also matches the switched-on module to allow the operation.

What need to be done is to find the correct path toward modulercs in case of a virtual module.

@xdelaruelle xdelaruelle added this to the 5.4.0 milestone Sep 8, 2023
@xdelaruelle
Copy link
Member

In the end I added a new environment variable __MODULES_LMSTICKYRULE to track sticky definition when they are generic and permit to switch between module versions.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants