示例#1
0
def ensure_indexed(migrate_engine, table_name, index_name, columns):
    if utils.index_exists_on_columns(migrate_engine, table_name, columns):
        LOG.info(
            _LI('Skipped adding %s because an equivalent index'
                ' already exists.'), index_name)
    else:
        utils.add_index(migrate_engine, table_name, index_name, columns)
def upgrade(migrate_engine):
    """Add backup_metadata table."""

    meta = MetaData()
    meta.bind = migrate_engine

    Table('backups', meta, autoload=True)

    backup_metadata = Table(
        'backup_metadata', meta,
        Column('created_at', DateTime(timezone=False)),
        Column('updated_at', DateTime(timezone=False)),
        Column('deleted_at', DateTime(timezone=False)),
        Column('deleted', Boolean(), default=False),
        Column('id', Integer, primary_key=True, nullable=False),
        Column('backup_id', String(36),
               ForeignKey('backups.id'),
               nullable=False),
        Column('key', String(255)),
        Column('value', String(255)),
        mysql_engine='InnoDB',
        mysql_charset='utf8'
    )

    backup_metadata.create()

    if not utils.index_exists_on_columns(migrate_engine,
                                         'backup_metadata',
                                         ['backup_id']):
        utils.add_index(migrate_engine,
                        'backup_metadata',
                        'backup_metadata_backup_id_idx',
                        ['backup_id'])
def upgrade(migrate_engine):
    meta = MetaData()
    meta.bind = migrate_engine

    index_name = 'reservations_deleted_uuid_idx'
    columns = ['deleted', 'uuid']
    if utils.index_exists_on_columns(migrate_engine, 'reservations', columns):
        return

    utils.add_index(migrate_engine, 'reservations', index_name, columns)
示例#4
0
def upgrade(migrate_engine):
    meta = MetaData()
    meta.bind = migrate_engine
    index_name = 'quota_usage_project_resource_idx'
    columns = ['project_id', 'resource']
    if utils.index_exists_on_columns(migrate_engine, 'quota_usages', columns):
        LOG.info(
            'Skipped adding %s because an equivalent index already exists.',
            index_name)
    else:
        utils.add_index(migrate_engine, 'quota_usages', index_name, columns)
示例#5
0
def ensure_index_exists(migrate_engine, table_name, column):
    index_name = table_name + '_' + column + '_idx'
    columns = [column]

    if utils.index_exists_on_columns(migrate_engine, table_name, columns):
        LOG.info(
            'Skipped adding %s because an equivalent index already exists.',
            index_name
        )
    else:
        utils.add_index(migrate_engine, table_name, index_name, columns)
示例#6
0
def upgrade(migrate_engine):
    """Add instance_system_metadata indexes missing on PostgreSQL and other DB.
    """

    # This index was already added by migration 216 for MySQL
    if migrate_engine.name != 'mysql':
        # Adds index for PostgreSQL and other DB
        if not utils.index_exists(migrate_engine, SYS_META_TABLE_NAME,
                                  INDEX_NAME):
            utils.add_index(migrate_engine, SYS_META_TABLE_NAME, INDEX_NAME,
                            INDEX_COLUMNS)
def upgrade(migrate_engine):
    meta = MetaData()
    meta.bind = migrate_engine
    index_name = 'quota_usage_project_resource_idx'
    columns = ['project_id', 'resource']
    if utils.index_exists_on_columns(migrate_engine, 'quota_usages', columns):
        LOG.info(
            'Skipped adding %s because an equivalent index already exists.',
            index_name
        )
    else:
        utils.add_index(migrate_engine, 'quota_usages', index_name, columns)
示例#8
0
def upgrade(migrate_engine):
    meta = MetaData()
    meta.bind = migrate_engine

    if migrate_engine.name == 'sqlite':
        # SQLite is also missing this one index
        if not utils.index_exists(migrate_engine, 'fixed_ips', 'address'):
            utils.add_index(migrate_engine, 'fixed_ips', 'address',
                            ['address'])

        for src_table, src_column, dst_table, dst_column, name in FKEYS:
            src_table = Table(src_table, meta, autoload=True)
            if name in set(fk.name for fk in src_table.foreign_keys):
                continue

            src_column = src_table.c[src_column]

            dst_table = Table(dst_table, meta, autoload=True)
            dst_column = dst_table.c[dst_column]

            fkey = ForeignKeyConstraint(columns=[src_column],
                                        refcolumns=[dst_column],
                                        name=name)
            fkey.create()

        # SQLAlchemy versions < 1.0.0 don't reflect unique constraints
        # for SQLite correctly causing sqlalchemy-migrate to recreate
        # some tables with missing unique constraints. Re-add some
        # potentially missing unique constraints as a workaround.
        for table_name, name, column_names in UNIQUES:
            table = Table(table_name, meta, autoload=True)
            if name in set(c.name for c in table.constraints
                           if isinstance(table, schema.UniqueConstraint)):
                continue

            uc = UniqueConstraint(*column_names, table=table, name=name)
            uc.create()
示例#9
0
def upgrade(migrate_engine):
    meta = MetaData()
    meta.bind = migrate_engine

    if migrate_engine.name == 'sqlite':
        # SQLite is also missing this one index
        if not utils.index_exists(migrate_engine, 'fixed_ips', 'address'):
            utils.add_index(migrate_engine, 'fixed_ips', 'address',
                            ['address'])

        for src_table, src_column, dst_table, dst_column, name in FKEYS:
            src_table = Table(src_table, meta, autoload=True)
            if name in set(fk.name for fk in src_table.foreign_keys):
                continue

            src_column = src_table.c[src_column]

            dst_table = Table(dst_table, meta, autoload=True)
            dst_column = dst_table.c[dst_column]

            fkey = ForeignKeyConstraint(columns=[src_column],
                                        refcolumns=[dst_column],
                                        name=name)
            fkey.create()

        # SQLAlchemy versions < 1.0.0 don't reflect unique constraints
        # for SQLite correctly causing sqlalchemy-migrate to recreate
        # some tables with missing unique constraints. Re-add some
        # potentially missing unique constraints as a workaround.
        for table_name, name, column_names in UNIQUES:
            table = Table(table_name, meta, autoload=True)
            if name in set(c.name for c in table.constraints
                           if isinstance(table, schema.UniqueConstraint)):
                continue

            uc = UniqueConstraint(*column_names, table=table, name=name)
            uc.create()
def ensure_index_exists(migrate_engine, table_name, index_name, column_names):
    if not utils.index_exists(migrate_engine, table_name, index_name):
        utils.add_index(migrate_engine, table_name, index_name, column_names)
def upgrade(migrate_engine):
    if not utils.index_exists_on_columns(
            migrate_engine, 'messages', ['expires_at']):
        utils.add_index(migrate_engine, 'messages',
                        'messages_expire_at_idx', ['expires_at'])
示例#12
0
 def test_add_index(self):
     self.assertFalse(utils.index_exists(self.engine, 'test_table',
                                         'new_index'))
     utils.add_index(self.engine, 'test_table', 'new_index', ('a',))
     self.assertTrue(utils.index_exists(self.engine, 'test_table',
                                        'new_index'))
示例#13
0
 def test_add_index(self):
     self.assertFalse(utils.index_exists(self.engine, 'test_table',
                                         'new_index'))
     utils.add_index(self.engine, 'test_table', 'new_index', ('a',))
     self.assertTrue(utils.index_exists(self.engine, 'test_table',
                                        'new_index'))
示例#14
0
def upgrade(migrate_engine):
    if not utils.index_exists_on_columns(migrate_engine, 'messages',
                                         ['expires_at']):
        utils.add_index(migrate_engine, 'messages', 'messages_expire_at_idx',
                        ['expires_at'])
示例#15
0
def upgrade(migrate_engine):
    meta = MetaData(bind=migrate_engine)

    resource_providers = Table('resource_providers', meta, autoload=True)

    name = Column('name', Unicode(200), nullable=True)
    generation = Column('generation', Integer, default=0)
    can_host = Column('can_host', Integer, default=0)

    if not hasattr(resource_providers.c, 'name'):
        # NOTE(cdent): The resource_providers table is defined as
        # latin1 to be more efficient. Now we need the name column
        # to be UTF8. First create the column, then modify it,
        # otherwise the declarative handling in sqlalchemy gets
        # confused.
        resource_providers.create_column(name)
        if migrate_engine.name == 'mysql':
            name_col_ddl = DDL("ALTER TABLE resource_providers MODIFY name "
                               "VARCHAR(200) CHARACTER SET utf8")
            conn = migrate_engine.connect()
            conn.execute(name_col_ddl)

        uc = UniqueConstraint('name',
                              table=resource_providers,
                              name='uniq_resource_providers0name')
        uc.create()

        # DB2 automatically creates an index for the unique
        # constraint above, so skip adding the index on DB2.
        if migrate_engine.name != 'ibm_db_sa':
            utils.add_index(migrate_engine, 'resource_providers',
                            'resource_providers_name_idx', ['name'])

    if not hasattr(resource_providers.c, 'generation'):
        resource_providers.create_column(generation)

    if not hasattr(resource_providers.c, 'can_host'):
        resource_providers.create_column(can_host)

    resource_provider_aggregates = Table('resource_provider_aggregates',
                                         meta,
                                         Column('resource_provider_id',
                                                Integer,
                                                primary_key=True,
                                                nullable=False),
                                         Column('aggregate_id',
                                                Integer,
                                                primary_key=True,
                                                nullable=False),
                                         mysql_engine='InnoDB',
                                         mysql_charset='latin1')
    Index('resource_provider_aggregates_aggregate_id_idx',
          resource_provider_aggregates.c.aggregate_id)
    resource_provider_aggregates.create(checkfirst=True)

    utils.add_index(migrate_engine, 'allocations',
                    'allocations_resource_provider_class_used_idx',
                    ['resource_provider_id', 'resource_class_id', 'used'])
    utils.drop_index(migrate_engine, 'allocations',
                     'allocations_resource_provider_class_id_idx')

    # Add a unique constraint so that any resource provider can have
    # only one inventory for any given resource class.
    inventories = Table('inventories', meta, autoload=True)
    inventories_uc = UniqueConstraint(
        'resource_provider_id',
        'resource_class_id',
        table=inventories,
        name='uniq_inventories0resource_provider_resource_class')
    inventories_uc.create()
    if migrate_engine.name != 'ibm_db_sa':
        utils.add_index(migrate_engine, 'inventories',
                        'inventories_resource_provider_resource_class_idx',
                        ['resource_provider_id', 'resource_class_id'])
def ensure_index_exists(migrate_engine, table_name, index_name, column_names):
    if not utils.index_exists(migrate_engine, table_name, index_name):
        utils.add_index(migrate_engine, table_name, index_name, column_names)
def upgrade(migrate_engine):
    meta = MetaData(bind=migrate_engine)

    resource_providers = Table('resource_providers', meta, autoload=True)

    name = Column('name', Unicode(200), nullable=True)
    generation = Column('generation', Integer, default=0)
    can_host = Column('can_host', Integer, default=0)

    if not hasattr(resource_providers.c, 'name'):
        # NOTE(cdent): The resource_providers table is defined as
        # latin1 to be more efficient. Now we need the name column
        # to be UTF8. First create the column, then modify it,
        # otherwise the declarative handling in sqlalchemy gets
        # confused.
        resource_providers.create_column(name)
        if migrate_engine.name == 'mysql':
            name_col_ddl = DDL(
                "ALTER TABLE resource_providers MODIFY name "
                "VARCHAR(200) CHARACTER SET utf8")
            conn = migrate_engine.connect()
            conn.execute(name_col_ddl)

        uc = UniqueConstraint('name', table=resource_providers,
                              name='uniq_resource_providers0name')
        uc.create()

        utils.add_index(migrate_engine, 'resource_providers',
                        'resource_providers_name_idx',
                        ['name'])

    if not hasattr(resource_providers.c, 'generation'):
        resource_providers.create_column(generation)

    if not hasattr(resource_providers.c, 'can_host'):
        resource_providers.create_column(can_host)

    resource_provider_aggregates = Table(
        'resource_provider_aggregates', meta,
        Column('resource_provider_id', Integer, primary_key=True,
               nullable=False),
        Column('aggregate_id', Integer, primary_key=True, nullable=False),
        mysql_engine='InnoDB',
        mysql_charset='latin1'
    )
    Index('resource_provider_aggregates_aggregate_id_idx',
          resource_provider_aggregates.c.aggregate_id)
    resource_provider_aggregates.create(checkfirst=True)

    utils.add_index(migrate_engine, 'allocations',
                    'allocations_resource_provider_class_used_idx',
                    ['resource_provider_id', 'resource_class_id',
                     'used'])
    utils.drop_index(migrate_engine, 'allocations',
                     'allocations_resource_provider_class_id_idx')

    # Add a unique constraint so that any resource provider can have
    # only one inventory for any given resource class.
    inventories = Table('inventories', meta, autoload=True)
    inventories_uc = UniqueConstraint(
        'resource_provider_id', 'resource_class_id', table=inventories,
        name='uniq_inventories0resource_provider_resource_class')
    inventories_uc.create()

    utils.add_index(migrate_engine, 'inventories',
                    'inventories_resource_provider_resource_class_idx',
                    ['resource_provider_id', 'resource_class_id'])