Re: [netcdf-java] IOSP open file risk

Hi Doug,

I think the real problem is the lack of documentation on the
AbstractIOServiceProvider. The IOServiceProvider is pretty clear that it
is the IOSP implementations job to close the RAF in the close() method.
But AbstractIOSP doesn't explain what it is doing with the raf variable
or the close() method.

I thinking adding an open(...) method to AbstractIOServiceProvider that
sets the raf variable would both move all the basic raf stuff into
AbstractIOServiceProvider and make it easier to understand.

Here's the javadoc I just wrote to add to AbstractIOServiceProvider:

> /**
>  * Abstract base class for IOSP implementations that provides default 
> implementations
>  * of readToByteChannel(...) and readSection(...).
>  *
>  * <p>Implementations should make sure to handle the RandomAccessFile 
> properly by
>  * doing one of the following:
>  *
>  * <ol>
>  *   <li> Write your own open(...) and close() methods that keep track of the
>  *     RandomAccessFile, be sure to close the RandomAccessFile in your close()
>  *     method.</li>
>  *   <li> Write your own open(...) and close() methods that call the open(...)
>  *     and close() methods defined here, use the "raf" variable also defined
>  *     here.</li>
>  *   <li> Don't write an open(...) or close() method, so that those defined
>  *     here are used.</li>
>  * </ol>
>  *
>  */

Any thoughts or suggestions?

Thanks,

Ethan

Doug Lindholm wrote:
> Hi,
> 
> Our Tomcat server was barfing with "too many open files." The files
> (including /dev/null) that were left open where those in my ncml
> "location." My custom IOSP "close" method simply delegates to
> super.close(). However, the RandomAccessFile in the superclass that is
> closed is null. It is not the file that was handed to my IOSP. I see
> that the "raf" there is protected, so I could set it, but that seems a
> bit obscure.
> 
> This seems rather dangerous for the unwitting IOSP developer like me. It
> seems like you, on the NetCDF side, could set the "raf" in
> AbstractIOServiceProvider when you construct my IOSP. Otherwise, I would
> suggest that you make "close" abstract to ensure that it is dealt with.
> 
> Cheers,
> Doug



  • 2009 messages navigation, sorted by:
    1. Thread
    2. Subject
    3. Author
    4. Date
    5. ↑ Table Of Contents
  • Search the netcdf-java archives: