Explorar el Código

db migration: explicitly specify db engine and charset

Some of the db migration scripts specify the db engine (InnoDB) and
character set (utf-8).

When performing db sync as part of integration tests, the
migration scripts that do not specify the db engine/charset
fail, complaining about incompatible foreign keys:

    sqlalchemy.exc.OperationalError: (pymysql.err.OperationalError)
    (3780, "Referencing column 'endpoint_id' and referenced column 'id' in foreign key
    constraint 'endpoint_region_mapping_ibfk_1' are incompatible.")
    [SQL:
    CREATE TABLE endpoint_region_mapping (
     id VARCHAR(36) NOT NULL,
     endpoint_id VARCHAR(36) NOT NULL,
     region_id VARCHAR(36) NOT NULL,
     created_at DATETIME,
     updated_at DATETIME,
     deleted_at DATETIME,
     deleted VARCHAR(36),
     PRIMARY KEY (id),
     FOREIGN KEY(endpoint_id) REFERENCES endpoint (id),
     FOREIGN KEY(region_id) REFERENCES region (id)
    )

For now, we'll just update those migration scripts to pass the db
engine and charset, which fixes the issue.

Note that we'll soon have to switch from sqlalchemy-migrate to
alembic.
Lucian Petrut hace 3 semanas
padre
commit
42dbc9af34

+ 12 - 4
coriolis/db/sqlalchemy/migrate_repo/versions/014_adds_worker_service_regions.py

@@ -31,7 +31,9 @@ def upgrade(migrate_engine):
             sqlalchemy.Column('deleted', sqlalchemy.String(36)),
             sqlalchemy.Column(
                 'enabled', sqlalchemy.Boolean, nullable=True,
-                default=lambda: False)))
+                default=lambda: False),
+            mysql_engine='InnoDB',
+            mysql_charset='utf8'))
 
     # declare endpoint-region-mapping table:
     tables.append(
@@ -56,7 +58,9 @@ def upgrade(migrate_engine):
             sqlalchemy.Column('created_at', sqlalchemy.DateTime),
             sqlalchemy.Column('updated_at', sqlalchemy.DateTime),
             sqlalchemy.Column('deleted_at', sqlalchemy.DateTime),
-            sqlalchemy.Column('deleted', sqlalchemy.String(36))))
+            sqlalchemy.Column('deleted', sqlalchemy.String(36)),
+            mysql_engine='InnoDB',
+            mysql_charset='utf8'))
 
     # declare service table:
     tables.append(
@@ -87,7 +91,9 @@ def upgrade(migrate_engine):
             sqlalchemy.Column('created_at', sqlalchemy.DateTime),
             sqlalchemy.Column('updated_at', sqlalchemy.DateTime),
             sqlalchemy.Column('deleted_at', sqlalchemy.DateTime),
-            sqlalchemy.Column('deleted', sqlalchemy.String(36))))
+            sqlalchemy.Column('deleted', sqlalchemy.String(36)),
+            mysql_engine='InnoDB',
+            mysql_charset='utf8'))
 
     # declare service-region mappings table:
     tables.append(
@@ -112,7 +118,9 @@ def upgrade(migrate_engine):
             sqlalchemy.Column('created_at', sqlalchemy.DateTime),
             sqlalchemy.Column('updated_at', sqlalchemy.DateTime),
             sqlalchemy.Column('deleted_at', sqlalchemy.DateTime),
-            sqlalchemy.Column('deleted', sqlalchemy.String(36))))
+            sqlalchemy.Column('deleted', sqlalchemy.String(36)),
+            mysql_engine='InnoDB',
+            mysql_charset='utf8'))
 
     for index, table in enumerate(tables):
         try:

+ 3 - 1
coriolis/db/sqlalchemy/migrate_repo/versions/015_adds_action_last_execution_status.py

@@ -10,7 +10,9 @@ def upgrade(migrate_engine):
 
     # add 'last_execution_status' column to 'base_transfer_action':
     base_transfer_action = sqlalchemy.Table(
-        'base_transfer_action', meta, autoload=True)
+        'base_transfer_action', meta, autoload=True,
+        mysql_engine="InnoDB",
+        mysql_charset="utf8")
 
     last_execution_status = sqlalchemy.Column(
         "last_execution_status", sqlalchemy.String(255),

+ 9 - 3
coriolis/db/sqlalchemy/migrate_repo/versions/016_adds_minion_vm_pools.py

@@ -11,7 +11,9 @@ def upgrade(migrate_engine):
     meta.bind = migrate_engine
 
     base_transfer_action = sqlalchemy.Table(
-        'base_transfer_action', meta, autoload=True)
+        'base_transfer_action', meta, autoload=True,
+        mysql_engine="InnoDB",
+        mysql_charset="utf8")
 
     # extend tasks execution 'type' column:
     tasks_execution = sqlalchemy.Table(
@@ -69,7 +71,9 @@ def upgrade(migrate_engine):
                 'minion_max_idle_time', sqlalchemy.Integer, nullable=False),
             sqlalchemy.Column(
                 'minion_retention_strategy', sqlalchemy.String(255),
-                nullable=False)))
+                nullable=False),
+            mysql_engine="InnoDB",
+            mysql_charset="utf8"))
 
     # declare minion machine table:
     tables.append(
@@ -106,7 +110,9 @@ def upgrade(migrate_engine):
                 nullable=True),
             sqlalchemy.Column(
                 'provider_properties', sqlalchemy.Text,
-                nullable=True)))
+                nullable=True),
+            mysql_engine="InnoDB",
+            mysql_charset="utf8"))
 
     tables.append(sqlalchemy.Table(
         'minion_pool_event', meta,

+ 3 - 1
coriolis/db/sqlalchemy/migrate_repo/versions/017_adds_user_scripts_column.py

@@ -10,7 +10,9 @@ def upgrade(migrate_engine):
 
     # add 'user_scripts' column to 'base_transfer_action':
     base_transfer = sqlalchemy.Table(
-        'base_transfer_action', meta, autoload=True)
+        'base_transfer_action', meta, autoload=True,
+        mysql_engine="InnoDB",
+        mysql_charset="utf8")
 
     user_scripts = sqlalchemy.Column(
         "user_scripts", sqlalchemy.Text, nullable=True)

+ 3 - 1
coriolis/db/sqlalchemy/migrate_repo/versions/018_adds_task_progress_idices.py

@@ -11,7 +11,9 @@ def upgrade(migrate_engine):
     task_event.create_column(event_index)
 
     task_progress_update = sqlalchemy.Table(
-        'task_progress_update', meta, autoload=True)
+        'task_progress_update', meta, autoload=True,
+        mysql_engine="InnoDB",
+        mysql_charset="utf8")
     progress_index = sqlalchemy.Column(
         "index", sqlalchemy.Integer, default=0, nullable=False)
     task_progress_update.create_column(progress_index)

+ 3 - 1
coriolis/db/sqlalchemy/migrate_repo/versions/019_add_replica_scenario_field.py

@@ -9,7 +9,9 @@ def upgrade(migrate_engine):
     meta.bind = migrate_engine
 
     replica = sqlalchemy.Table(
-        'replica', meta, autoload=True)
+        'replica', meta, autoload=True,
+        mysql_engine="InnoDB",
+        mysql_charset="utf8")
 
     replica_scenario = sqlalchemy.Column(
         "scenario", sqlalchemy.String(255), nullable=False,

+ 3 - 1
coriolis/db/sqlalchemy/migrate_repo/versions/021_add_deployment_defaults.py

@@ -6,7 +6,9 @@ def upgrade(migrate_engine):
     meta.bind = migrate_engine
 
     base_transfer = sqlalchemy.Table(
-        'base_transfer_action', meta, autoload=True)
+        'base_transfer_action', meta, autoload=True,
+        mysql_engine="InnoDB",
+        mysql_charset="utf8")
     clone_disks = sqlalchemy.Column(
         "clone_disks", sqlalchemy.Boolean, nullable=False, default=True)
     base_transfer.create_column(clone_disks)

+ 3 - 1
coriolis/db/sqlalchemy/migrate_repo/versions/022_adds_auto_deploy_column.py

@@ -6,7 +6,9 @@ def upgrade(migrate_engine):
     meta.bind = migrate_engine
 
     transfer_schedule = sqlalchemy.Table(
-        'transfer_schedules', meta, autoload=True)
+        'transfer_schedules', meta, autoload=True,
+        mysql_engine="InnoDB",
+        mysql_charset="utf8")
     auto_deploy = sqlalchemy.Column(
         'auto_deploy', sqlalchemy.Boolean, nullable=False, default=False)
     transfer_schedule.create_column(auto_deploy)

+ 4 - 1
coriolis/db/sqlalchemy/migrate_repo/versions/023_add_deployer_id.py

@@ -5,7 +5,10 @@ def upgrade(migrate_engine):
     meta = sqlalchemy.MetaData()
     meta.bind = migrate_engine
 
-    deployment = sqlalchemy.Table('deployment', meta, autoload=True)
+    deployment = sqlalchemy.Table(
+        'deployment', meta, autoload=True ,
+        mysql_engine="InnoDB",
+        mysql_charset="utf8")
     deployer_id = sqlalchemy.Column(
         'deployer_id', sqlalchemy.String(36), nullable=True)
     trust_id = sqlalchemy.Column(