[ https://issues.apache.org/jira/browse/VFS-748?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17001201#comment-17001201 ]
Gary D. Gregory commented on VFS-748: ------------------------------------- [~Kafalas], Thank you for your report. The best way forward here would be to provide a PR on GitHub which includes your test. > TarProvider Incorrectly marks file IMAGINARY after garbage collection with > weakRefFilesCache > -------------------------------------------------------------------------------------------- > > Key: VFS-748 > URL: https://issues.apache.org/jira/browse/VFS-748 > Project: Commons VFS > Issue Type: Bug > Affects Versions: 2.2 > Environment: commons-vfs2.2.jar > commons-compress-1.18.jar > Reporter: Tim > Priority: Major > Attachments: TarBug.java, test.tar.gz > > > A Tar FileObject becomes unusable once it is removed from the filesCache. > The example provided here uses the the WeakRefFilesCache but I suspect the > bug is not limited to this cache type only, since it is the recreation of the > entry after removal that is flawed. > > The following code snippet will repeatedly access the the tarball until > garbage collection occurs. When this happens the cache entry is dropped but > upon reaccess, a new cache entry is created that incorrectly marks the file > as "IMAGINARY". All subsequent access to this file is are not possible in > the VM. > > Output from the class provided looks like this.... > 97 > 98 > 99 > 100 > tgz:[file:///C:/env/ws/vfsTarBug/target/classes/test.tar.gz!/] did not exist > > The number of successful iterations may vary depending upon the behavior of > the GC. > Tracing the run, the culprit appears to be a createFile method which hard > codes the tarExists argument to false when it should be true. The stack > trace for this appears below. > at > org.apache.commons.vfs2.provider.tar.TarFileSystem.createFile(TarFileSystem.java:210)at > > org.apache.commons.vfs2.provider.tar.TarFileSystem.createFile(TarFileSystem.java:210) > at > org.apache.commons.vfs2.provider.AbstractFileSystem.resolveFile(AbstractFileSystem.java:320) > - locked <0x53d2> (a org.apache.commons.vfs2.provider.tar.TarFileSystem) > at > org.apache.commons.vfs2.provider.AbstractFileSystem.resolveFile(AbstractFileSystem.java:300) > at > org.apache.commons.vfs2.provider.AbstractFileSystem.getRoot(AbstractFileSystem.java:274) > at > org.apache.commons.vfs2.provider.AbstractLayeredFileProvider.createFileSystem(AbstractLayeredFileProvider.java:82) > - locked <0x53e2> (a org.apache.commons.vfs2.provider.tar.TarFileProvider) > at > org.apache.commons.vfs2.provider.AbstractLayeredFileProvider.findFile(AbstractLayeredFileProvider.java:56) > at > org.apache.commons.vfs2.impl.DefaultFileSystemManager.resolveFile(DefaultFileSystemManager.java:711) > at > org.pentaho.di.core.vfs.ConcurrentFileSystemManager.resolveFile(ConcurrentFileSystemManager.java:91) > at > org.apache.commons.vfs2.impl.DefaultFileSystemManager.resolveFile(DefaultFileSystemManager.java:648) -- This message was sent by Atlassian Jira (v8.3.4#803005)