[
https://issues.apache.org/jira/browse/VFS-396?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13553887#comment-13553887
]
Thomas Neidhart commented on VFS-396:
-------------------------------------
I did a small test myself but I can not confirm the observation:
{noformat}
FileSystemOptions largeSized = new FileSystemOptions();
public void setup() {
RamFileSystemConfigBuilder.getInstance().setMaxSize(largeSized,
5000000);
}
...
@Test
public void testChunkFileWrite() throws Exception
{
// Default FS
final FileObject fo1 = manager.resolveFile("ram:/fo1", largeSized);
fo1.createFile();
try
{
final OutputStream os = fo1.getContent().getOutputStream();
// write file in chunks of 8kbytes (total 10.000.000 bytes)
for (int i = 0; i < 1220; i++) {
os.write(new byte[8192]);
}
os.close();
fail("It shouldn't save such a big file");
} catch (final FileSystemException e)
{
// Expected
}
}
{noformat}
The test successfully detects that the file will be too large, see also the
debug output of the check in RamFileObject#resize():
{noformat}
afs.size()=0
newSize=8192
this.size()=0
afs.size()=8192
newSize=16384
this.size()=8192
afs.size()=16384
newSize=24576
this.size()=16384
afs.size()=24576
newSize=32768
this.size()=24576
afs.size()=32768
newSize=40960
this.size()=32768
afs.size()=40960
newSize=49152
this.size()=40960
...
{noformat}
> RAM FileSystem allows the file system size to exceed the max size limit.
> ------------------------------------------------------------------------
>
> Key: VFS-396
> URL: https://issues.apache.org/jira/browse/VFS-396
> Project: Commons VFS
> Issue Type: Bug
> Affects Versions: 2.0
> Environment: All
> Reporter: Rupesh Kumar
> Original Estimate: 0.5h
> Remaining Estimate: 0.5h
>
> When a new file is created in the RAM file system, and content is written to
> its outputstream, there is a check in place for ensuring that file system
> size does not exceed the max limit set. But that check is wrong.
> In RamFileOutputStream.write(), you calculate the size, newsize and call
> file.resize(newSize)
> And in the RamFileObject.resize(), there is a check
> if (fs.size() + newSize - this.size() > maxSize)
> {
> throw new IOException("FileSystem capacity (" + maxSize
> + ") exceeded.");
> }
> This check is wrong.
> Consider this case of a new file system where the file system size is set to
> 5 MB and I am trying to create a file of 10 MB in the RAM file system. the
> file is being written in the chunk of 8 kb. For every resize check, fs.size()
> would be 0 and (newsize - this.size()) would be 8 kb and therefore the check
> never passes.
> It could have been correct if the "old size" was locked down to the size
> that was registered with the file system but the old size (this.size()) keeps
> changing at every write. Thus the difference in newSize and this.size() would
> always be the chunk size (typically 8 kb) and therefore no exception would be
> thrown ever.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira