- removed comment
Simfactory aborts when --basedir is added as option to 'sim create-submit'
I was trying to group several simulations under the same directory name and thought of using the option --basedir to overwrite my machine default. I was able to submit the job without a problem:
sim create-submit BLAH --config blahblah --machine loewe --basedir /path/to/new/basedir --parfile blah.par --walltime 2:00:00 --num-threads 12 --procs 96
The simulation directory and paths to executable, run and submit scripts were correctly created and saved in properties.ini in the simulation SIMFACTORY directory. However when the job was supposed to start running, Simfactory aborted with the following error message:
Error: unable to load simulation BLAH for execution
Aborting Simfactory.
I suspect this error occurs because the run command doesn't inherit the new --basedir option. I tracked down message in the definition of command_run() in sim-manage.py. Looking at SimRestart in simrestart.py we can see it loads the basedir from the machine entry:
self.BaseDir = simlib.GetBaseDir(machineEntry)
Would it be possible to save basedir to properties.ini and avoid loading it from the machine entry? This would allow the user to overwrite the machine entry.
Keyword:
Comments (8)
-
-
reporter - removed comment
Hi Erik:
Saving it into the simulation's properties.ini file doesn't make sense since this file is located in basedir, so basedir needs to be known to find this file.
I had the impression the simulation info was stored there after submission and loaded when needed to run.
I assume that the simfactory command in the submit script template (*.sub file) needs a --basedir=@BASEDIR@ option. Can you try this? You would either modify the submit script that is stored with the executable, or rebuild the executable with a --submitscript=... option.
I tried your suggestion but unfortunately it didn't work. The submission script was updated correctly in the Cactus/config/<config_name> directory. The submission script was copied correctly to
/path/to/new/basedir/SIMFACTORY/run/Submitscript
here however I see that @MACHINE@ was already replaced while @BASEDIR@ wasn't:
--basedir=@BASEDIR@ --machine=loewe
and at last, in the output directory
output-0000/SIMFACTORY
Submitscript had still @BASEDIR@ not replaced.
So somewhere in this chain info about basedir is not loaded or loaded directly from the machine definition. I added the option --basedir=/path/to/blah both when I 'sim build' and 'sim create-submit'.
Thanks, Bruno.
-
- removed comment
Yes, simulation info is stored in properties.ini. However, basedir determines where the simulation is stored, so Simfactory cannot find simulation X unless it knows the basedir where X is stored.
It seems that BASEDIR is not expanded when the submissions script is copied. This should be easy to add.
-
- removed comment
Can you try this patch?
Index: lib/simrestart.py =================================================================== --- lib/simrestart.py (revision 2304) +++ lib/simrestart.py (working copy) @@ -1224,6 +1224,7 @@ DefineDatabase.Set("EMAIL", email) DefineDatabase.Set("MACHINE", simenv.LocalMachine) DefineDatabase.Set("CONFIGURATION", configuration) + DefineDatabase.Set("BASEDIR", self.BaseDir) localsourcebasedir = simlib.GetLocalSourceBaseDir()
-
reporter - changed status to open
- removed comment
This patch worked well for me. Thanks! Please apply it. Would it be possible to back port it to Noether release?
-
reporter - changed status to open
- removed comment
-
- changed status to resolved
- removed comment
Applied in r2314.
-
- changed status to closed
- edited description
- Log in to comment
Saving it into the simulation's properties.ini file doesn't make sense since this file is located in basedir, so basedir needs to be known to find this file.
I assume that the simfactory command in the submit script template (*.sub file) needs a --basedir=@BASEDIR@ option. Can you try this? You would either modify the submit script that is stored with the executable, or rebuild the executable with a --submitscript=... option.