[rt-devel] RT::Extension::ExternalStorage

Emmanuel Manganneau emanganneau at easter-eggs.com
Mon Sep 7 00:34:19 EDT 2015

Le 06/09/2015 21:20, Alex Vandiver a écrit :
> This sounds like a purely backend changes, yes?  But it's not clear to
> me what problem you are attempting to solve by doing this.  While

I have been asked to perform some adpatations for differents clients :
- file storage (which ExternalStorage does perfectly)
- inserting Articles files into ticket responses,
- check and limit attachments sizes (client and server),
- create a CF which proposes to pick up a file in a list (files are 
stored server side),
- ...

Each of those developpment could be made separatly, but I began to see a 
picture while coding this : RT could have a way to manage files, server 
side. And once you have this object, every developpment above become 
quite easy to write and without edge effect.

So it's not only a purely backend change, it's about adding a new object 
to RT, which could use the backends method you add in ExternalStorage 
for example.

> unifying the OCFV and Attachment data storage is a perhaps-useful
> goal, I don't see much actual gain from it -- it will increase the
> size of the Links table by orders of magnitude.  I also don't
Gains :
- every developpment about files and attachment is made in the same 
place (this is relevant for me at least ! :) )
- there is a table of uploaded files (and files needed by the server) so 
you have a clear and instant view of this part of your IS;
- I can create a lot of usefull (to me !) features, such as CF with a 
list of files,
- you can link files to *every* object in RT, thanks to the Link table, 
without having to create specific CF or attribute.

The size of the link table is a good point, but will stay very (*very*) 
smaller than group membership for instance.

 > understand how this would avoid having to load the file data into
 > memory when saving or loading (your point 2).

I have overloaded Interface/Web.pm to process attachment directly on 
disk : this way the uploaded files (their content) is never seen by 
Perl. In the same spirit, I replaced in the MimeEntities the "Content" 
attribute by a "Path" attribute.

When loading, I re-wrote some handlers and some classes to "spew" (I use 
Path::Tiny :) ) the file content without loading it in a variable. There 
are still some cases where I need the content, but not much.

Easter-eggs                              Spécialiste GNU/Linux
44-46 rue de l'Ouest  -  75014 Paris  -  France -  Métro Gaité
Phone: +33 (0) 1 43 35 00 37    -   Fax: +33 (0) 1 43 35 00 76
emanganneau at easter-eggs.com     -   http://www.easter-eggs.com

More information about the rt-devel mailing list