I have found two more issues related to 'glance-manage db sync'.
Commands:
'glance-manage db sync' has two arguments 'version' and 'current_version'.
If you give 'current_version' greater than the actual current database version it
throws InvalidVersionError exception with traceback.
$ glance-manage db sync 45 56
LOG:
2016-03-11 10:21:37.520 CRITICAL glance [-] InvalidVersionError: 56
2016-03-11 10:21:37.520 TRACE glance Traceback (most recent call last):
2016-03-11 10:21:37.520 TRACE glance File "/usr/local/bin/glance-manage", line 10, in <module>
2016-03-11 10:21:37.520 TRACE glance sys.exit(main())
2016-03-11 10:21:37.520 TRACE glance File "/opt/stack/glance/glance/cmd/manage.py", line 383, in main
2016-03-11 10:21:37.520 TRACE glance return CONF.command.action_fn(*func_args, **func_kwargs)
2016-03-11 10:21:37.520 TRACE glance File "/opt/stack/glance/glance/cmd/manage.py", line 146, in sync
2016-03-11 10:21:37.520 TRACE glance version=current_version)
2016-03-11 10:21:37.520 TRACE glance File "/usr/local/lib/python2.7/dist-packages/oslo_db/sqlalchemy/migration.py", line 153, in db_version_control
2016-03-11 10:21:37.520 TRACE glance versioning_api.version_control(engine, repository, version)
2016-03-11 10:21:37.520 TRACE glance File "<decorator-gen-8>", line 2, in version_control
2016-03-11 10:21:37.520 TRACE glance File "/usr/local/lib/python2.7/dist-packages/migrate/versioning/util/__init__.py", line 160, in with_engine
2016-03-11 10:21:37.520 TRACE glance return f(*a, **kw)
2016-03-11 10:21:37.520 TRACE glance File "/usr/local/lib/python2.7/dist-packages/migrate/versioning/api.py", line 250, in version_control
2016-03-11 10:21:37.520 TRACE glance ControlledSchema.create(engine, repository, version)
2016-03-11 10:21:37.520 TRACE glance File "/usr/local/lib/python2.7/dist-packages/migrate/versioning/schema.py", line 140, in create
2016-03-11 10:21:37.520 TRACE glance version = cls._validate_version(repository, version)
2016-03-11 10:21:37.520 TRACE glance File "/usr/local/lib/python2.7/dist-packages/migrate/versioning/schema.py", line 161, in _validate_version
2016-03-11 10:21:37.520 TRACE glance raise exceptions.InvalidVersionError(version)
2016-03-11 10:21:37.520 TRACE glance InvalidVersionError: 56
2016-03-11 10:21:37.520 TRACE glance
In case of 'current_version' greater than 0 and less than the current database version it throws DatabaseAlreadyControlledError.
$ glance-manage db sync 100 43
LOG:
2016-03-11 09:17:18.841 CRITICAL glance [-] DatabaseAlreadyControlledError
2016-03-11 09:17:18.841 TRACE glance Traceback (most recent call last):
2016-03-11 09:17:18.841 TRACE glance File "/usr/local/bin/glance-manage", line 10, in <module>
2016-03-11 09:17:18.841 TRACE glance sys.exit(main())
2016-03-11 09:17:18.841 TRACE glance File "/opt/stack/glance/glance/cmd/manage.py", line 353, in main
2016-03-11 09:17:18.841 TRACE glance return CONF.command.action_fn(*func_args, **func_kwargs)
2016-03-11 09:17:18.841 TRACE glance File "/opt/stack/glance/glance/cmd/manage.py", line 117, in sync
2016-03-11 09:17:18.841 TRACE glance version=current_version)
2016-03-11 09:17:18.841 TRACE glance File "/usr/local/lib/python2.7/dist-packages/oslo_db/sqlalchemy/migration.py", line 153, in db_version_control
2016-03-11 09:17:18.841 TRACE glance versioning_api.version_control(engine, repository, version)
2016-03-11 09:17:18.841 TRACE glance File "<decorator-gen-8>", line 2, in version_control
2016-03-11 09:17:18.841 TRACE glance File "/usr/local/lib/python2.7/dist-packages/migrate/versioning/util/__init__.py", line 160, in with_engine
2016-03-11 09:17:18.841 TRACE glance return f(*a, **kw)
2016-03-11 09:17:18.841 TRACE glance File "/usr/local/lib/python2.7/dist-packages/migrate/versioning/api.py", line 250, in version_control
2016-03-11 09:17:18.841 TRACE glance ControlledSchema.create(engine, repository, version)
2016-03-11 09:17:18.841 TRACE glance File "/usr/local/lib/python2.7/dist-packages/migrate/versioning/schema.py", line 141, in create
2016-03-11 09:17:18.841 TRACE glance table = cls._create_table_version(engine, repository, version)
2016-03-11 09:17:18.841 TRACE glance File "/usr/local/lib/python2.7/dist-packages/migrate/versioning/schema.py", line 189, in _create_table_version
2016-03-11 09:17:18.841 TRACE glance raise exceptions.DatabaseAlreadyControlledError
2016-03-11 09:17:18.841 TRACE glance DatabaseAlreadyControlledError
2016-03-11 09:17:18.841 TRACE glance
To fix these issues we can go with following approaches:
[A] Project oslo_db is using sqlalchemy-migrate internally so as both the exceptions are raised from
migrate/versioning/schema.py of sqlalchemy-migrate project [1] [2], we can handle them in oslo_db itself
and raise appropriate exception. Project oslo_db is imported in glance so we can easily import oslo_db.exception
and catch exceptions to provide user friendly messages instead of traceback.
[B] We can use generic 'Exception' class to handle the exceptions which are raised from third party projects.
So which approach is right ? Please suggest your opinion.
Hi All,
I have found two more issues related to 'glance-manage db sync'.
Commands:
'glance-manage db sync' has two arguments 'version' and 'current_version'.
If you give 'current_version' greater than the actual current database version it
throws InvalidVersionError exception with traceback.
$ glance-manage db sync 45 56
LOG: rror: 56 bin/glance- manage" , line 10, in <module> glance/ glance/ cmd/manage. py", line 383, in main action_ fn(*func_ args, **func_kwargs) glance/ glance/ cmd/manage. py", line 146, in sync current_ version) lib/python2. 7/dist- packages/ oslo_db/ sqlalchemy/ migration. py", line 153, in db_version_control api.version_ control( engine, repository, version) gen-8>" , line 2, in version_control lib/python2. 7/dist- packages/ migrate/ versioning/ util/__ init__. py", line 160, in with_engine lib/python2. 7/dist- packages/ migrate/ versioning/ api.py" , line 250, in version_control a.create( engine, repository, version) lib/python2. 7/dist- packages/ migrate/ versioning/ schema. py", line 140, in create version( repository, version) lib/python2. 7/dist- packages/ migrate/ versioning/ schema. py", line 161, in _validate_version InvalidVersionE rror(version) rror: 56
2016-03-11 10:21:37.520 CRITICAL glance [-] InvalidVersionE
2016-03-11 10:21:37.520 TRACE glance Traceback (most recent call last):
2016-03-11 10:21:37.520 TRACE glance File "/usr/local/
2016-03-11 10:21:37.520 TRACE glance sys.exit(main())
2016-03-11 10:21:37.520 TRACE glance File "/opt/stack/
2016-03-11 10:21:37.520 TRACE glance return CONF.command.
2016-03-11 10:21:37.520 TRACE glance File "/opt/stack/
2016-03-11 10:21:37.520 TRACE glance version=
2016-03-11 10:21:37.520 TRACE glance File "/usr/local/
2016-03-11 10:21:37.520 TRACE glance versioning_
2016-03-11 10:21:37.520 TRACE glance File "<decorator-
2016-03-11 10:21:37.520 TRACE glance File "/usr/local/
2016-03-11 10:21:37.520 TRACE glance return f(*a, **kw)
2016-03-11 10:21:37.520 TRACE glance File "/usr/local/
2016-03-11 10:21:37.520 TRACE glance ControlledSchem
2016-03-11 10:21:37.520 TRACE glance File "/usr/local/
2016-03-11 10:21:37.520 TRACE glance version = cls._validate_
2016-03-11 10:21:37.520 TRACE glance File "/usr/local/
2016-03-11 10:21:37.520 TRACE glance raise exceptions.
2016-03-11 10:21:37.520 TRACE glance InvalidVersionE
2016-03-11 10:21:37.520 TRACE glance
In case of 'current_version' greater than 0 and less than the current database version it throws DatabaseAlready ControlledError .
$ glance-manage db sync 100 43
LOG: ControlledError bin/glance- manage" , line 10, in <module> glance/ glance/ cmd/manage. py", line 353, in main action_ fn(*func_ args, **func_kwargs) glance/ glance/ cmd/manage. py", line 117, in sync current_ version) lib/python2. 7/dist- packages/ oslo_db/ sqlalchemy/ migration. py", line 153, in db_version_control api.version_ control( engine, repository, version) gen-8>" , line 2, in version_control lib/python2. 7/dist- packages/ migrate/ versioning/ util/__ init__. py", line 160, in with_engine lib/python2. 7/dist- packages/ migrate/ versioning/ api.py" , line 250, in version_control a.create( engine, repository, version) lib/python2. 7/dist- packages/ migrate/ versioning/ schema. py", line 141, in create table_version( engine, repository, version) lib/python2. 7/dist- packages/ migrate/ versioning/ schema. py", line 189, in _create_ table_version DatabaseAlready ControlledError ControlledError
2016-03-11 09:17:18.841 CRITICAL glance [-] DatabaseAlready
2016-03-11 09:17:18.841 TRACE glance Traceback (most recent call last):
2016-03-11 09:17:18.841 TRACE glance File "/usr/local/
2016-03-11 09:17:18.841 TRACE glance sys.exit(main())
2016-03-11 09:17:18.841 TRACE glance File "/opt/stack/
2016-03-11 09:17:18.841 TRACE glance return CONF.command.
2016-03-11 09:17:18.841 TRACE glance File "/opt/stack/
2016-03-11 09:17:18.841 TRACE glance version=
2016-03-11 09:17:18.841 TRACE glance File "/usr/local/
2016-03-11 09:17:18.841 TRACE glance versioning_
2016-03-11 09:17:18.841 TRACE glance File "<decorator-
2016-03-11 09:17:18.841 TRACE glance File "/usr/local/
2016-03-11 09:17:18.841 TRACE glance return f(*a, **kw)
2016-03-11 09:17:18.841 TRACE glance File "/usr/local/
2016-03-11 09:17:18.841 TRACE glance ControlledSchem
2016-03-11 09:17:18.841 TRACE glance File "/usr/local/
2016-03-11 09:17:18.841 TRACE glance table = cls._create_
2016-03-11 09:17:18.841 TRACE glance File "/usr/local/
2016-03-11 09:17:18.841 TRACE glance raise exceptions.
2016-03-11 09:17:18.841 TRACE glance DatabaseAlready
2016-03-11 09:17:18.841 TRACE glance
To fix these issues we can go with following approaches:
[A] Project oslo_db is using sqlalchemy-migrate internally so as both the exceptions are raised from versioning/ schema. py of sqlalchemy-migrate project [1] [2], we can handle them in oslo_db itself
migrate/
and raise appropriate exception. Project oslo_db is imported in glance so we can easily import oslo_db.exception
and catch exceptions to provide user friendly messages instead of traceback.
[B] We can use generic 'Exception' class to handle the exceptions which are raised from third party projects.
So which approach is right ? Please suggest your opinion.
[1] https:/ /github. com/openstack/ sqlalchemy- migrate/ blob/master/ migrate/ versioning/ schema. py#L189 /github. com/openstack/ sqlalchemy- migrate/ blob/master/ migrate/ versioning/ schema. py#L161
[2] https:/