Comment 2 for bug 704051

Revision history for this message
Raphaƫl Valyi - http://www.akretion.com (rvalyi) wrote : Re: [6.0] critical regression: inheriting ir_model_data will now destroy your database!

A few comments:

The issue occurs because in bin/addons/base/ir/ir_model.py,
the self.loads collection doesn't contain everything it should.
Here is the instrumentation of the code I'm using:

@@ -723,9 +725,22 @@
         module_in = ",".join(["%s"] * len(modules))
         cr.execute('select id,name,model,res_id,module from ir_model_data where module IN (' + module_in + ') and noupdate=%s', modules + [False])
         wkf_todo = []
+# print "*********** loads", self.loads
+ for item in self.loads:
+ if (item[0] == unicode('base') or item[0] == 'base'):
+ print "**** in loads:", item
+
         for (id, name, model, res_id,module) in cr.fetchall():
             if (module,name) not in self.loads:
- self.unlink_mark[(model,res_id)] = id
+# self.unlink_mark[(model,res_id)] = id
+# print "module", module
+ if module != 'base':
+ #print "****", (module,name)
+ self.unlink_mark[(model,res_id)] = id
+ else:
+ self.unlink_mark[(model,res_id)] = id
+ print "not in loads: :(module,name)", (module,name)

And then it will print (with kaboom installed):
**** in loads: ('base', 'user_root')
not in loads: :(module,name) (u'base', u'menu_administration_shortcut')
not in loads: :(module,name) (u'base', u'menu_custom')
not in loads: :(module,name) (u'base', u'next_id_4')
not in loads: :(module,name) (u'base', u'menu_low_workflow')
not in loads: :(module,name) (u'base', u'menu_custom_action')
not in loads: :(module,name) (u'base', u'menu_config')
not in loads: :(module,name) (u'base', u'menu_translation')
not in loads: :(module,name) (u'base', u'menu_translation_app')
not in loads: :(module,name) (u'base', u'menu_translation_export')
not in loads: :(module,name) (u'base', u'menu_users')
not in loads: :(module,name) (u'base', u'menu_security')
not in loads: :(module,name) (u'base', u'menu_management')
not in loads: :(module,name) (u'base', u'reporting_menu')
...

Whereas, without the 'kaboom' module installed, there are dozens of entries in the self.loads collection instead:
**** in loads: ('base', 'values_view_form_action')
**** in loads: ('base', 'bw')
**** in loads: ('base', 'JPY')
**** in loads: ('base', 'ratePLN')
**** in loads: ('base', 'CRC')
**** in loads: ('base', u'access_res_widget')
**** in loads: ('base', 'res_partner_event-wopartner-view_tree')
**** in loads: ('base', 'action_view_base_module_upgrade_window')
**** in loads: ('base', 'config_wizard_simple_view')
**** in loads: ('base', 'action_res_users')
**** in loads: ('base', 'view_translation_form')
**** in loads: ('base', u'access_res_widget_user_group_user')
**** in loads: ('base', 'ir_cron_act')
**** in loads: ('base', 'vi')
**** in loads: ('base', u'access_res_log_all')
**** in loads: ('base', 'RON')
**** in loads: ('base', 'sa')
and nothing that is not in self.loads.

I've still not been able to track why this self.loads is empty at update with kaboom installed.

Other remark: if you flag the module kaboom as 'uninstalled' using SQL, your update seems able to restore the menus but this is no long term solution.