Commit 0e9d656b authored by David Keitel's avatar David Keitel
Browse files

Writer: clean up logic in check_cached_data_okay_to_use()

 -make clearer when and why we test the .cff file
 -also improve logging output in this function
  and in check_if_cff_file_needs_rewritting()
 -test_makefakedata_usecached: add a call to make_cff()
  in 2nd run as an extra check
parent fcf6c307
...@@ -259,46 +259,51 @@ transientTau = {:10.0f}\n""" ...@@ -259,46 +259,51 @@ transientTau = {:10.0f}\n"""
def check_cached_data_okay_to_use(self, cl_mfd): def check_cached_data_okay_to_use(self, cl_mfd):
""" Check if cached data exists and, if it does, if it can be used """ """ Check if cached data exists and, if it does, if it can be used """
getmtime = os.path.getmtime need_new = "Will create new SFT file."
logging.info("Checking if cached data good to reuse...")
if os.path.isfile(self.sftfilepath) is False: if os.path.isfile(self.sftfilepath) is False:
logging.info("No SFT file matching {} found".format(self.sftfilepath)) logging.info("No SFT file matching {} found. {}".format(self.sftfilepath, need_new))
return False return False
else: else:
logging.info("Matching SFT file found") logging.info("OK: Matching SFT file found.")
if getmtime(self.sftfilepath) < getmtime(self.config_file_name): if "injectionSources" in cl_mfd:
logging.info( if os.path.isfile(self.config_file_name):
( if os.path.getmtime(self.sftfilepath) < os.path.getmtime(self.config_file_name):
"The config file {} has been modified since the sft file {} " logging.info(
+ "was created" (
).format(self.config_file_name, self.sftfilepath) "The config file {} has been modified since the SFT file {} "
) + "was created. {}"
return False ).format(self.config_file_name, self.sftfilepath, need_new)
)
return False
else:
logging.info(
"OK: The config file {} is older than the SFT file {}".format(
self.config_file_name, self.sftfilepath)
# NOTE: at this point we assume it's safe to re-use, since
# check_if_cff_file_needs_rewritting()
# should have already been called before
)
else:
raise RuntimeError("Commandline requires file '{}' but it is missing.".format(self.config_file_name))
logging.info( logging.info("Checking new commandline against existing SFT header...")
"The config file {} is older than the sft file {}".format(
self.config_file_name, self.sftfilepath
)
)
#logging.info("Checking contents of cff file") # FIXME: check doesn't seem to exist...?
#if not XXX:
#logging.info("Contents unmatched")
#return False
logging.info("Checking commandline against existing SFT header")
cl_dump = "lalapps_SFTdumpheader {} | head -n 20".format(self.sftfilepath) cl_dump = "lalapps_SFTdumpheader {} | head -n 20".format(self.sftfilepath)
output = helper_functions.run_commandline(cl_dump) output = helper_functions.run_commandline(cl_dump)
header_lines_lalapps = [line for line in output.split("\n") if "lalapps" in line] header_lines_lalapps = [line for line in output.split("\n") if "lalapps" in line]
if len(header_lines_lalapps)==0: if len(header_lines_lalapps)==0:
logging.info("Could not obtain comparison commandline from old SFT header") logging.info("Could not obtain comparison commandline from old SFT header. "+need_new)
return False return False
cl_old = header_lines_lalapps[0] cl_old = header_lines_lalapps[0]
if helper_functions.match_commandlines(cl_old,cl_mfd): if not helper_functions.match_commandlines(cl_old,cl_mfd):
logging.info("Commandline matched with old SFT header, use old sft file") logging.info("Commandlines unmatched. "+need_new)
return True
else:
logging.info("Commandlines unmatched, create new sft file")
return False return False
else:
logging.info("OK: Commandline matched with old SFT header.")
logging.info("Looks like cached data matches current options, will re-use it!")
return True
def check_if_cff_file_needs_rewritting(self, content): def check_if_cff_file_needs_rewritting(self, content):
""" Check if the .cff file has changed """ Check if the .cff file has changed
...@@ -306,24 +311,25 @@ transientTau = {:10.0f}\n""" ...@@ -306,24 +311,25 @@ transientTau = {:10.0f}\n"""
Returns True if the file should be overwritten - where possible avoid Returns True if the file should be overwritten - where possible avoid
overwriting to allow cached data to be used overwriting to allow cached data to be used
""" """
logging.info("Checking if we can re-use injection config file...")
if os.path.isfile(self.config_file_name) is False: if os.path.isfile(self.config_file_name) is False:
logging.info("No config file {} found".format(self.config_file_name)) logging.info("No config file {} found.".format(self.config_file_name))
return True return True
else: else:
logging.info("Config file {} already exists".format(self.config_file_name)) logging.info("Config file {} already exists.".format(self.config_file_name))
with open(self.config_file_name, "r") as f: with open(self.config_file_name, "r") as f:
file_content = f.read() file_content = f.read()
if file_content == content: if file_content == content:
logging.info( logging.info(
"File contents match, no update of {} required".format( "File contents match, no update of {} required.".format(
self.config_file_name self.config_file_name
) )
) )
return False return False
else: else:
logging.info( logging.info(
"File contents unmatched, updating {}".format(self.config_file_name) "File contents unmatched, updating {}.".format(self.config_file_name)
) )
return True return True
......
...@@ -80,12 +80,16 @@ class Writer(Test): ...@@ -80,12 +80,16 @@ class Writer(Test):
Writer = pyfstat.Writer(self.label, outdir=self.outdir, duration=3600) Writer = pyfstat.Writer(self.label, outdir=self.outdir, duration=3600)
if os.path.isfile(Writer.sftfilepath): if os.path.isfile(Writer.sftfilepath):
os.remove(Writer.sftfilepath) os.remove(Writer.sftfilepath)
# first run: make everything from scratch
Writer.make_cff() Writer.make_cff()
Writer.run_makefakedata() Writer.run_makefakedata()
time_first = os.path.getmtime(Writer.sftfilepath) time_first = os.path.getmtime(Writer.sftfilepath)
# second run: should re-use .cff and .sft
Writer.make_cff()
Writer.run_makefakedata() Writer.run_makefakedata()
time_second = os.path.getmtime(Writer.sftfilepath) time_second = os.path.getmtime(Writer.sftfilepath)
self.assertTrue(time_first == time_second) self.assertTrue(time_first == time_second)
# third run: touch the .cff to force regeneration
time.sleep(1) # make sure timestamp is actually different! time.sleep(1) # make sure timestamp is actually different!
os.system("touch {}".format(Writer.config_file_name)) os.system("touch {}".format(Writer.config_file_name))
Writer.run_makefakedata() Writer.run_makefakedata()
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment