Hi folks,

today we encountered a problem caused by auto-reload feature and our 
code-organisation.
The problem is that web.py tries reloading modules at some point and while it 
does that it expects that modules could be reloaded in any order without 
raising any errors.

Unfortunately for Nailgun that condition is not satisfied in at least one 
place. That place is SQLAlchemy models which are placed in different modules. 
If web.py tries to reload any model’s module, say notifications.py, before 
reloading base module, Notifications will try registering itself in the old 
Base’s MetaData which already contain info about the appropriate table and that 
causes errors like "Table 'notifications' is already defined for this MetaData 
instance. Specify 'extend_existing=True' to redefine options and columns on an 
existing Table object.” That problem happens on every request that touches 
database.

There are several possible solutions for this problem:

- Disable autoreload even in Debug mode, because tests always run in that mode 
and that’s the cause these failures occure
  - Someone might need that so a command line option or config parameter for 
autoreload
- Re-organise code to guarantee correct reloading order
- Enable extention of existing tables in metadata, but I’m not sure what will 
be other consequences for that.


- romcheg

Attachment: signature.asc
Description: Message signed with OpenPGP using GPGMail

_______________________________________________
OpenStack-dev mailing list
OpenStack-dev@lists.openstack.org
http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev

Reply via email to