From d94148ff7999e0ecee9b617c4daec24da28ea1a5 Mon Sep 17 00:00:00 2001 From: mvdbeek Date: Thu, 18 Jan 2018 15:04:41 +0100 Subject: [PATCH] Prevent reloading when data table is being modified Fixes https://github.com/galaxyproject/galaxy/issues/4783. --- lib/galaxy/tools/data_manager/manager.py | 8 ++++---- lib/galaxy/tools/toolbox/watcher.py | 4 ++++ 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/lib/galaxy/tools/data_manager/manager.py b/lib/galaxy/tools/data_manager/manager.py index 05d3a9b3e1b..1dfa973abed 100644 --- a/lib/galaxy/tools/data_manager/manager.py +++ b/lib/galaxy/tools/data_manager/manager.py @@ -317,10 +317,10 @@ class DataManager(object): self.process_move(data_table_name, name, output_ref_values[name].extra_files_path, **data_table_value) data_table_value[name] = self.process_value_translation(data_table_name, name, **data_table_value) data_table.add_entry(data_table_value, persist=True, entry_source=self) - send_control_task(self.data_managers.app, - 'reload_tool_data_tables', - noop_self=True, - kwargs={'table_name': data_table_name}) + send_control_task(self.data_managers.app, + 'reload_tool_data_tables', + noop_self=True, + kwargs={'table_name': data_table_name}) if self.undeclared_tables and data_tables_dict: # We handle the data move, by just moving all the data out of the extra files path # moving a directory and the target already exists, we move the contents instead diff --git a/lib/galaxy/tools/toolbox/watcher.py b/lib/galaxy/tools/toolbox/watcher.py index ffe1144b53e..23f8d2423ee 100644 --- a/lib/galaxy/tools/toolbox/watcher.py +++ b/lib/galaxy/tools/toolbox/watcher.py @@ -252,6 +252,10 @@ class LocFileEventHandler(FileSystemEventHandler): if self.loc_watcher.path_hash.get(path) == cur_hash: return else: + time.sleep(0.5) + if cur_hash != md5_hash_file(path): + # We're still modifying the file, it'll be picked up later + return self.loc_watcher.path_hash[path] = cur_hash self.loc_watcher.tool_data_tables.reload_tables(path=path)