Skip to content

Commit

Permalink
Merge pull request #1750 from ESMCI/jgfouca/cleanup_caseroot_upon_fai…
Browse files Browse the repository at this point in the history
…led_creation

Clean up caseroot directory upon failed creation
Unless we are in test mode or debug mode.

Test suite: scripts_regression_tests --fast
Test baseline:
Test namelist changes:
Test status: bit for bit

Fixes #1674

User interface changes?: Yes, autodeletion of broken case dirs

Update gh-pages html (Y/N)?: N

Code review: jedwards
  • Loading branch information
jedwards4b authored Jul 17, 2017
2 parents ffd327a + 78aefbd commit 154db7b
Show file tree
Hide file tree
Showing 2 changed files with 42 additions and 21 deletions.
27 changes: 6 additions & 21 deletions scripts/create_newcase
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
from Tools.standard_script_setup import *
from CIME.utils import expect, get_model
from CIME.case import Case
from CIME.check_lockedfiles import lock_file

logger = logging.getLogger(__name__)

Expand Down Expand Up @@ -187,27 +186,13 @@ def _main_func(description):
"Case directory {} already exists".format(caseroot))

with Case(caseroot, read_only=False) as case:
# Set values for env_case.xml
case.set_lookup_value("CASE", os.path.basename(casename))
case.set_lookup_value("CASEROOT", caseroot)
case.set_lookup_value("SRCROOT", srcroot)

# Configure the Case
case.configure(compset, grid, machine_name=machine, project=project,
pecount=pecount, compiler=compiler, mpilib=mpilib,
pesfile=pesfile,user_grid=user_grid, gridfile=gridfile, ninst=ninst, test=test,
walltime=walltime, queue=queue, output_root=output_root,
run_unsupported=run_unsupported, answer=answer,
input_dir=input_dir)

case.create_caseroot()

# Write out the case files
case.flush(flushall=True)
case.apply_user_mods(user_mods_dir)

# Lock env_case.xml
lock_file("env_case.xml", caseroot)
case.create(casename, srcroot, compset, grid, user_mods_dir=user_mods_dir, machine_name=machine, project=project,
pecount=pecount, compiler=compiler, mpilib=mpilib,
pesfile=pesfile,user_grid=user_grid, gridfile=gridfile, ninst=ninst, test=test,
walltime=walltime, queue=queue, output_root=output_root,
run_unsupported=run_unsupported, answer=answer,
input_dir=input_dir)

###############################################################################

Expand Down
36 changes: 36 additions & 0 deletions scripts/lib/CIME/case.py
Original file line number Diff line number Diff line change
Expand Up @@ -1425,3 +1425,39 @@ def get_latest_cpl_log(self):
return cpllog
else:
return None

def create(self, casename, srcroot, compset_name, grid_name, user_mods_dir=None, machine_name=None,
project=None, pecount=None, compiler=None, mpilib=None,
pesfile=None,user_grid=False, gridfile=None, ninst=1, test=False,
walltime=None, queue=None, output_root=None, run_unsupported=False, answer=None,
input_dir=None):
try:
# Set values for env_case.xml
self.set_lookup_value("CASE", os.path.basename(casename))
self.set_lookup_value("CASEROOT", self._caseroot)
self.set_lookup_value("SRCROOT", srcroot)

# Configure the Case
self.configure(compset_name, grid_name, machine_name=machine_name, project=project,
pecount=pecount, compiler=compiler, mpilib=mpilib,
pesfile=pesfile,user_grid=user_grid, gridfile=gridfile, ninst=ninst, test=test,
walltime=walltime, queue=queue, output_root=output_root,
run_unsupported=run_unsupported, answer=answer,
input_dir=input_dir)

self.create_caseroot()

# Write out the case files
self.flush(flushall=True)
self.apply_user_mods(user_mods_dir)

# Lock env_case.xml
lock_file("env_case.xml", self._caseroot)
except:
if os.path.exists(self._caseroot) and not logger.isEnabledFor(logging.DEBUG) and not test:
logger.warn("Failed to setup case, removing {}\nUse --debug to force me to keep caseroot".format(self._caseroot))
shutil.rmtree(self._caseroot)
else:
logger.warn("Leaving broken case dir {}".format(self._caseroot))

raise

0 comments on commit 154db7b

Please sign in to comment.