Skip to content

Commit

Permalink
Converting db tables to utf8.
Browse files Browse the repository at this point in the history
bug: 929232
Change-Id: I6bea01b243e0c9dbd7e3b3559adbb73e42484a4c
  • Loading branch information
ironcamel committed Feb 10, 2012
1 parent ea87222 commit b196f4b
Showing 1 changed file with 61 additions and 0 deletions.
61 changes: 61 additions & 0 deletions nova/db/sqlalchemy/migrate_repo/versions/077_convert_to_utf8.py
@@ -0,0 +1,61 @@
# vim: tabstop=4 shiftwidth=4 softtabstop=4

# Copyright 2012 OpenStack LLC.
# All Rights Reserved.
#
# 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.

from sqlalchemy import MetaData

meta = MetaData()


def upgrade(migrate_engine):
meta.bind = migrate_engine

# NOTE (ironcamel): The only table we are not converting to utf8 here is
# dns_domains. This table has a primary key that is 512 characters wide.
# When the mysql engine attempts to convert it to utf8, it complains about
# not supporting key columns larger than 1000.

if migrate_engine.name == "mysql":
# The instances table has to be converted early on. Also, the
# foreign_key_checks has to be disabled inside of the execute command
# that converts the instances table.
migrate_engine.execute("SET foreign_key_checks = 0;"
"ALTER TABLE instances CONVERT TO CHARACTER SET utf8")
tables = ["agent_builds", "aggregate_hosts", "aggregate_metadata",
"aggregates", "auth_tokens", "block_device_mapping",
"bw_usage_cache", "certificates", "compute_nodes", "console_pools",
"consoles", "fixed_ips", "floating_ips", "instance_actions",
"instance_faults", "instance_info_caches", "instance_metadata",
"instance_type_extra_specs", "instance_types", "iscsi_targets",
"key_pairs", "migrate_version", "migrations", "networks",
"projects", "provider_fw_rules", "quotas", "s3_images",
"security_group_instance_association", "security_group_rules",
"security_groups", "services", "sm_backend_config", "sm_flavors",
"sm_volume", "snapshots", "snapshots", "user_project_association",
"user_project_role_association", "user_role_association", "users",
"virtual_interfaces", "virtual_storage_arrays", "volume_metadata",
"volumes", "volume_type_extra_specs", "volume_types", "zones"]
for table in tables:
migrate_engine.execute(
"ALTER TABLE %s CONVERT TO CHARACTER SET utf8" % table)
migrate_engine.execute("SET foreign_key_checks = 1")
migrate_engine.execute(
"ALTER DATABASE nova DEFAULT CHARACTER SET utf8")


def downgrade(migrate_engine):
# utf8 tables should be backwards compatible, so lets leave it alone
pass

0 comments on commit b196f4b

Please sign in to comment.