Add 'dependency' table
Add a new db table for tracking action dependencies. Previously, we were using two list fields (note that a list is ordered) for this purpose. It has caused quite some problems: - Binding List datatype to sqlalchemy.Text is causing DB confusion about the mutable Dict data type. - A List column cannot be checked and/or set in a single SQL statement. - SqlAlchemy ORM layer has very limited support to transactions and even that has been compromised by the oslo.db package. Change-Id: I4b97fcc9fcf7684adbfd48a2f908a0f864691310 Partial-Bug: #1495449
This commit is contained in:
parent
9d5a90012d
commit
bd5091b0d7
|
@ -222,8 +222,8 @@ def upgrade(migrate_engine):
|
|||
sqlalchemy.Column('owner', sqlalchemy.String(36)),
|
||||
sqlalchemy.Column('interval', sqlalchemy.Integer),
|
||||
# FIXME: Don't specify fixed precision.
|
||||
sqlalchemy.Column('start_time', sqlalchemy.Float('24,8')),
|
||||
sqlalchemy.Column('end_time', sqlalchemy.Float('24,8')),
|
||||
sqlalchemy.Column('start_time', sqlalchemy.Float(precision='24,8')),
|
||||
sqlalchemy.Column('end_time', sqlalchemy.Float(precision='24,8')),
|
||||
sqlalchemy.Column('timeout', sqlalchemy.Integer),
|
||||
sqlalchemy.Column('control', sqlalchemy.String(255)),
|
||||
sqlalchemy.Column('status', sqlalchemy.String(255)),
|
||||
|
@ -240,6 +240,18 @@ def upgrade(migrate_engine):
|
|||
mysql_charset='utf8'
|
||||
)
|
||||
|
||||
dependency = sqlalchemy.Table(
|
||||
'dependency', meta,
|
||||
sqlalchemy.Column('id', sqlalchemy.String(36), nullable=False,
|
||||
primary_key=True),
|
||||
sqlalchemy.Column('depended', sqlalchemy.String(36),
|
||||
sqlalchemy.ForeignKey('action.id'), nullable=False),
|
||||
sqlalchemy.Column('dependent', sqlalchemy.String(36),
|
||||
sqlalchemy.ForeignKey('action.id'), nullable=False),
|
||||
mysql_engine='InnoDB',
|
||||
mysql_charset='utf8'
|
||||
)
|
||||
|
||||
event = sqlalchemy.Table(
|
||||
'event', meta,
|
||||
sqlalchemy.Column('id', sqlalchemy.String(36),
|
||||
|
@ -272,6 +284,7 @@ def upgrade(migrate_engine):
|
|||
webhook,
|
||||
credential,
|
||||
action,
|
||||
dependency,
|
||||
receiver,
|
||||
event,
|
||||
)
|
||||
|
|
|
@ -300,6 +300,21 @@ class Credential(BASE, SenlinBase):
|
|||
data = sqlalchemy.Column(types.Dict)
|
||||
|
||||
|
||||
class ActionDependency(BASE, SenlinBase):
|
||||
"""A table for recording action dependencies."""
|
||||
|
||||
__tablename__ = 'dependency'
|
||||
|
||||
id = sqlalchemy.Column('id', sqlalchemy.String(36), primary_key=True,
|
||||
default=lambda: str(uuid.uuid4()))
|
||||
depended = sqlalchemy.Column('depended', sqlalchemy.String(36),
|
||||
sqlalchemy.ForeignKey('action.id'),
|
||||
nullable=False)
|
||||
dependent = sqlalchemy.Column('dependent', sqlalchemy.String(36),
|
||||
sqlalchemy.ForeignKey('action.id'),
|
||||
nullable=False)
|
||||
|
||||
|
||||
class Action(BASE, SenlinBase, SoftDelete):
|
||||
'''An action persisted in the Senlin database.'''
|
||||
|
||||
|
@ -315,8 +330,8 @@ class Action(BASE, SenlinBase, SoftDelete):
|
|||
owner = sqlalchemy.Column(sqlalchemy.String(36))
|
||||
interval = sqlalchemy.Column(sqlalchemy.Integer)
|
||||
# FIXME: Don't specify fixed precision.
|
||||
start_time = sqlalchemy.Column(sqlalchemy.Float('24,8'))
|
||||
end_time = sqlalchemy.Column(sqlalchemy.Float('24,8'))
|
||||
start_time = sqlalchemy.Column(sqlalchemy.Float(precision='24,8'))
|
||||
end_time = sqlalchemy.Column(sqlalchemy.Float(precision='24,8'))
|
||||
timeout = sqlalchemy.Column(sqlalchemy.Integer)
|
||||
status = sqlalchemy.Column(sqlalchemy.String(255))
|
||||
status_reason = sqlalchemy.Column(sqlalchemy.Text)
|
||||
|
|
Loading…
Reference in New Issue