diff --git a/lib/galaxy/model/mapping.py b/lib/galaxy/model/mapping.py index be4ca234d36..118ca0e0e56 100644 --- a/lib/galaxy/model/mapping.py +++ b/lib/galaxy/model/mapping.py @@ -571,7 +571,7 @@ WorkflowInvocationStep.table = Table( "workflow_invocation_step", metadata, Column( "update_time", DateTime, default=now, onupdate=now ), Column( "workflow_invocation_id", Integer, ForeignKey( "workflow_invocation.id" ), index=True, nullable=False ), Column( "workflow_step_id", Integer, ForeignKey( "workflow_step.id" ), index=True, nullable=False ), - Column( "job_id", Integer, ForeignKey( "job.id" ), index=True, nullable=False ) + Column( "job_id", Integer, ForeignKey( "job.id" ), index=True, nullable=True ) ) StoredWorkflowUserShareAssociation.table = Table( "stored_workflow_user_share_connection", metadata, diff --git a/lib/galaxy/model/migrate/versions/0042_workflow_invocation_fix.py b/lib/galaxy/model/migrate/versions/0042_workflow_invocation_fix.py new file mode 100644 index 00000000000..908f2896772 --- /dev/null +++ b/lib/galaxy/model/migrate/versions/0042_workflow_invocation_fix.py @@ -0,0 +1,62 @@ +""" +Drop and readd workflow invocation tables, allowing null jobs +""" + +from sqlalchemy import * +from sqlalchemy.orm import * +from migrate import * +from migrate.changeset import * + +import logging +logging.basicConfig( level=logging.DEBUG ) +log = logging.getLogger( __name__ ) + +import datetime +now = datetime.datetime.utcnow + +def upgrade(): + print __doc__ + + metadata = MetaData( migrate_engine ) + db_session = scoped_session( sessionmaker( bind=migrate_engine, autoflush=False, autocommit=True ) ) + metadata.reflect() + + # 1) Drop + + for table_name in [ "workflow_invocation_step", "workflow_invocation" ]: + try: + t = Table( table_name, metadata, autoload=True ).drop() + except: + log.exception( "Failed to drop table '%s', ignoring (might result in wrong schema)" % table_name ) + + # 2) Readd + + metadata = MetaData( migrate_engine ) + db_session = scoped_session( sessionmaker( bind=migrate_engine, autoflush=False, autocommit=True ) ) + metadata.reflect() + + WorkflowInvocation_table = Table( "workflow_invocation", metadata, + Column( "id", Integer, primary_key=True ), + Column( "create_time", DateTime, default=now ), + Column( "update_time", DateTime, default=now, onupdate=now ), + Column( "workflow_id", Integer, ForeignKey( "workflow.id" ), index=True, nullable=False ), + ) + + WorkflowInvocationStep_table = Table( "workflow_invocation_step", metadata, + Column( "id", Integer, primary_key=True ), + Column( "create_time", DateTime, default=now ), + Column( "update_time", DateTime, default=now, onupdate=now ), + Column( "workflow_invocation_id", Integer, ForeignKey( "workflow_invocation.id" ), index=True, nullable=False ), + Column( "workflow_step_id", Integer, ForeignKey( "workflow_step.id" ), index=True, nullable=False ), + Column( "job_id", Integer, ForeignKey( "job.id" ), index=True, nullable=True ), + ) + + for table in [ WorkflowInvocation_table, WorkflowInvocationStep_table ]: + try: + table.create() + except: + log.exception( "Failed to create table '%s', ignoring (might result in wrong schema)" % table.name ) + +def downgrade(): + # No downgrade + pass \ No newline at end of file