]> review.fuel-infra Code Review - openstack-build/heat-build.git/commitdiff
Migrate remaining TEXT columns to LONGTEXT
authorSteven Hardy <shardy@redhat.com>
Thu, 12 Sep 2013 11:00:28 +0000 (12:00 +0100)
committerSteven Hardy <shardy@redhat.com>
Thu, 12 Sep 2013 11:00:28 +0000 (12:00 +0100)
To avoid cases where mysql silently truncates json data
when it is > 2^16 bytes, migrate all remaining TEXT columns
to LONGTEXT, in a similar way to the fix for bug #1210799

Combined with the fix for bug #1215501 which limits the request
body size, we should never truncate, even if mysql is configured
such that it can happen

Fixes bug #1223029

Change-Id: Ib536cfa8e2952a5e047cd8573288cdd9fee0622c

heat/db/sqlalchemy/migrate_repo/versions/028_text_mysql_longtext.py [new file with mode: 0644]

diff --git a/heat/db/sqlalchemy/migrate_repo/versions/028_text_mysql_longtext.py b/heat/db/sqlalchemy/migrate_repo/versions/028_text_mysql_longtext.py
new file mode 100644 (file)
index 0000000..3a3f80b
--- /dev/null
@@ -0,0 +1,55 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+import sqlalchemy
+from sqlalchemy.dialects import mysql
+from sqlalchemy import types as sqltypes
+
+
+def upgrade(migrate_engine):
+    if migrate_engine.name != 'mysql':
+        return
+
+    meta = sqlalchemy.MetaData(bind=migrate_engine)
+
+    stack = sqlalchemy.Table('stack', meta, autoload=True)
+    stack.c.parameters.alter(type=mysql.LONGTEXT())
+
+    resource = sqlalchemy.Table('resource', meta, autoload=True)
+    resource.c.rsrc_metadata.alter(type=mysql.LONGTEXT())
+
+    watch_rule = sqlalchemy.Table('watch_rule', meta, autoload=True)
+    watch_rule.c.rule.alter(type=mysql.LONGTEXT())
+
+    watch_data = sqlalchemy.Table('watch_data', meta, autoload=True)
+    watch_data.c.data.alter(type=mysql.LONGTEXT())
+
+
+def downgrade(migrate_engine):
+    if migrate_engine.name != 'mysql':
+        return
+
+    meta = sqlalchemy.MetaData(bind=migrate_engine)
+
+    stack = sqlalchemy.Table('stack', meta, autoload=True)
+    stack.c.parameters.alter(type=sqltypes.TEXT())
+
+    resource = sqlalchemy.Table('resource', meta, autoload=True)
+    resource.c.rsrc_metadata.alter(type=sqltypes.TEXT())
+
+    watch_rule = sqlalchemy.Table('watch_rule', meta, autoload=True)
+    watch_rule.c.rule.alter(type=sqltypes.TEXT())
+
+    watch_data = sqlalchemy.Table('watch_data', meta, autoload=True)
+    watch_data.c.data.alter(type=sqltypes.TEXT())