From 9eba273202873abab5b9f302a9c2ae1cf21c7431 Mon Sep 17 00:00:00 2001 From: John Chilton Date: Mon, 26 Sep 2016 12:57:24 -0400 Subject: [PATCH] Optimized workflow invocation step update. --- lib/galaxy/model/mapping.py | 10 ++++++++++ test/unit/test_galaxy_mapping.py | 20 +++++++++++++++++++- 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/lib/galaxy/model/mapping.py b/lib/galaxy/model/mapping.py index 577009cdfaf4..639da910c08b 100644 --- a/lib/galaxy/model/mapping.py +++ b/lib/galaxy/model/mapping.py @@ -2530,6 +2530,16 @@ def db_next_hid( self, n=1 ): model.History._next_hid = db_next_hid +def _workflow_invocation_update( self ): + conn = object_session( self ).connection() + table = self.table + now_val = now() + stmt = table.update().values(update_time=now_val).where(and_(table.c.id == self.id, table.c.update_time < now_val)) + conn.execute(stmt) + +model.WorkflowInvocation.update = _workflow_invocation_update + + def init( file_path, url, engine_options={}, create_tables=False, map_install_models=False, database_query_profiling_proxy=False, object_store=None, trace_logger=None, use_pbkdf2=True ): """Connect mappings to the database""" diff --git a/test/unit/test_galaxy_mapping.py b/test/unit/test_galaxy_mapping.py index e3a49097ebb3..ccf9c6c93916 100644 --- a/test/unit/test_galaxy_mapping.py +++ b/test/unit/test_galaxy_mapping.py @@ -1,9 +1,18 @@ # -*- coding: utf-8 -*- +import time import unittest -import galaxy.model.mapping as mapping import uuid + from six import text_type +import galaxy.datatypes +import galaxy.model +import galaxy.model.mapping as mapping + +datatypes_registry = galaxy.datatypes.registry.Registry() +datatypes_registry.load_datatypes() +galaxy.model.set_datatypes_registry(datatypes_registry) + class MappingTests( unittest.TestCase ): @@ -450,6 +459,15 @@ def workflow_from_steps(steps): assert subworkflow_invocation_assoc.subworkflow_invocation.history.id == history_id + u1 = loaded_invocation.update_time + time.sleep(1) + loaded_invocation.steps[0].update() + self.expunge() + loaded_invocation = self.query( model.WorkflowInvocation ).get( workflow_invocation.id ) + u2 = loaded_invocation.update_time + + assert u1 != u2 + def new_hda( self, history, **kwds ): return history.add_dataset( self.model.HistoryDatasetAssociation( create_dataset=True, sa_session=self.model.session, **kwds ) )