On 08/27/2013 04:32 AM, Boris Pavlovic wrote:
Jay,
I should probably share to you about our work around DB.
Migrations should be run only in production and only for production
backends (e.g. psql and mysql)
In tests we should use Schemas created by Models
(BASE.metadata.create_all())
Agree on both.
We are not able to use in this approach in moment because we don't have
any mechanism to check that MODELS and SCHEMAS are EQUAL.
And actually MODELS and SCHEMAS are DIFFERENT.
Sorry, I don't understand the connection... how does not having a
codified way of determining the difference between model and schema
(BTW, this does exist in sqlalchemy-migrate... look at the
compare_model_to_db method) not allow you to use metadata.create_all()
in tests or mean that you can't run migrations only in production?
E.g. in Celiometer we have BP that syncs models and migration
https://blueprints.launchpad.net/ceilometer/+spec/ceilometer-db-sync-models-with-migrations
(in other projects we are doing the same)
And also we are working around (oslo) generic tests that checks that
models and migrations are equal:
https://review.openstack.org/#/c/42307/
OK, cool.
So in our roadmap (in this case is):
1) Soft switch to alembic (with code that allows to have sqla-migrate
and alembic migration in the same time)
I don't see the point in this at all... I would rather see patches that
just switch to Alembic and get rid of SQLAlchemy-migrate. Create an
initial Alembic migration that has the last state of the database schema
under SQLAlchemy-migrate... and then delete SA-Migrate.
2) Sync Models and Migrations (fix DB schemas also)
3) Add from oslo generic test that checks all this stuff
4) Use BASE.create_all() for Schema creation instead of migrations.
This is already done in some projects, IIRC... (Glance used to be this
way, at least)
But in OpenStack is not so simple to implement such huge changes, so it
take some time=)
Best regards,
Boris Pavlovic
---
Mirantis Inc.
On Tue, Aug 27, 2013 at 12:02 AM, Jay Pipes <[email protected]
<mailto:[email protected]>> wrote:
On 08/26/2013 03:40 PM, Herndon, John Luke (HPCS - Ft. Collins) wrote:
Jay -
It looks there is an error in the migration script that causes
it to abort:
AttributeError: 'ForeignKeyConstraint' object has no attribute
'drop'
My guess is the migration runs on the first test, creates event
types
table fine, but exits with the above error, so migration is not
"complete". Thus every subsequent test tries to migrate the db, and
notices that event types already exists.
I'd corrected that particular mistake and pushed an updated
migration script.
Best,
-jay
-john
On 8/26/13 1:15 PM, "Jay Pipes" <[email protected]
<mailto:[email protected]>> wrote:
I just noticed that every single test case for SQL-driver
storage is
executing every single migration upgrade before every single
test case
run:
https://github.com/openstack/__ceilometer/blob/master/__ceilometer/tests/db.py
<https://github.com/openstack/ceilometer/blob/master/ceilometer/tests/db.py>
#L46
https://github.com/openstack/__ceilometer/blob/master/__ceilometer/storage/imp
<https://github.com/openstack/ceilometer/blob/master/ceilometer/storage/imp>
l_sqlalchemy.py#L153
instead of simply creating a new database schema from the
models in the
current source code base using a call to
sqlalchemy.MetaData.create___all().
This results in re-running migrations over and over again,
instead of
having dedicated migration tests that would test each migration
individually, as is the case in projects like Glance...
Is this intentional?
Best,
-jay
On 08/26/2013 02:59 PM, Sandy Walsh wrote:
I'm getting the same problem with a different migration
(mine is
complaining that a column already exists)
http://paste.openstack.org/__show/44512/
<http://paste.openstack.org/show/44512/>
I've compared it to the other migrations and it seems fine.
-S
On 08/26/2013 02:34 PM, Jay Pipes wrote:
Hey all,
I'm trying to figure out what is going wrong with my
code for this
patch:
https://review.openstack.org/__41316
<https://review.openstack.org/41316>
I had previously added a sqlalchemy-migrate
migration script to add an
event_type table, and had that working, but then was
asked to instead
use Alembic for migrations. So, I removed the
sqlalchemy-migrate
migration file and added an Alembic migration [1].
Unfortunately, I am getting the following error when
running tests:
OperationalError: (OperationalError) table
event_type already exists
u'\nCREATE TABLE event_type (\n\tid INTEGER NOT
NULL, \n\t"desc"
VARCHAR(255), \n\tPRIMARY KEY (id), \n\tUNIQUE
("desc")\n)\n\n' ()
The migration adds the event_type table. I've seen
this error occur
before when using SQLite due to SQLite's ALTER TABLE
statement not
allowing the rename of a column. In the
sqlalchemy-migrate migration, I
had a specialized SQLite migration upgrade [2] and
downgrade [3]
script,
but I'm not sure how I am supposed to handle this in
Alembic. Could
someone help me out?
Thanks,
-jay
[1]
https://review.openstack.org/#__/c/41316/16/ceilometer/__storage/sqlalchemy/
<https://review.openstack.org/#/c/41316/16/ceilometer/storage/sqlalchemy/>
alembic/versions/49036daaaafd___add_event_types.py
[2]
https://review.openstack.org/#__/c/41316/14/ceilometer/__storage/sqlalchemy/
<https://review.openstack.org/#/c/41316/14/ceilometer/storage/sqlalchemy/>
migrate_repo/versions/013___sqlite_upgrade.sql
[3]
https://review.openstack.org/#__/c/41316/14/ceilometer/__storage/sqlalchemy/
<https://review.openstack.org/#/c/41316/14/ceilometer/storage/sqlalchemy/>
migrate_repo/versions/013___sqlite_downgrade.sql
_________________________________________________
OpenStack-dev mailing list
[email protected].__org
<mailto:[email protected]>
http://lists.openstack.org/__cgi-bin/mailman/listinfo/__openstack-dev
<http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev>
_________________________________________________
OpenStack-dev mailing list
[email protected].__org
<mailto:[email protected]>
http://lists.openstack.org/__cgi-bin/mailman/listinfo/__openstack-dev
<http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev>
_________________________________________________
OpenStack-dev mailing list
[email protected].__org
<mailto:[email protected]>
http://lists.openstack.org/__cgi-bin/mailman/listinfo/__openstack-dev
<http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev>
_________________________________________________
OpenStack-dev mailing list
[email protected].__org
<mailto:[email protected]>
http://lists.openstack.org/__cgi-bin/mailman/listinfo/__openstack-dev
<http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev>
_______________________________________________
OpenStack-dev mailing list
[email protected]
http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
_______________________________________________
OpenStack-dev mailing list
[email protected]
http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev