diff --git a/CHANGELOG.md b/CHANGELOG.md index 0f51a45141eb4bd2f4dc14b0fcb856114cfcf642..f7ab71fa2da0b81aadca7bba42296dac8300d219 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # CHANGELOG +### Pre-release v4.0.0b8 - Release date: TBD + +* Fixed major bug: Prevent accidental `job_data_{expid}.db` file creation + ### Pre-release v4.0.0b7 - Release date: 2024-05-14 * Reduced writing time in status updater background task diff --git a/autosubmit_api/__init__.py b/autosubmit_api/__init__.py index 2eeabb72a6e3aa7797442fbd31b95425370317ca..a539f1b993b62ca52ed101a7855a3aebb82d1caa 100644 --- a/autosubmit_api/__init__.py +++ b/autosubmit_api/__init__.py @@ -17,6 +17,6 @@ # You should have received a copy of the GNU General Public License # along with Autosubmit. If not, see . -__version__ = "4.0.0b7" +__version__ = "4.0.0b8" __author__ = "Luiggi Tenorio, Bruno P. Kinoshita, Cristian GutiƩrrez, Julian Berlin, Wilmer Uruchi" __credits__ = "Barcelona Supercomputing Center" \ No newline at end of file diff --git a/autosubmit_api/autosubmit_legacy/job/job_list.py b/autosubmit_api/autosubmit_legacy/job/job_list.py index 3db57957da0079baa57ee0b0d47937bce2d837bb..cc6e085f87cc4247f5544c1772cf77b8f2b10282 100644 --- a/autosubmit_api/autosubmit_legacy/job/job_list.py +++ b/autosubmit_api/autosubmit_legacy/job/job_list.py @@ -589,8 +589,12 @@ class JobList: db_file = os.path.join(path_local_root, basic_config.DB_FILE) # Job information from job historic data # print("Get current job data structure...") - experiment_history = ExperimentHistoryDirector(ExperimentHistoryBuilder(expid)).build_reader_experiment_history() - job_data = experiment_history.manager.get_all_last_job_data_dcs() if experiment_history.is_header_ready() else None + job_data = None + try: + experiment_history = ExperimentHistoryDirector(ExperimentHistoryBuilder(expid)).build_reader_experiment_history() + job_data = experiment_history.manager.get_all_last_job_data_dcs() if experiment_history.is_header_ready() else None + except Exception: + print(traceback.print_exc()) # Result variables job_running_time_seconds = dict() job_running_to_runtext = dict() diff --git a/autosubmit_api/builders/experiment_history_builder.py b/autosubmit_api/builders/experiment_history_builder.py index c1d090b8cdaec5b5af34cd6f5d83566ee475d582..dd13a67b75371458644483387ff7a2bb18c52ebd 100644 --- a/autosubmit_api/builders/experiment_history_builder.py +++ b/autosubmit_api/builders/experiment_history_builder.py @@ -57,6 +57,9 @@ class ExperimentHistoryBuilder(Builder): self._validate_basic_config() if not self.experiment_history_db_manager: raise Exception("Experiment Database Manager is missing") + else: + if not self.experiment_history_db_manager.my_database_exists(): + raise Exception("Job/Runs database does not exist") if not self.logger: raise Exception("Logging is missing.") return ExperimentHistory(self.expid, self.basic_config, self.experiment_history_db_manager, self.logger) diff --git a/autosubmit_api/database/db_jobdata.py b/autosubmit_api/database/db_jobdata.py index 25a70ad81b4495657b388e5e5303206c67613ff0..b19d6c2f63a1e7e31ac3ad8ed2311fe2b8663819 100644 --- a/autosubmit_api/database/db_jobdata.py +++ b/autosubmit_api/database/db_jobdata.py @@ -490,6 +490,7 @@ class MainDataBase(): if self.conn: c = self.conn.cursor() c.execute(self.create_table_query) + self.conn.commit() else: raise IOError("Not a valid connection") except IOError as exp: diff --git a/autosubmit_api/experiment/common_requests.py b/autosubmit_api/experiment/common_requests.py index f730d58d0fafc31c8523d10a09201e8a41a1bb2c..82be53fc00d8a32e79e3d2057778563f233d540f 100644 --- a/autosubmit_api/experiment/common_requests.py +++ b/autosubmit_api/experiment/common_requests.py @@ -172,16 +172,20 @@ def get_experiment_data(expid): result["pkl_timestamp"] = autosubmit_config_facade.get_pkl_last_modified_timestamp() result["chunk_size"] = autosubmit_config_facade.chunk_size result["chunk_unit"] = autosubmit_config_facade.chunk_unit - experiment_history = ExperimentHistoryDirector(ExperimentHistoryBuilder(expid)).build_reader_experiment_history() - experiment_run = experiment_history.manager.get_experiment_run_dc_with_max_id() - if experiment_run and experiment_run.total > 0: - result["total_jobs"] = experiment_run.total - result["completed_jobs"] = experiment_run.completed - result["db_historic_version"] = experiment_history.manager.db_version - else: - result["total_jobs"] = 0 - result["completed_jobs"] = 0 - result["db_historic_version"] = "NA" + + result["total_jobs"] = 0 + result["completed_jobs"] = 0 + result["db_historic_version"] = "NA" + try: + experiment_history = ExperimentHistoryDirector(ExperimentHistoryBuilder(expid)).build_reader_experiment_history() + experiment_run = experiment_history.manager.get_experiment_run_dc_with_max_id() + if experiment_run and experiment_run.total > 0: + result["total_jobs"] = experiment_run.total + result["completed_jobs"] = experiment_run.completed + result["db_historic_version"] = experiment_history.manager.db_version + except Exception as exc: + logger.warning((traceback.format_exc())) + logger.warning((f"Warning: Error in get_experiment_data while reading historical data: {exc}")) except Exception as exp: result["error"] = True