commons-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Thomas Neidhart (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (VFS-396) RAM FileSystem allows the file system size to exceed the max size limit.
Date Tue, 15 Jan 2013 15:28:14 GMT

    [ 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

Mime
View raw message