[
https://issues.apache.org/jira/browse/VFS-142?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13998429#comment-13998429
]
Adam Heath commented on VFS-142:
--------------------------------
Our current deployment application does not make use of commons-vfs
anymore; we now use more off-the-shelf(but still opensource) tools, and
don't maintain as much internal forks of software as we used to.
After this original bug was filed, I kept finding more and more issues
running commons-vfs in a long-running server environment; from memory,
including, but not limited to:
* long running thread pools(as you mention)
* when nearly out of memory, the app server calls into vfs to read a
file, the vfs extensions we wrote then need to parse xml, this then
attempts to load a class(which was loaded previously, but was thrown
away due to the OOM that will happen shortly), which then calls into a
classloader, which is also backed by the very same top-level vfs
instance; deadlock ensues. This is really more of a bug in
java.lang.Classloader.loadClass, because it is synchronized.
* much use of synchronized in the code base
* not a bug per se, but an ugliness; at the time, there was no generics
in the api.
Due to these, and other issues, I basically ended up just using the vfs
interfaces, and none of the base support classes. All were rewritten,
including the Manager. Final result was generics, no synchronized(uses
java.util.concurrent(aka non-blocking), no dead locks, and no mem-leaks.
Btw, the primary filesystem implementation we had was an 'overlay',
which is similar to linux union; directories could overlay other
directories, getChildren() would be merge, it had support for
whiteouts. There was also support for mount-points at any level. The
metadata for whiteouts was stored as xml as .cowstate.xml(the original
name was COWFileSystem, for copy-on-write). We used this to have a
large, shared BASE, with multiple overlayed CHILDREN. If a child
modified a file, the base was up-copied.
There was also a 'FlatAttribute' file system; getAttribute(name) was
mapped to 'file/path@/name'; this made storing metadata for vfs files
easy, and integrated well with svn and git revision control.
> Clear ThreadData after all streams are closed, fixes a memory leak
> ------------------------------------------------------------------
>
> Key: VFS-142
> URL: https://issues.apache.org/jira/browse/VFS-142
> Project: Commons VFS
> Issue Type: Bug
> Affects Versions: 1.1
> Reporter: Adam Heath
> Attachments: fix_ThreadData-clear.patch
>
>
> After all streams are closed in FileContentThreadData, clear the ThreadLocal.
--
This message was sent by Atlassian JIRA
(v6.2#6252)