@@ -372,7 +372,7 @@ <h1>Base Attachment Object Store</h1>
372372!! This file is generated by oca-gen-addon-readme !!
373373!! changes will be overwritten. !!
374374!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
375- !! source digest: sha256:ab6dc481fe86d2b6584f38fd205cec1b1033eda6083058b91dfab59f79ef452f
375+ !! source digest: sha256:f04c77a3d6f06a8e26b21554b57811631c1bc9a4c42469598089be3719881db5
376376!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
377377< p > < a class ="reference external image-reference " href ="https://odoo-community.org/page/development-status "> < img alt ="Beta " src ="https://img.shields.io/badge/maturity-Beta-yellow.png " /> </ a > < a class ="reference external image-reference " href ="http://www.gnu.org/licenses/agpl-3.0-standalone.html "> < img alt ="License: AGPL-3 " src ="https://img.shields.io/badge/license-AGPL--3-blue.png " /> </ a > < a class ="reference external image-reference " href ="https://github.com/OCA/storage/tree/16.0/fs_attachment "> < img alt ="OCA/storage " src ="https://img.shields.io/badge/github-OCA%2Fstorage-lightgray.png?logo=github " /> </ a > < a class ="reference external image-reference " href ="https://translation.odoo-community.org/projects/storage-16-0/storage-16-0-fs_attachment "> < img alt ="Translate me on Weblate " src ="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png " /> </ a > < a class ="reference external image-reference " href ="https://runboat.odoo-community.org/builds?repo=OCA/storage&target_branch=16.0 "> < img alt ="Try me on Runboat " src ="https://img.shields.io/badge/runboat-Try%20me-875A7B.png " /> </ a > </ p >
378378< p > In some cases, you need to store attachment in another system that the Odoo’s
@@ -428,22 +428,23 @@ <h1>Base Attachment Object Store</h1>
428428</ ul >
429429</ li >
430430< li > < a class ="reference internal " href ="#changelog " id ="toc-entry-6 "> Changelog</ a > < ul >
431- < li > < a class ="reference internal " href ="#section-1 " id ="toc-entry-7 "> 16.0.2.1.0 (2026-05-26)</ a > </ li >
432- < li > < a class ="reference internal " href ="#section-2 " id ="toc-entry-8 "> 16.0.2.0.3 (2026-05-26)</ a > </ li >
433- < li > < a class ="reference internal " href ="#section-3 " id ="toc-entry-9 "> 16.0.1.0.13 (2024-05-10)</ a > </ li >
434- < li > < a class ="reference internal " href ="#section-4 " id ="toc-entry-10 "> 16.0.1.0.8 (2023-12-20)</ a > </ li >
435- < li > < a class ="reference internal " href ="#section-5 " id ="toc-entry-11 "> 16.0.1.0.6 (2023-12-02)</ a > </ li >
436- < li > < a class ="reference internal " href ="#section-6 " id ="toc-entry-12 "> 16.0.1.0.5 (2023-11-29)</ a > </ li >
437- < li > < a class ="reference internal " href ="#section-7 " id ="toc-entry-13 "> 16.0.1.0.4 (2023-11-22)</ a > </ li >
438- < li > < a class ="reference internal " href ="#section-8 " id ="toc-entry-14 "> 16.0.1.0.3 (2023-10-17)</ a > </ li >
439- < li > < a class ="reference internal " href ="#section-9 " id ="toc-entry-15 "> 16.0.1.0.2 (2023-10-09)</ a > </ li >
431+ < li > < a class ="reference internal " href ="#section-1 " id ="toc-entry-7 "> 16.0.3.1.0 (2026-06-24)</ a > </ li >
432+ < li > < a class ="reference internal " href ="#section-2 " id ="toc-entry-8 "> 16.0.2.1.0 (2026-05-26)</ a > </ li >
433+ < li > < a class ="reference internal " href ="#section-3 " id ="toc-entry-9 "> 16.0.2.0.3 (2026-05-26)</ a > </ li >
434+ < li > < a class ="reference internal " href ="#section-4 " id ="toc-entry-10 "> 16.0.1.0.13 (2024-05-10)</ a > </ li >
435+ < li > < a class ="reference internal " href ="#section-5 " id ="toc-entry-11 "> 16.0.1.0.8 (2023-12-20)</ a > </ li >
436+ < li > < a class ="reference internal " href ="#section-6 " id ="toc-entry-12 "> 16.0.1.0.6 (2023-12-02)</ a > </ li >
437+ < li > < a class ="reference internal " href ="#section-7 " id ="toc-entry-13 "> 16.0.1.0.5 (2023-11-29)</ a > </ li >
438+ < li > < a class ="reference internal " href ="#section-8 " id ="toc-entry-14 "> 16.0.1.0.4 (2023-11-22)</ a > </ li >
439+ < li > < a class ="reference internal " href ="#section-9 " id ="toc-entry-15 "> 16.0.1.0.3 (2023-10-17)</ a > </ li >
440+ < li > < a class ="reference internal " href ="#section-10 " id ="toc-entry-16 "> 16.0.1.0.2 (2023-10-09)</ a > </ li >
440441</ ul >
441442</ li >
442- < li > < a class ="reference internal " href ="#bug-tracker " id ="toc-entry-16 "> Bug Tracker</ a > </ li >
443- < li > < a class ="reference internal " href ="#credits " id ="toc-entry-17 "> Credits</ a > < ul >
444- < li > < a class ="reference internal " href ="#authors " id ="toc-entry-18 "> Authors</ a > </ li >
445- < li > < a class ="reference internal " href ="#contributors " id ="toc-entry-19 "> Contributors</ a > </ li >
446- < li > < a class ="reference internal " href ="#maintainers " id ="toc-entry-20 "> Maintainers</ a > </ li >
443+ < li > < a class ="reference internal " href ="#bug-tracker " id ="toc-entry-17 "> Bug Tracker</ a > </ li >
444+ < li > < a class ="reference internal " href ="#credits " id ="toc-entry-18 "> Credits</ a > < ul >
445+ < li > < a class ="reference internal " href ="#authors " id ="toc-entry-19 "> Authors</ a > </ li >
446+ < li > < a class ="reference internal " href ="#contributors " id ="toc-entry-20 "> Contributors</ a > </ li >
447+ < li > < a class ="reference internal " href ="#maintainers " id ="toc-entry-21 "> Maintainers</ a > </ li >
447448</ ul >
448449</ li >
449450</ ul >
@@ -681,14 +682,35 @@ <h3><a class="toc-backref" href="#toc-entry-5">Tips & Tricks</a></h3>
681682< div class ="section " id ="changelog ">
682683< h2 > < a class ="toc-backref " href ="#toc-entry-6 "> Changelog</ a > </ h2 >
683684< div class ="section " id ="section-1 ">
684- < h3 > < a class ="toc-backref " href ="#toc-entry-7 "> 16.0.2.1.0 (2026-05-26)</ a > </ h3 >
685+ < h3 > < a class ="toc-backref " href ="#toc-entry-7 "> 16.0.3.1.0 (2026-06-24)</ a > </ h3 >
686+ < p > < strong > Bugfixes</ strong > </ p >
687+ < ul >
688+ < li > < p class ="first "> Paginate the autovacuum GC loop to bound worker memory.</ p >
689+ < p > < tt class ="docutils literal "> FsFileGC._gc_files_unsafe</ tt > used to load the entire backlog of orphan
690+ files into a single Python list via < tt class ="docutils literal "> array_agg(store_fname)</ tt > and iterate
691+ < tt class ="docutils literal "> fs.rm</ tt > over all of them in one pass. With the Azure Blob backend and
692+ tens of thousands of orphans queued, each HEAD+DELETE pair retained
693+ response buffers and connection-pool state inside the adlfs client that
694+ was only released when the worker exited. The autovacuum cron hit Odoo’s
695+ < tt class ="docutils literal "> limit_memory_hard</ tt > and got < tt class ="docutils literal "> SIGKILL</ tt > ’d mid-run every time, so the
696+ queue never drained and the next worker ran the same failing loop.</ p >
697+ < p > The SELECT and the < tt class ="docutils literal "> fs.rm</ tt > loop are now paginated in batches of 500 per
698+ storage, with an explicit < tt class ="docutils literal "> gc.collect()</ tt > between batches. The caller
699+ (< tt class ="docutils literal "> _gc_files</ tt > ) still holds the < tt class ="docutils literal "> SHARE</ tt > lock and performs the final
700+ commit, so the consistency guarantees and transactional semantics are
701+ unchanged. (< a class ="reference external " href ="https://github.com/OCA/storage/issues/gc_batching "> #gc_batching</ a > )</ p >
702+ </ li >
703+ </ ul >
704+ </ div >
705+ < div class ="section " id ="section-2 ">
706+ < h3 > < a class ="toc-backref " href ="#toc-entry-8 "> 16.0.2.1.0 (2026-05-26)</ a > </ h3 >
685707< p > < strong > Features</ strong > </ p >
686708< ul class ="simple ">
687709< li > Adapt to handle {db_name} in directory_path. (< a class ="reference external " href ="https://github.com/OCA/storage/issues/db_name "> #db_name</ a > )</ li >
688710</ ul >
689711</ div >
690- < div class ="section " id ="section-2 ">
691- < h3 > < a class ="toc-backref " href ="#toc-entry-8 "> 16.0.2.0.3 (2026-05-26)</ a > </ h3 >
712+ < div class ="section " id ="section-3 ">
713+ < h3 > < a class ="toc-backref " href ="#toc-entry-9 "> 16.0.2.0.3 (2026-05-26)</ a > </ h3 >
692714< p > < strong > Bugfixes</ strong > </ p >
693715< ul >
694716< li > < p class ="first "> Bound the GC cursor with per-transaction timeouts.</ p >
@@ -708,8 +730,8 @@ <h3><a class="toc-backref" href="#toc-entry-8">16.0.2.0.3 (2026-05-26)</a></h3>
708730</ li >
709731</ ul >
710732</ div >
711- < div class ="section " id ="section-3 ">
712- < h3 > < a class ="toc-backref " href ="#toc-entry-9 "> 16.0.1.0.13 (2024-05-10)</ a > </ h3 >
733+ < div class ="section " id ="section-4 ">
734+ < h3 > < a class ="toc-backref " href ="#toc-entry-10 "> 16.0.1.0.13 (2024-05-10)</ a > </ h3 >
713735< p > < strong > Bugfixes</ strong > </ p >
714736< ul >
715737< li > < p class ="first "> No crash o missign file.</ p >
@@ -721,15 +743,15 @@ <h3><a class="toc-backref" href="#toc-entry-9">16.0.1.0.13 (2024-05-10)</a></h3>
721743</ li >
722744</ ul >
723745</ div >
724- < div class ="section " id ="section-4 ">
725- < h3 > < a class ="toc-backref " href ="#toc-entry-10 "> 16.0.1.0.8 (2023-12-20)</ a > </ h3 >
746+ < div class ="section " id ="section-5 ">
747+ < h3 > < a class ="toc-backref " href ="#toc-entry-11 "> 16.0.1.0.8 (2023-12-20)</ a > </ h3 >
726748< p > < strong > Bugfixes</ strong > </ p >
727749< ul class ="simple ">
728750< li > Fix the error retrieving attachment files when the storage is set to optimize directory paths. (< a class ="reference external " href ="https://github.com/OCA/storage/issues/312 "> #312</ a > )</ li >
729751</ ul >
730752</ div >
731- < div class ="section " id ="section-5 ">
732- < h3 > < a class ="toc-backref " href ="#toc-entry-11 "> 16.0.1.0.6 (2023-12-02)</ a > </ h3 >
753+ < div class ="section " id ="section-6 ">
754+ < h3 > < a class ="toc-backref " href ="#toc-entry-12 "> 16.0.1.0.6 (2023-12-02)</ a > </ h3 >
733755< p > < strong > Bugfixes</ strong > </ p >
734756< ul >
735757< li > < p class ="first "> Improve performance at creation of an attachment or when the attachment is updated.</ p >
@@ -741,8 +763,8 @@ <h3><a class="toc-backref" href="#toc-entry-11">16.0.1.0.6 (2023-12-02)</a></h3>
741763</ li >
742764</ ul >
743765</ div >
744- < div class ="section " id ="section-6 ">
745- < h3 > < a class ="toc-backref " href ="#toc-entry-12 "> 16.0.1.0.5 (2023-11-29)</ a > </ h3 >
766+ < div class ="section " id ="section-7 ">
767+ < h3 > < a class ="toc-backref " href ="#toc-entry-13 "> 16.0.1.0.5 (2023-11-29)</ a > </ h3 >
746768< p > < strong > Bugfixes</ strong > </ p >
747769< ul class ="simple ">
748770< li > When manipulating the file system api through a local variable named < em > fs</ em > ,
@@ -752,22 +774,22 @@ <h3><a class="toc-backref" href="#toc-entry-12">16.0.1.0.5 (2023-11-29)</a></h3>
752774avoiding the name clash. (< a class ="reference external " href ="https://github.com/OCA/storage/issues/306 "> #306</ a > )</ li >
753775</ ul >
754776</ div >
755- < div class ="section " id ="section-7 ">
756- < h3 > < a class ="toc-backref " href ="#toc-entry-13 "> 16.0.1.0.4 (2023-11-22)</ a > </ h3 >
777+ < div class ="section " id ="section-8 ">
778+ < h3 > < a class ="toc-backref " href ="#toc-entry-14 "> 16.0.1.0.4 (2023-11-22)</ a > </ h3 >
757779< p > < strong > Bugfixes</ strong > </ p >
758780< ul class ="simple ">
759781< li > Fix error when an url is computed for an attachment in a storage configure wihtout directory path. (< a class ="reference external " href ="https://github.com/OCA/storage/issues/302 "> #302</ a > )</ li >
760782</ ul >
761783</ div >
762- < div class ="section " id ="section-8 ">
763- < h3 > < a class ="toc-backref " href ="#toc-entry-14 "> 16.0.1.0.3 (2023-10-17)</ a > </ h3 >
784+ < div class ="section " id ="section-9 ">
785+ < h3 > < a class ="toc-backref " href ="#toc-entry-15 "> 16.0.1.0.3 (2023-10-17)</ a > </ h3 >
764786< p > < strong > Bugfixes</ strong > </ p >
765787< ul class ="simple ">
766788< li > Fix access to technical models to be able to upload attachments for users with basic access (< a class ="reference external " href ="https://github.com/OCA/storage/issues/289 "> #289</ a > )</ li >
767789</ ul >
768790</ div >
769- < div class ="section " id ="section-9 ">
770- < h3 > < a class ="toc-backref " href ="#toc-entry-15 "> 16.0.1.0.2 (2023-10-09)</ a > </ h3 >
791+ < div class ="section " id ="section-10 ">
792+ < h3 > < a class ="toc-backref " href ="#toc-entry-16 "> 16.0.1.0.2 (2023-10-09)</ a > </ h3 >
771793< p > < strong > Bugfixes</ strong > </ p >
772794< ul class ="simple ">
773795< li > Ensures python 3.9 compatibility. (< a class ="reference external " href ="https://github.com/OCA/storage/issues/285 "> #285</ a > )</ li >
@@ -777,24 +799,24 @@ <h3><a class="toc-backref" href="#toc-entry-15">16.0.1.0.2 (2023-10-09)</a></h3>
777799</ div >
778800</ div >
779801< div class ="section " id ="bug-tracker ">
780- < h2 > < a class ="toc-backref " href ="#toc-entry-16 "> Bug Tracker</ a > </ h2 >
802+ < h2 > < a class ="toc-backref " href ="#toc-entry-17 "> Bug Tracker</ a > </ h2 >
781803< p > Bugs are tracked on < a class ="reference external " href ="https://github.com/OCA/storage/issues "> GitHub Issues</ a > .
782804In case of trouble, please check there if your issue has already been reported.
783805If you spotted it first, help us to smash it by providing a detailed and welcomed
784806< a class ="reference external " href ="https://github.com/OCA/storage/issues/new?body=module:%20fs_attachment%0Aversion:%2016.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior** "> feedback</ a > .</ p >
785807< p > Do not contact contributors directly about support or help with technical issues.</ p >
786808</ div >
787809< div class ="section " id ="credits ">
788- < h2 > < a class ="toc-backref " href ="#toc-entry-17 "> Credits</ a > </ h2 >
810+ < h2 > < a class ="toc-backref " href ="#toc-entry-18 "> Credits</ a > </ h2 >
789811< div class ="section " id ="authors ">
790- < h3 > < a class ="toc-backref " href ="#toc-entry-18 "> Authors</ a > </ h3 >
812+ < h3 > < a class ="toc-backref " href ="#toc-entry-19 "> Authors</ a > </ h3 >
791813< ul class ="simple ">
792814< li > Camptocamp</ li >
793815< li > ACSONE SA/NV</ li >
794816</ ul >
795817</ div >
796818< div class ="section " id ="contributors ">
797- < h3 > < a class ="toc-backref " href ="#toc-entry-19 "> Contributors</ a > </ h3 >
819+ < h3 > < a class ="toc-backref " href ="#toc-entry-20 "> Contributors</ a > </ h3 >
798820< p > Thierry Ducrest << a class ="reference external " href ="mailto:thierry.ducrest@camptocamp.com "> thierry.ducrest@camptocamp.com</ a > >
799821Guewen Baconnier << a class ="reference external " href ="mailto:guewen.baconnier@camptocamp.com "> guewen.baconnier@camptocamp.com</ a > >
800822Julien Coux << a class ="reference external " href ="mailto:julien.coux@camptocamp.com "> julien.coux@camptocamp.com</ a > >
@@ -812,7 +834,7 @@ <h3><a class="toc-backref" href="#toc-entry-19">Contributors</a></h3>
812834Mohamed Alkobrosli << a class ="reference external " href ="mailto:alkobroslymohamed@gmail.com "> alkobroslymohamed@gmail.com</ a > ></ p >
813835</ div >
814836< div class ="section " id ="maintainers ">
815- < h3 > < a class ="toc-backref " href ="#toc-entry-20 "> Maintainers</ a > </ h3 >
837+ < h3 > < a class ="toc-backref " href ="#toc-entry-21 "> Maintainers</ a > </ h3 >
816838< p > This module is maintained by the OCA.</ p >
817839< a class ="reference external image-reference " href ="https://odoo-community.org ">
818840< img alt ="Odoo Community Association " src ="https://odoo-community.org/logo.png " />
0 commit comments