Ejemplo n.º 1
0
def db_sync(version=None):
    if version is not None:
        try:
            version = int(version)
        except ValueError:
            raise exception.Error(_("version should be an integer"))

    current_version = db_version()
    repository = _find_migrate_repo()
    if version is None or version > current_version:
        return versioning_api.upgrade(get_engine(), repository, version)
    else:
        return versioning_api.downgrade(get_engine(), repository, version)
Ejemplo n.º 2
0
def db_sync(version=None):
    if version is not None:
        try:
            version = int(version)
        except ValueError:
            raise exception.Error(_("version should be an integer"))

    current_version = db_version()
    repository = _find_migrate_repo()
    if version is None or version > current_version:
        return versioning_api.upgrade(get_engine(), repository, version)
    else:
        return versioning_api.downgrade(get_engine(), repository,
                                        version)
Ejemplo n.º 3
0
 def _cache_schema(self):
     global DB_SCHEMA
     if not DB_SCHEMA:
         engine = sqla_api.get_engine()
         conn = engine.connect()
         migration.db_sync()
         DB_SCHEMA = "".join(line for line in conn.connection.iterdump())
         engine.dispose()
Ejemplo n.º 4
0
 def setUp(self):
     super().setUp()
     engine = sqla_api.get_engine()
     engine.dispose()
     self._cache_schema()
     conn = engine.connect()
     conn.connection.executescript(DB_SCHEMA)
     self.addCleanup(self.cleanup)
Ejemplo n.º 5
0
def db_version():
    repository = _find_migrate_repo()
    try:
        return versioning_api.db_version(get_engine(), repository)
    except versioning_exceptions.DatabaseNotControlledError:
        # If we aren't version controlled we may already have the database
        # in the state from before we started version control, check for that
        # and set up version_control appropriately
        meta = sqlalchemy.MetaData()
        engine = get_engine()
        meta.reflect(bind=engine)
        tables = meta.tables
        if len(tables) == 0:
            db_version_control(INIT_VERSION)
            return versioning_api.db_version(get_engine(), repository)
        else:
            raise exception.Error(_("Upgrade DB using Essex release first."))
Ejemplo n.º 6
0
def db_version():
    repository = _find_migrate_repo()
    try:
        return versioning_api.db_version(get_engine(), repository)
    except versioning_exceptions.DatabaseNotControlledError:
        # If we aren't version controlled we may already have the database
        # in the state from before we started version control, check for that
        # and set up version_control appropriately
        meta = sqlalchemy.MetaData()
        engine = get_engine()
        meta.reflect(bind=engine)
        tables = meta.tables
        if len(tables) == 0:
            db_version_control(INIT_VERSION)
            return versioning_api.db_version(get_engine(), repository)
        else:
            raise exception.Error(_("Upgrade DB using Essex release first."))
Ejemplo n.º 7
0
def reset_db():
    if FLAGS.database.connection == "sqlite://":
        engine = get_engine()
        engine.dispose()
        conn = engine.connect()
        conn.connection.executescript(_DB)
    else:
        shutil.copyfile(os.path.join(FLAGS.state_path, FLAGS.sqlite_clean_db),
                        os.path.join(FLAGS.state_path, FLAGS.sqlite_db))
Ejemplo n.º 8
0
def db_sync(version=None, init_version=INIT_VERSION, engine=None):
    """Migrate the database to `version` or the most recent version."""

    if engine is None:
        engine = db_api.get_engine()
    return get_backend().db_sync(engine=engine,
                                 abs_path=MIGRATE_REPO_PATH,
                                 version=version,
                                 init_version=init_version)
Ejemplo n.º 9
0
def reset_db():
    if FLAGS.database.connection == "sqlite://":
        engine = get_engine()
        engine.dispose()
        conn = engine.connect()
        conn.connection.executescript(_DB)
    else:
        shutil.copyfile(os.path.join(FLAGS.state_path, FLAGS.sqlite_clean_db),
                        os.path.join(FLAGS.state_path, FLAGS.sqlite_db))
Ejemplo n.º 10
0
def db_sync(version=None, init_version=INIT_VERSION, engine=None):
    """Migrate the database to `version` or the most recent version."""

    if engine is None:
        engine = db_api.get_engine()
    return get_backend().db_sync(engine=engine,
                                 abs_path=MIGRATE_REPO_PATH,
                                 version=version,
                                 init_version=init_version)
Ejemplo n.º 11
0
def db_sync(version=None, engine=None):
    """Migrate the database to `version` or the most recent version.

    We're currently straddling two migration systems, sqlalchemy-migrate and
    alembic. This handles both by ensuring we switch from one to the other at
    the appropriate moment.
    """

    # if the user requested a specific version, check if it's an integer: if
    # so, we're almost certainly in sqlalchemy-migrate land and won't support
    # that
    if version is not None and version.isdigit():
        raise ValueError(
            'You requested an sqlalchemy-migrate database version; this is '
            'no longer supported'
        )

    if engine is None:
        engine = db_api.get_engine()

    repository = _find_migrate_repo()
    config = _find_alembic_conf()

    # discard the URL encoded in alembic.ini in favour of the URL configured
    # for the engine by the database fixtures, casting from
    # 'sqlalchemy.engine.url.URL' to str in the process. This returns a
    # RFC-1738 quoted URL, which means that a password like "foo@" will be
    # turned into "foo%40". This in turns causes a problem for
    # set_main_option() because that uses ConfigParser.set, which (by design)
    # uses *python* interpolation to write the string out ... where "%" is the
    # special python interpolation character! Avoid this mismatch by quoting
    # all %'s for the set below.
    engine_url = str(engine.url).replace('%', '%%')
    config.set_main_option('sqlalchemy.url', str(engine_url))

    # if we're in a deployment where sqlalchemy-migrate is already present,
    # then apply all the updates for that and fake apply the initial alembic
    # migration; if we're not then 'upgrade' will take care of everything
    # this should be a one-time operation
    if (
        _is_database_under_migrate_control(engine, repository) and
        not _is_database_under_alembic_control(engine)
    ):
        _init_alembic_on_legacy_database(engine, repository, config)

    # apply anything later
    LOG.info('Applying migration(s)')
    _upgrade_alembic(engine, config, version)
    LOG.info('Migration(s) applied')
Ejemplo n.º 12
0
def db_version():
    """Get database version."""
    repository = _find_migrate_repo()
    engine = db_api.get_engine()

    migrate_version = None
    if _is_database_under_migrate_control(engine, repository):
        migrate_version = migrate_api.db_version(engine, repository)

    alembic_version = None
    if _is_database_under_alembic_control(engine):
        with engine.connect() as conn:
            m_context = alembic_migration.MigrationContext.configure(conn)
            alembic_version = m_context.get_current_revision()

    return alembic_version or migrate_version
Ejemplo n.º 13
0
def db_sync(version=None, init_version=INIT_VERSION, engine=None):
    """Migrate the database to `version` or the most recent version."""

    if engine is None:
        engine = db_api.get_engine()

    current_db_version = get_backend().db_version(engine, MIGRATE_REPO_PATH,
                                                  init_version)

    # TODO(e0ne): drop version validation when new oslo.db will be released
    if version and int(version) < current_db_version:
        msg = _('Database schema downgrade is not allowed.')
        raise exception.InvalidInput(reason=msg)
    return get_backend().db_sync(engine=engine,
                                 abs_path=MIGRATE_REPO_PATH,
                                 version=version,
                                 init_version=init_version)
Ejemplo n.º 14
0
def db_sync(version=None, init_version=INIT_VERSION, engine=None):
    """Migrate the database to `version` or the most recent version."""

    if engine is None:
        engine = db_api.get_engine()

    current_db_version = get_backend().db_version(engine,
                                                  MIGRATE_REPO_PATH,
                                                  init_version)

    # TODO(e0ne): drop version validation when new oslo.db will be released
    if version and int(version) < current_db_version:
        msg = _('Database schema downgrade is not allowed.')
        raise exception.InvalidInput(reason=msg)
    return get_backend().db_sync(engine=engine,
                                 abs_path=MIGRATE_REPO_PATH,
                                 version=version,
                                 init_version=init_version)
Ejemplo n.º 15
0
 def setUp(self):
     super(PurgeDeletedTest, self).setUp()
     self.context = context.get_admin_context()
     self.engine = db_api.get_engine()
     self.session = db_api.get_session()
     self.conn = self.engine.connect()
     self.volumes = sqlalchemyutils.get_table(
         self.engine, "volumes")
     # The volume_metadata table has a FK of volume_id
     self.vm = sqlalchemyutils.get_table(
         self.engine, "volume_metadata")
     self.uuidstrs = []
     for unused in range(6):
         self.uuidstrs.append(uuid.uuid4().hex)
     # Add 6 rows to table
     for uuidstr in self.uuidstrs:
         ins_stmt = self.volumes.insert().values(id=uuidstr)
         self.conn.execute(ins_stmt)
         ins_stmt = self.vm.insert().values(volume_id=uuidstr)
         self.conn.execute(ins_stmt)
     # Set 4 of them deleted, 2 are 60 days ago, 2 are 20 days ago
     old = datetime.now() - timedelta(days=20)
     older = datetime.now() - timedelta(days=60)
     make_old = self.volumes.update().\
         where(self.volumes.c.id.in_(self.uuidstrs[1:3]))\
         .values(deleted_at=old)
     make_older = self.volumes.update().\
         where(self.volumes.c.id.in_(self.uuidstrs[4:6]))\
         .values(deleted_at=older)
     make_meta_old = self.vm.update().\
         where(self.vm.c.volume_id.in_(self.uuidstrs[1:3]))\
         .values(deleted_at=old)
     make_meta_older = self.vm.update().\
         where(self.vm.c.volume_id.in_(self.uuidstrs[4:6]))\
         .values(deleted_at=older)
     self.conn.execute(make_old)
     self.conn.execute(make_older)
     self.conn.execute(make_meta_old)
     self.conn.execute(make_meta_older)
Ejemplo n.º 16
0
def setup():
    import mox  # Fail fast if you don't have mox. Workaround for bug 810424

    from cinder.db import migration
    from cinder.tests import fake_flags
    fake_flags.set_defaults(FLAGS)

    if FLAGS.database.connection == "sqlite://":
        if migration.db_version() > 1:
            return
    else:
        testdb = os.path.join(FLAGS.state_path, FLAGS.sqlite_db)
        if os.path.exists(testdb):
            return
    migration.db_sync()

    if FLAGS.database.connection == "sqlite://":
        global _DB
        engine = get_engine()
        conn = engine.connect()
        _DB = "".join(line for line in conn.connection.iterdump())
    else:
        cleandb = os.path.join(FLAGS.state_path, FLAGS.sqlite_clean_db)
        shutil.copyfile(testdb, cleandb)
Ejemplo n.º 17
0
def setup():
    import mox  # Fail fast if you don't have mox. Workaround for bug 810424

    from cinder.db import migration
    from cinder.tests import fake_flags
    fake_flags.set_defaults(FLAGS)

    if FLAGS.database.connection == "sqlite://":
        if migration.db_version() > 1:
            return
    else:
        testdb = os.path.join(FLAGS.state_path, FLAGS.sqlite_db)
        if os.path.exists(testdb):
            return
    migration.db_sync()

    if FLAGS.database.connection == "sqlite://":
        global _DB
        engine = get_engine()
        conn = engine.connect()
        _DB = "".join(line for line in conn.connection.iterdump())
    else:
        cleandb = os.path.join(FLAGS.state_path, FLAGS.sqlite_clean_db)
        shutil.copyfile(testdb, cleandb)
Ejemplo n.º 18
0
    def setUp(self):
        super(PurgeDeletedTest, self).setUp()
        self.context = context.get_admin_context()
        self.engine = db_api.get_engine()
        self.session = db_api.get_session()
        self.conn = self.engine.connect()
        self.volumes = sqlalchemyutils.get_table(
            self.engine, "volumes")
        # The volume_metadata table has a FK of volume_id
        self.vm = sqlalchemyutils.get_table(
            self.engine, "volume_metadata")

        self.vol_types = sqlalchemyutils.get_table(
            self.engine, "volume_types")
        # The volume_type_projects table has a FK of volume_type_id
        self.vol_type_proj = sqlalchemyutils.get_table(
            self.engine, "volume_type_projects")

        self.snapshots = sqlalchemyutils.get_table(
            self.engine, "snapshots")

        self.sm = sqlalchemyutils.get_table(
            self.engine, "snapshot_metadata")

        self.vgm = sqlalchemyutils.get_table(
            self.engine, "volume_glance_metadata")

        self.uuidstrs = []
        for unused in range(6):
            self.uuidstrs.append(uuid.uuid4().hex)
        # Add 6 rows to table
        for uuidstr in self.uuidstrs:
            ins_stmt = self.volumes.insert().values(id=uuidstr)
            self.conn.execute(ins_stmt)
            ins_stmt = self.vm.insert().values(volume_id=uuidstr)
            self.conn.execute(ins_stmt)
            ins_stmt = self.vgm.insert().values(
                volume_id=uuidstr, key='image_name', value='test')
            self.conn.execute(ins_stmt)

            ins_stmt = self.vol_types.insert().values(id=uuidstr)
            self.conn.execute(ins_stmt)
            ins_stmt = self.vol_type_proj.insert().\
                values(volume_type_id=uuidstr)
            self.conn.execute(ins_stmt)

            ins_stmt = self.snapshots.insert().values(
                id=uuidstr, volume_id=uuidstr)
            self.conn.execute(ins_stmt)
            ins_stmt = self.sm.insert().values(snapshot_id=uuidstr)
            self.conn.execute(ins_stmt)

            ins_stmt = self.vgm.insert().values(
                snapshot_id=uuidstr, key='image_name', value='test')
            self.conn.execute(ins_stmt)

        # Set 4 of them deleted, 2 are 60 days ago, 2 are 20 days ago
        old = timeutils.utcnow() - datetime.timedelta(days=20)
        older = timeutils.utcnow() - datetime.timedelta(days=60)

        make_vol_old = self.volumes.update().\
            where(self.volumes.c.id.in_(self.uuidstrs[1:3]))\
            .values(deleted_at=old)
        make_vol_older = self.volumes.update().\
            where(self.volumes.c.id.in_(self.uuidstrs[4:6]))\
            .values(deleted_at=older)
        make_vol_meta_old = self.vm.update().\
            where(self.vm.c.volume_id.in_(self.uuidstrs[1:3]))\
            .values(deleted_at=old)
        make_vol_meta_older = self.vm.update().\
            where(self.vm.c.volume_id.in_(self.uuidstrs[4:6]))\
            .values(deleted_at=older)

        make_vol_types_old = self.vol_types.update().\
            where(self.vol_types.c.id.in_(self.uuidstrs[1:3]))\
            .values(deleted_at=old)
        make_vol_types_older = self.vol_types.update().\
            where(self.vol_types.c.id.in_(self.uuidstrs[4:6]))\
            .values(deleted_at=older)
        make_vol_type_proj_old = self.vol_type_proj.update().\
            where(self.vol_type_proj.c.volume_type_id.in_(self.uuidstrs[1:3]))\
            .values(deleted_at=old)
        make_vol_type_proj_older = self.vol_type_proj.update().\
            where(self.vol_type_proj.c.volume_type_id.in_(self.uuidstrs[4:6]))\
            .values(deleted_at=older)

        make_snap_old = self.snapshots.update().\
            where(self.snapshots.c.id.in_(self.uuidstrs[1:3]))\
            .values(deleted_at=old)
        make_snap_older = self.snapshots.update().\
            where(self.snapshots.c.id.in_(self.uuidstrs[4:6]))\
            .values(deleted_at=older)
        make_snap_meta_old = self.sm.update().\
            where(self.sm.c.snapshot_id.in_(self.uuidstrs[1:3]))\
            .values(deleted_at=old)
        make_snap_meta_older = self.sm.update().\
            where(self.sm.c.snapshot_id.in_(self.uuidstrs[4:6]))\
            .values(deleted_at=older)

        make_vol_glance_meta_old = self.vgm.update().\
            where(self.vgm.c.volume_id.in_(self.uuidstrs[1:3]))\
            .values(deleted_at=old)
        make_vol_glance_meta_older = self.vgm.update().\
            where(self.vgm.c.volume_id.in_(self.uuidstrs[4:6]))\
            .values(deleted_at=older)
        make_snap_glance_meta_old = self.vgm.update().\
            where(self.vgm.c.snapshot_id.in_(self.uuidstrs[1:3]))\
            .values(deleted_at=old)
        make_snap_glance_meta_older = self.vgm.update().\
            where(self.vgm.c.snapshot_id.in_(self.uuidstrs[4:6]))\
            .values(deleted_at=older)

        self.conn.execute(make_vol_old)
        self.conn.execute(make_vol_older)
        self.conn.execute(make_vol_meta_old)
        self.conn.execute(make_vol_meta_older)

        self.conn.execute(make_vol_types_old)
        self.conn.execute(make_vol_types_older)
        self.conn.execute(make_vol_type_proj_old)
        self.conn.execute(make_vol_type_proj_older)

        self.conn.execute(make_snap_old)
        self.conn.execute(make_snap_older)
        self.conn.execute(make_snap_meta_old)
        self.conn.execute(make_snap_meta_older)

        self.conn.execute(make_vol_glance_meta_old)
        self.conn.execute(make_vol_glance_meta_older)
        self.conn.execute(make_snap_glance_meta_old)
        self.conn.execute(make_snap_glance_meta_older)
Ejemplo n.º 19
0
 def version(self):
     """Print the current database version."""
     print(migration.db_version(db_api.get_engine(),
                                db_migration.MIGRATE_REPO_PATH,
                                db_migration.INIT_VERSION))
Ejemplo n.º 20
0
 def version(self):
     """Print the current database version."""
     print(
         migration.db_version(db_api.get_engine(),
                              db_migration.MIGRATE_REPO_PATH,
                              db_migration.INIT_VERSION))
Ejemplo n.º 21
0
 def cleanup(self):
     engine = sqla_api.get_engine()
     engine.dispose()
Ejemplo n.º 22
0
def db_version_control(version=None):
    repository = _find_migrate_repo()
    versioning_api.version_control(get_engine(), repository, version)
    return version
Ejemplo n.º 23
0
 def _create_key_value_table(self):
     models.BASE.metadata.create_all(sqla_api.get_engine(),
                                     tables=[KeyValue.__table__])
Ejemplo n.º 24
0
    def setUp(self):
        super(PurgeDeletedTest, self).setUp()
        self.context = context.get_admin_context()
        self.engine = db_api.get_engine()
        self.session = db_api.get_session()
        self.conn = self.engine.connect()
        self.volumes = sqlalchemyutils.get_table(self.engine, "volumes")
        # The volume_metadata table has a FK of volume_id
        self.vm = sqlalchemyutils.get_table(self.engine, "volume_metadata")

        self.vol_types = sqlalchemyutils.get_table(self.engine, "volume_types")
        # The volume_type_projects table has a FK of volume_type_id
        self.vol_type_proj = sqlalchemyutils.get_table(self.engine,
                                                       "volume_type_projects")

        self.snapshots = sqlalchemyutils.get_table(self.engine, "snapshots")

        self.sm = sqlalchemyutils.get_table(self.engine, "snapshot_metadata")

        self.vgm = sqlalchemyutils.get_table(self.engine,
                                             "volume_glance_metadata")

        self.uuidstrs = []
        for unused in range(6):
            self.uuidstrs.append(uuid.uuid4().hex)
        # Add 6 rows to table
        for uuidstr in self.uuidstrs:
            ins_stmt = self.volumes.insert().values(id=uuidstr)
            self.conn.execute(ins_stmt)
            ins_stmt = self.vm.insert().values(volume_id=uuidstr)
            self.conn.execute(ins_stmt)
            ins_stmt = self.vgm.insert().values(volume_id=uuidstr,
                                                key='image_name',
                                                value='test')
            self.conn.execute(ins_stmt)

            ins_stmt = self.vol_types.insert().values(id=uuidstr)
            self.conn.execute(ins_stmt)
            ins_stmt = self.vol_type_proj.insert().\
                values(volume_type_id=uuidstr)
            self.conn.execute(ins_stmt)

            ins_stmt = self.snapshots.insert().values(id=uuidstr,
                                                      volume_id=uuidstr)
            self.conn.execute(ins_stmt)
            ins_stmt = self.sm.insert().values(snapshot_id=uuidstr)
            self.conn.execute(ins_stmt)

            ins_stmt = self.vgm.insert().values(snapshot_id=uuidstr,
                                                key='image_name',
                                                value='test')
            self.conn.execute(ins_stmt)

        # Set 4 of them deleted, 2 are 60 days ago, 2 are 20 days ago
        old = timeutils.utcnow() - datetime.timedelta(days=20)
        older = timeutils.utcnow() - datetime.timedelta(days=60)

        make_vol_old = self.volumes.update().\
            where(self.volumes.c.id.in_(self.uuidstrs[1:3]))\
            .values(deleted_at=old)
        make_vol_older = self.volumes.update().\
            where(self.volumes.c.id.in_(self.uuidstrs[4:6]))\
            .values(deleted_at=older)
        make_vol_meta_old = self.vm.update().\
            where(self.vm.c.volume_id.in_(self.uuidstrs[1:3]))\
            .values(deleted_at=old)
        make_vol_meta_older = self.vm.update().\
            where(self.vm.c.volume_id.in_(self.uuidstrs[4:6]))\
            .values(deleted_at=older)

        make_vol_types_old = self.vol_types.update().\
            where(self.vol_types.c.id.in_(self.uuidstrs[1:3]))\
            .values(deleted_at=old)
        make_vol_types_older = self.vol_types.update().\
            where(self.vol_types.c.id.in_(self.uuidstrs[4:6]))\
            .values(deleted_at=older)
        make_vol_type_proj_old = self.vol_type_proj.update().\
            where(self.vol_type_proj.c.volume_type_id.in_(self.uuidstrs[1:3]))\
            .values(deleted_at=old)
        make_vol_type_proj_older = self.vol_type_proj.update().\
            where(self.vol_type_proj.c.volume_type_id.in_(self.uuidstrs[4:6]))\
            .values(deleted_at=older)

        make_snap_old = self.snapshots.update().\
            where(self.snapshots.c.id.in_(self.uuidstrs[1:3]))\
            .values(deleted_at=old)
        make_snap_older = self.snapshots.update().\
            where(self.snapshots.c.id.in_(self.uuidstrs[4:6]))\
            .values(deleted_at=older)
        make_snap_meta_old = self.sm.update().\
            where(self.sm.c.snapshot_id.in_(self.uuidstrs[1:3]))\
            .values(deleted_at=old)
        make_snap_meta_older = self.sm.update().\
            where(self.sm.c.snapshot_id.in_(self.uuidstrs[4:6]))\
            .values(deleted_at=older)

        make_vol_glance_meta_old = self.vgm.update().\
            where(self.vgm.c.volume_id.in_(self.uuidstrs[1:3]))\
            .values(deleted_at=old)
        make_vol_glance_meta_older = self.vgm.update().\
            where(self.vgm.c.volume_id.in_(self.uuidstrs[4:6]))\
            .values(deleted_at=older)
        make_snap_glance_meta_old = self.vgm.update().\
            where(self.vgm.c.snapshot_id.in_(self.uuidstrs[1:3]))\
            .values(deleted_at=old)
        make_snap_glance_meta_older = self.vgm.update().\
            where(self.vgm.c.snapshot_id.in_(self.uuidstrs[4:6]))\
            .values(deleted_at=older)

        self.conn.execute(make_vol_old)
        self.conn.execute(make_vol_older)
        self.conn.execute(make_vol_meta_old)
        self.conn.execute(make_vol_meta_older)

        self.conn.execute(make_vol_types_old)
        self.conn.execute(make_vol_types_older)
        self.conn.execute(make_vol_type_proj_old)
        self.conn.execute(make_vol_type_proj_older)

        self.conn.execute(make_snap_old)
        self.conn.execute(make_snap_older)
        self.conn.execute(make_snap_meta_old)
        self.conn.execute(make_snap_meta_older)

        self.conn.execute(make_vol_glance_meta_old)
        self.conn.execute(make_vol_glance_meta_older)
        self.conn.execute(make_snap_glance_meta_old)
        self.conn.execute(make_snap_glance_meta_older)
Ejemplo n.º 25
0
    def setUp(self):
        super(PurgeDeletedTest, self).setUp()
        self.context = context.get_admin_context()
        self.engine = db_api.get_engine()
        self.session = db_api.get_session()
        self.conn = self.engine.connect()
        self.volumes = sqlalchemyutils.get_table(
            self.engine, "volumes")
        # The volume_metadata table has a FK of volume_id
        self.vm = sqlalchemyutils.get_table(
            self.engine, "volume_metadata")

        self.vol_types = sqlalchemyutils.get_table(
            self.engine, "volume_types")
        # The volume_type_projects table has a FK of volume_type_id
        self.vol_type_proj = sqlalchemyutils.get_table(
            self.engine, "volume_type_projects")

        self.snapshots = sqlalchemyutils.get_table(
            self.engine, "snapshots")

        self.sm = sqlalchemyutils.get_table(
            self.engine, "snapshot_metadata")

        self.vgm = sqlalchemyutils.get_table(
            self.engine, "volume_glance_metadata")

        self.qos = sqlalchemyutils.get_table(
            self.engine, "quality_of_service_specs")

        self.uuidstrs = []
        for unused in range(6):
            self.uuidstrs.append(uuid.uuid4().hex)
        # Add 6 rows to table
        for uuidstr in self.uuidstrs:
            ins_stmt = self.volumes.insert().values(id=uuidstr,
                                                    volume_type_id=uuidstr)
            self.conn.execute(ins_stmt)
            ins_stmt = self.vm.insert().values(volume_id=uuidstr)
            self.conn.execute(ins_stmt)
            ins_stmt = self.vgm.insert().values(
                volume_id=uuidstr, key='image_name', value='test')
            self.conn.execute(ins_stmt)

            ins_stmt = self.vol_types.insert().values(id=uuidstr)
            self.conn.execute(ins_stmt)
            ins_stmt = self.vol_type_proj.insert().\
                values(volume_type_id=uuidstr)
            self.conn.execute(ins_stmt)

            ins_stmt = self.snapshots.insert().values(
                id=uuidstr, volume_id=uuidstr,
                volume_type_id=uuidstr)
            self.conn.execute(ins_stmt)
            ins_stmt = self.sm.insert().values(snapshot_id=uuidstr)
            self.conn.execute(ins_stmt)

            ins_stmt = self.vgm.insert().values(
                snapshot_id=uuidstr, key='image_name', value='test')
            self.conn.execute(ins_stmt)

            ins_stmt = self.qos.insert().values(
                id=uuidstr, key='QoS_Specs_Name', value='test')
            self.conn.execute(ins_stmt)

            ins_stmt = self.vol_types.insert().values(
                id=uuid.uuid4().hex, qos_specs_id=uuidstr)
            self.conn.execute(ins_stmt)

            ins_stmt = self.qos.insert().values(
                id=uuid.uuid4().hex, specs_id=uuidstr, key='desc',
                value='test')
            self.conn.execute(ins_stmt)

        # Set 5 of them deleted
        # 2 are 60 days ago, 2 are 20 days ago, one is just now.
        now = timeutils.utcnow()
        old = timeutils.utcnow() - datetime.timedelta(days=20)
        older = timeutils.utcnow() - datetime.timedelta(days=60)

        make_vol_now = self.volumes.update().\
            where(self.volumes.c.id.in_(self.uuidstrs[0:1]))\
            .values(deleted_at=now, deleted=True)
        make_vol_old = self.volumes.update().\
            where(self.volumes.c.id.in_(self.uuidstrs[1:3]))\
            .values(deleted_at=old, deleted=True)
        make_vol_older = self.volumes.update().\
            where(self.volumes.c.id.in_(self.uuidstrs[4:6]))\
            .values(deleted_at=older, deleted=True)
        make_vol_meta_now = self.vm.update().\
            where(self.vm.c.volume_id.in_(self.uuidstrs[0:1]))\
            .values(deleted_at=now, deleted=True)
        make_vol_meta_old = self.vm.update().\
            where(self.vm.c.volume_id.in_(self.uuidstrs[1:3]))\
            .values(deleted_at=old, deleted=True)
        make_vol_meta_older = self.vm.update().\
            where(self.vm.c.volume_id.in_(self.uuidstrs[4:6]))\
            .values(deleted_at=older, deleted=True)

        make_vol_types_now = self.vol_types.update().\
            where(self.vol_types.c.id.in_(self.uuidstrs[0:1]))\
            .values(deleted_at=now, deleted=True)
        make_vol_types_old = self.vol_types.update().\
            where(self.vol_types.c.id.in_(self.uuidstrs[1:3]))\
            .values(deleted_at=old, deleted=True)
        make_vol_types_older = self.vol_types.update().\
            where(self.vol_types.c.id.in_(self.uuidstrs[4:6]))\
            .values(deleted_at=older, deleted=True)
        make_vol_type_proj_now = self.vol_type_proj.update().\
            where(self.vol_type_proj.c.volume_type_id.in_(self.uuidstrs[0:1]))\
            .values(deleted_at=now, deleted=True)
        make_vol_type_proj_old = self.vol_type_proj.update().\
            where(self.vol_type_proj.c.volume_type_id.in_(self.uuidstrs[1:3]))\
            .values(deleted_at=old, deleted=True)
        make_vol_type_proj_older = self.vol_type_proj.update().\
            where(self.vol_type_proj.c.volume_type_id.in_(self.uuidstrs[4:6]))\
            .values(deleted_at=older, deleted=True)

        make_snap_now = self.snapshots.update().\
            where(self.snapshots.c.id.in_(self.uuidstrs[0:1]))\
            .values(deleted_at=now, deleted=True)
        make_snap_old = self.snapshots.update().\
            where(self.snapshots.c.id.in_(self.uuidstrs[1:3]))\
            .values(deleted_at=old, deleted=True)
        make_snap_older = self.snapshots.update().\
            where(self.snapshots.c.id.in_(self.uuidstrs[4:6]))\
            .values(deleted_at=older, deleted=True)

        make_snap_meta_now = self.sm.update().\
            where(self.sm.c.snapshot_id.in_(self.uuidstrs[0:1]))\
            .values(deleted_at=now, deleted=True)
        make_snap_meta_old = self.sm.update().\
            where(self.sm.c.snapshot_id.in_(self.uuidstrs[1:3]))\
            .values(deleted_at=old, deleted=True)
        make_snap_meta_older = self.sm.update().\
            where(self.sm.c.snapshot_id.in_(self.uuidstrs[4:6]))\
            .values(deleted_at=older, deleted=True)

        make_vol_glance_meta_now = self.vgm.update().\
            where(self.vgm.c.volume_id.in_(self.uuidstrs[0:1]))\
            .values(deleted_at=now, deleted=True)
        make_vol_glance_meta_old = self.vgm.update().\
            where(self.vgm.c.volume_id.in_(self.uuidstrs[1:3]))\
            .values(deleted_at=old, deleted=True)
        make_vol_glance_meta_older = self.vgm.update().\
            where(self.vgm.c.volume_id.in_(self.uuidstrs[4:6]))\
            .values(deleted_at=older, deleted=True)
        make_snap_glance_meta_now = self.vgm.update().\
            where(self.vgm.c.snapshot_id.in_(self.uuidstrs[0:1]))\
            .values(deleted_at=now, deleted=True)
        make_snap_glance_meta_old = self.vgm.update().\
            where(self.vgm.c.snapshot_id.in_(self.uuidstrs[1:3]))\
            .values(deleted_at=old, deleted=True)
        make_snap_glance_meta_older = self.vgm.update().\
            where(self.vgm.c.snapshot_id.in_(self.uuidstrs[4:6]))\
            .values(deleted_at=older, deleted=True)

        make_qos_now = self.qos.update().where(
            self.qos.c.id.in_(self.uuidstrs[0:1])).values(deleted_at=now,
                                                          deleted=True)
        make_qos_old = self.qos.update().where(
            self.qos.c.id.in_(self.uuidstrs[1:3])).values(deleted_at=old,
                                                          deleted=True)
        make_qos_older = self.qos.update().where(
            self.qos.c.id.in_(self.uuidstrs[4:6])).values(deleted_at=older,
                                                          deleted=True)

        make_qos_child_record_now = self.qos.update().where(
            self.qos.c.specs_id.in_(self.uuidstrs[0:1])).values(
            deleted_at=now, deleted=True)
        make_qos_child_record_old = self.qos.update().where(
            self.qos.c.specs_id.in_(self.uuidstrs[1:3])).values(
            deleted_at=old, deleted=True)
        make_qos_child_record_older = self.qos.update().where(
            self.qos.c.specs_id.in_(self.uuidstrs[4:6])).values(
            deleted_at=older, deleted=True)

        make_vol_types1_now = self.vol_types.update().where(
            self.vol_types.c.qos_specs_id.in_(self.uuidstrs[0:1])).values(
            deleted_at=now, deleted=True)
        make_vol_types1_old = self.vol_types.update().where(
            self.vol_types.c.qos_specs_id.in_(self.uuidstrs[1:3])).values(
            deleted_at=old, deleted=True)
        make_vol_types1_older = self.vol_types.update().where(
            self.vol_types.c.qos_specs_id.in_(self.uuidstrs[4:6])).values(
            deleted_at=older, deleted=True)

        self.conn.execute(make_vol_now)
        self.conn.execute(make_vol_old)
        self.conn.execute(make_vol_older)
        self.conn.execute(make_vol_meta_now)
        self.conn.execute(make_vol_meta_old)
        self.conn.execute(make_vol_meta_older)

        self.conn.execute(make_vol_types_now)
        self.conn.execute(make_vol_types_old)
        self.conn.execute(make_vol_types_older)
        self.conn.execute(make_vol_type_proj_now)
        self.conn.execute(make_vol_type_proj_old)
        self.conn.execute(make_vol_type_proj_older)

        self.conn.execute(make_snap_now)
        self.conn.execute(make_snap_old)
        self.conn.execute(make_snap_older)
        self.conn.execute(make_snap_meta_now)
        self.conn.execute(make_snap_meta_old)
        self.conn.execute(make_snap_meta_older)

        self.conn.execute(make_vol_glance_meta_now)
        self.conn.execute(make_vol_glance_meta_old)
        self.conn.execute(make_vol_glance_meta_older)
        self.conn.execute(make_snap_glance_meta_now)
        self.conn.execute(make_snap_glance_meta_old)
        self.conn.execute(make_snap_glance_meta_older)

        self.conn.execute(make_qos_now)
        self.conn.execute(make_qos_old)
        self.conn.execute(make_qos_older)

        self.conn.execute(make_qos_child_record_now)
        self.conn.execute(make_qos_child_record_old)
        self.conn.execute(make_qos_child_record_older)

        self.conn.execute(make_vol_types1_now)
        self.conn.execute(make_vol_types1_old)
        self.conn.execute(make_vol_types1_older)
Ejemplo n.º 26
0
def db_version_control(version=None):
    repository = _find_migrate_repo()
    versioning_api.version_control(get_engine(), repository, version)
    return version