Commit Graph
29 Commits
Author SHA1 Message Date
Patrick Tombez 3655bce3ae [MIG] attachment_swift: Migration to 14.0 2020-11-03 15:30:48 +01:00
Denis Leemann 287332576a Set module for 14.0 uninstallable 2020-10-06 10:54:24 +02:00
Guewen Baconnier e3e3899143 Rework and fix storage forced in database
The initial issue that triggered this rework is that the forced storage in
database was working only on writes, and was never applied on attachment
creations.

This feature is used to store small files that need to be read in a fast way in
database rather than in the object storage. Reading a file from the object
storage can take 150-200ms, which is fine for downloading a PDF file or a single
image, but not if you need 40 thumbnails.

Down the path to make a correction, I found that:

* the logic to force storage was called in `_inverse_datas`, which is not called
  during a create
* odoo implemented a new method `_get_datas_related_values`, which is a model
  method that receive only the data and the mimetype, and return the attachment
  values and write the file to the correct place

The `_get_datas_related_values` is where we want to plug this special storage,
as it is called for create and write, and already handle the values and
conditional write. But using this method, we have less information than before
about the attachment, so let's review the different criterias we had before:

* res_model: we were using it to always store attachments related to
  'ir.ui.view' in db, because assets are related to this model. However, we
  don't really need to check this: we should store any javascript and css
  documents in database.
* exclude res_model: we could have an exclusion list, to tell that for instance,
  for mail.message, we should never store any image in db. We don't have this
  information anymore, but I think it was never used and added "in case of".
  Because the default configuration is "mail.mail" and "mail.message" and I
  couldn't find any attachment with such res_model in any of our biggest
  databases. So this is removed.
* mimetype and data (size) are the last criteria and we still have them

The new system is only based on mimetype and data size and I think it's actually
more versatile. Previously, we could set a global size and include mimetypes,
but we couldn't say "I want to store all images below 50KB and all files of type
X below 10KB". Now, we have a single system parameter with a dict configuration
(`ir_attachment.storage.force.database`) defaulting to:

    {"image/": 51200, "application/javascript": 0, "text/css": 0}

Assets have a limit of zero, which means they will all be stored in the database
whatever their size is.

Overall, this is a great simplification of the module too, as the method
`_get_datas_related_values` integrates it better in the base calls of IrAttachment.

Note for upgrade:

I doubt we customized the previous system parameters which are now obsolete, but
if yes, the configuration may need to be moved to `ir_attachment.storage.force.database`.
For the record, the params were:

* mimetypes.list.storedb (default: image)
* file.maxsize.storedb (default: 51200)
* excluded.models.storedb (mail.message,mail.mail), no equivalent now

The method IrAttachment.force_storage_to_db_for_special_fields() should be called
through a migration script on existing databases to move the attachments back into
the database.
2020-05-28 07:26:42 +02:00
Akim Juillerat 7bd76d3cd0 Fix authentication to Keystone v3
- Use newer version from python lib.
 - Define project_domain_id + user_domain_id in auth
2020-03-09 13:01:43 +01:00
Mussie SirakandPatrick Tombez 426d7cbe87 Use keystoneauth v3 for Swift attachments 2020-03-04 10:17:02 +01:00
Tonow-c2c be6a79fa87 BSRD-286: MIG V13 attachement_swift 2019-12-03 10:51:59 +01:00
Tonow-c2c cbff157fdd BSRD-286: Set the addons to uninstallable 2019-10-07 12:16:06 +02:00
Guewen Baconnier 580eff0062 Override dependencies with different name and pin versions
The name of the libs and python packages are different, Odoo expects
the inner python package in the manifest, but setuptools cannot find the
libs in pypi, overrides them with the libs names.
2019-05-09 10:10:58 +02:00
Guewen Baconnier c6456a58f7 attachment_swift: share a session for all connections
OVH's Swift applies a rate limit on the authentication.

attachment_swift authenticates again each time it has to read/write an
attachment. When running upgrades on upgrades of files or installing a
new DB, at some point, we get rejected with HTTP 429.

This commit introduces a shared storage for Swift Session. All
connections will reuses the same authentication token created the first
time a connection needs a Session.

Note: needs python-swiftclient>=3.7.0 to have
https://github.com/openstack/python-swiftclient/commit/1971ef880ff225379d4a91f00f89f323a1605eeb
2019-05-09 10:10:58 +02:00
Guewen Baconnier 339876236e Add missing variable in documentation example 2019-05-07 15:51:36 +02:00
jcoux 5c43e3547e fixup! Migration to 12.0 2018-11-23 09:31:46 +01:00
jcoux 7eac1013eb Migration to 12.0 2018-10-24 12:44:45 +02:00
jcoux 73293a1390 Set all modules to uninstallable 2018-10-24 11:53:27 +02:00
Guewen Baconnier 529c4066fa Propagage region_name to swift connection
Otherwise, the bucket will be in the incorrect region
2018-03-16 09:10:58 +01:00
jcouxandGuewen Baconnier 8eaa15df7b [11.0] Fix connection errors when we read attachment 2018-01-11 10:41:26 +01:00
Guewen Baconnier 6cc18007dd Remove web_kanban, does no longer exist in 11.0 2018-01-11 10:41:26 +01:00
Guewen Baconnier 08329c91d2 Replace value.decode('base64') by base64.b64decode (py3) 2017-11-15 15:54:59 +01:00
Guewen Baconnier b084ce278a Set addons installable 2017-11-15 14:56:45 +01:00
Guewen Baconnier f9c290a45a Apply 2to3 automatic migration 2017-11-15 14:55:11 +01:00
Guewen Baconnier 96c9a38150 Set addons uninstallable 2017-11-15 14:31:23 +01:00
Guewen Baconnier 7999386273 Fix tests
When there is no write container setup, no write/delete actions are
done.
2017-11-10 08:52:53 +01:00
Thierry Ducrest d79646d108 Add mocking in Swift tests 2017-11-09 11:33:36 +01:00
Guewen Baconnier abe34fcaa2 Return empty result on file read error
This is how the core implementation works
2017-09-20 15:42:25 +02:00
Guewen Baconnier cbef735c76 Abstract object storage in attachment_s3
Using the base_attachment_object_storage module, the same way
attachment_swift is done. Fixed a few issues along the way in
attachment_swift.
2017-09-20 15:42:25 +02:00
Guewen Baconnier 81196a8058 Various small changes after review 2017-09-20 12:43:38 +02:00
Thierry DucrestandGuewen Baconnier dd8f2fc5c8 Add auth v2.0 for swift connection 2017-09-20 12:43:38 +02:00
Thierry DucrestandGuewen Baconnier fea698057a Create base_attachment_object_storage to extract common code to store implementations 2017-09-01 11:14:21 +02:00
Thierry Ducrest beea07d44f Add implementation of reading writing on the Swift object store 2017-08-30 09:01:00 +02:00
Thierry Ducrest 017e1c7bd9 Create the module for Swift attachment 2017-08-25 16:34:12 +02:00