def downgrade_schema(config: metadata_store_pb2.ConnectionConfig, downgrade_to_schema_version: int) -> None: """Downgrades the db specified in the connection config to a schema version. If `downgrade_to_schema_version` is greater or equals to zero and less than the current library's schema version, it runs a downgrade transaction to revert the db schema and migrate the data. The update is transactional, and any failure will cause a full rollback of the downgrade. Once the downgrade is done, the user needs to use the older version of the library to connect to the database. Args: config: a metadata_store_pb2.ConnectionConfig having the connection params downgrade_to_schema_version: downgrades the given database to a specific version. For v0.13.2 release, the schema_version is 0. For 0.14.0 and 0.15.0 release, the schema_version is 4. More details are described in g3doc/get_start.md#upgrade-mlmd-library Raises: InvalidArgumentError: if the `downgrade_to_schema_version` is not given or it is negative or greater than the library version. RuntimeError: if the downgrade is not finished, return detailed error. """ if downgrade_to_schema_version < 0: raise _make_exception('downgrade_to_schema_version not specified', errors.INVALID_ARGUMENT) try: migration_options = metadata_store_pb2.MigrationOptions() migration_options.disable_upgrade_migration = True migration_options.downgrade_to_schema_version = downgrade_to_schema_version metadata_store_serialized.CreateMetadataStore( config.SerializeToString(), migration_options.SerializeToString()) except RuntimeError as e: if str(e).startswith('MLMD cannot be downgraded to schema_version'): raise _make_exception(str(e), errors.INVALID_ARGUMENT) if not str(e).startswith('Downgrade migration was performed.'): raise e # downgrade is done. logging.log(logging.INFO, str(e))
def __init__(self, config: metadata_store_pb2.ConnectionConfig): self._metadata_store = metadata_store_serialized.CreateMetadataStore( config.SerializeToString()) # If you remove this line, errors are not thrown correctly. logging.log(logging.INFO, "MetadataStore initialized")