Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[16.0][FIX] fs_attachment: Fix attachment store after upgrade #304

Open
wants to merge 1 commit into
base: 16.0
Choose a base branch
from

Conversation

lmignon
Copy link
Sponsor Contributor

@lmignon lmignon commented Nov 25, 2023

Fix attachments stored in Odoo after an addon upgrade.

Prerequisites:

  • The fs_attachment addon is installed, and specific filesystem storage is
    configured.
  • All the attachments are already stored in the appropriate filesystem storage.
    (We assume that if you've installed the addon on an existing database,
    you'vealready migrated the existing attachments appropriately.

Context:

  • You run an upgrade command on your Odoo server.

Problem:

Some attachments could be created during the upgrade process before the load of
the fs_attachment module or the configuration of the filesystem storage backends.
This is especially true for the attachments created by addons to store the app
icons or even attachments from XML data files. As a result, you end up with
attachments that could not be found by some Odoo instances if, for example, you have
multiple Odoo instances running on different servers since these attachments are stored
in the odoo filestore of the server that created them.

Solution:

A solution to this problem is to hook the end of the upgrade process through the
implementation of the _register_hook method on our ir.attachment model. Since
this method is called after the completion of the upgrade process and the full
initialization of the odoo registry, we can safely expect that all the information
we need to know where to store the attachments are available.
From there, we can simply search for all the attachments that are not linked to
any specific storage and store them in the appropriate storage.

@lmignon lmignon force-pushed the 16.0-fix-attahment-store-after-module-upgrade branch from 3ff4888 to e49f7e7 Compare November 25, 2023 16:18
@lmignon lmignon marked this pull request as ready for review November 25, 2023 16:22
@lmignon
Copy link
Sponsor Contributor Author

lmignon commented Nov 25, 2023

cc @sbidoul @adrienpeiffer

Prerequisites:

* The fs_attachment addon is installed, and specific filesystem storage is
  configured.
* All the attachments are already stored in the appropriate filesystem storage.
  (We assume that if you've installed the addon on an existing database,
  you'vealready migrated the existing attachments appropriately.

Context:

* You run an upgrade command on your Odoo server.

Problem:

Some attachments could be created during the upgrade process before the load of
the fs_attachment module or the configuration of the filesystem storage backends.
This is especially true for the attachments created by addons to store the app
icons or even attachments from XML data files. As a result, you end up with
attachments.that could be found by some Odoo instances if, for example, you have
multiple Odoo instances running on different servers since these attachments are stored
in the odoo filestore of the server that created them.

Solution:

A solution to this problem is to hook the end of the upgrade process through the
implementation of the *_register_hook* method on our *ir.attachment* model. Since
This method is called after the completion of the upgrade process and the full
initialization of the odoo registry, we can safely expect that all the information
We need to know where to store the attachments that are available.
From there, we can simply search for all the attachments that are not linked to
any specific storage and store them in the appropriate storage.
@lmignon lmignon force-pushed the 16.0-fix-attahment-store-after-module-upgrade branch from e49f7e7 to 777c459 Compare November 25, 2023 16:28
# done during the initialization. We need to move the attachments that
# could have been created or updated in other addons before this addon
# was loaded
update_module = load_modules_frame.f_locals.get("update_module")
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is it not too much magic? I don't know, I think I prefer to do these kind of operations that can potentially lose data explicitly.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Couldn't this be simplified by simply running it every time?
If there's nothing to do the cost shouldn't be too expensive.

The manual solution has the issue to be an additional hurdle for deployment that requires to be well documented, or the user might face some troubles that might be bad for adoption.

@CasVissers-360ERP
Copy link

@lmignon @sbidoul are you aware that the base vacuuming of Odoo will never run, also for the ignored files?

https://github.com/odoo/odoo/blob/e721ed146d6173cc04efe6103aa6e682fb62917f/odoo/addons/base/models/ir_attachment.py#L165

@CasVissers-360ERP
Copy link

In addition I think there is an issue with force_storage #310

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

4 participants