← Back to team overview

openerp-india team mailing list archive

[Bug 1023615] Re: Module upgrade ignores noupdate attribute for deleted records

 

More analysis: it looks like the problem is that version 6.0 started deleting the ir_model_data records when you delete what they point to. The comments in orm.unlink() say that the code was added to remove dangling references. The problem is that once the ir_model_data record is gone, there's no way for the module upgrade process to distinguish between these two scenarios:
1. A record in the data file is new for this version of the module and should be inserted.
2. A record in the database was deleted by a user and should not be replaced.
In both scenarios there's a record in the data file with no matching entry in ir_model_data.

Personally, I would rather leave the dangling ir_model_data records
lying around instead of having to leave a bunch of inactive records in
the configuration tables. Maybe setting the res_id field to null when
you delete the matching record would be a reasonable compromise. The
ir_model_data record stays there to show that the main record was
deleted, but it doesn't point to anything, so there's no dangling
pointer.

-- 
You received this bug notification because you are a member of OpenERP
Indian Team, which is subscribed to OpenERP Server.
https://bugs.launchpad.net/bugs/1023615

Title:
  Module upgrade ignores noupdate attribute for deleted records

Status in OpenERP Server:
  New

Bug description:
  If I delete one of a module's standard configuration records, then
  upgrading the module recreates that record. This happens even when the
  noupdate attribute has been set. For example, when I delete a unit of
  measure, it comes back.

  I suspect this may have been a design change in v6.0 instead of a bug.
  If that's true, will I cause myself problems by changing it back? Was
  there a reason for the change, or did some users just prefer the new
  behaviour?

  Steps to reproduce:
  1. Create a blank database with no demo data using version 6.1.1.
  2. From the Settings menu, choose Modules: Modules.
  3. Turn off the Apps filter and install the product module.
  4. From the Settings menu, choose Users: Users.
  5. Open the admin user and go to the Access Rights tab.
  6. Set the Sales Management level to Manager, and turn on the Extended View.
  7. Reload the main menu. From the Sales menu, choose Configuration: Products: Units of Measure: Units of Measure.
  8. Delete the "g" record.
  9. Go back to the Modules screen and upgrade the product module.
  10. Go back to the Units of Measure screen and click the Find button.

  Expected behaviour: the "g" record should stay deleted because product_data.xml used noupdate="1".
  Actual behaviour: the "g" record is recreated.

  Workaround: instead of deleting the record, mark it inactive.

  Impact:
  There's no way for a user to tell whether a record is a standard configuration record or was added by a user, so they can't tell whether they're allowed to really delete it or they have to deactivate it. If I decide to live with the new behaviour, then I think I'll just have to tell the users not to delete any records from screens in the configuration menus. I guess that's probably a good policy anyway, because they can't easily tell whether it's being referenced by any child records.
  Where it's really biting us, though, is the migration process from version 5.0 to 6.0. Any records that we deleted, like currencies, are unexpectedly reappearing and causing errors.

To manage notifications about this bug go to:
https://bugs.launchpad.net/openobject-server/+bug/1023615/+subscriptions


References