On 12/03/2010 05:24 AM, Vincent Massol wrote: > > On Dec 2, 2010, at 11:45 PM, Caleb James DeLisle wrote: > >> I now have a working model of attachment storage in the sandbox. >> http://svn.xwiki.org/svnroot/xwiki/contrib/sandbox/xwiki-store/xwiki-store-filesystem-attachments/ >> I can upload and download attachments with it simply by adding the .jar file >> to the /lib/ dir and >> changing the attachment store in the xwiki.cfg. > > Sounds cool. Note that I haven't read the code. > >> This introduces a 2 major changes to the storage direction which I want to >> go over: >> >> 1. TransactionRunnable. This is a closure (like java.lang.Runnable) which >> does a job inside of a >> transaction, it also provides hooks for rollback, commit and complete >> events. The underlying concept >> is that code which is to run inside of a transaction is passed as an object >> to the storage engine >> where the transaction is opened and it is run. This will make the exception >> catching generic for all >> storage and Transaction is an interface independent of Hibernate or SQL. >> See the bottom part of: >> http://svn.xwiki.org/svnroot/xwiki/contrib/sandbox/xwiki-store/xwiki-store-filesystem-attachments/src/main/java/com/xpn/xwiki/store/FilesystemAttachmentStore.java >> NOTE: I have TransactionRunnable as a nested class while it is in >> development and I intend to move >> it out when it becomes more mature. >> >> >> 2. Filesystem hierarchical storage: An attachment called 30579.jpg a >> document called >> xwiki:Main.WebHome will be stored in a file at the path: >> >> work/storage/xwiki/Main/WebHome/~this/attachments/30579.jpg/30579.jpg >> >> The names are URL encoded for security. The directory ~this contains a >> character which is URL >> invalid and thus insures that if nested spaces are implemented, a document >> called >> xwiki:Main.WebHome.attachments will not cause a collision. >> The "attachments" directory is a directory dedicated to attachments for the >> given document. >> The "30579.jpg" directory under the attachments directory is dedicated to >> all information related to >> that directory. This opens the possibility for attachment history to be >> stored along side the >> attachment content. > > I don't understand why we need ~this. Why can't we count the number of > directories from the end? > ..../attachments/<attachmentname>/<attachmentversion> > > So to know the attachment name it's simply 2 "/" from the end.
If we are never going to implement nested spaces then that plan would work fine. The problem with nested spaces comes when you have a nested space called "attachments" and then you will have a collision. Caleb > >> WDYT? >> >> Caleb >> >> >> PS. This code currently contains no tests, I do not want to go any further >> until I know this path is >> agreed upon. > > bad bad :) > > Are you saying this wasn't TDD-developed? Oh my gaaawwwd..... > > -Vincent > > _______________________________________________ > devs mailing list > [email protected] > http://lists.xwiki.org/mailman/listinfo/devs > _______________________________________________ devs mailing list [email protected] http://lists.xwiki.org/mailman/listinfo/devs

