Ok, opened LUCENE-2316 to track this. Shai
On Sat, Mar 13, 2010 at 3:49 PM, Michael McCandless < luc...@mikemccandless.com> wrote: > I like the proposed new semantics (throw FNFE if the file does not > exist), and the migration path (new method, deprecate old). > > Mike > > On Sat, Mar 13, 2010 at 7:46 AM, Shai Erera <ser...@gmail.com> wrote: > > I think it falls under the semantics of dir.fileLength() and not the > > semantics of the implementation right? Unfortunately, the semantics of > > Directory.fileLength() are not specified, which made it easy for > extensions > > to invent their own. > > > > I myself am not sure what's better - return 0 as the length for a file > that > > does not exist, or throw FNFE to alert the caller that he's querying a > file > > that does not exist. FSDirectory got away with it by using File API which > > just happens to return 0 for a non-existing file. RAMDirectory chose to > > alert the caller. My feeling is that these two were written by two > different > > persons, or separate times, each understanding the method differently. > > > > I think we should make the semantics clear, and declare a better > contract, > > by documentation and possible also by method signature. If for example we > > decide that it should return 0 for non-existing files, then I think we > can > > remove the IOException from the method sig? But maybe we want to allow > > IOException to be thrown by Directories that could actually fail on > probing > > the file length. > > > > I would propose to declare the semantics of fileLength like this: > > * Returns the length of the file denoted by <code>name</code> if the file > > exists. The return value may be anywhere between 0 and Long.MAX_VALUE. > > * Throws FileNotFoundException if the file does not exist. Note that you > can > > call dir.fileExists(name) if you are not sure whether the file exists or > > not. > > > > That way it's clear. We can then change IW code to call fileExists if it > > expects to fail on either of the two. > > > > Question is - how do we do this w/o breaking Directory implementations > out > > there? I think that we might be safe with it, if we make sure all of IW > code > > queries fileExists before. However if someone relies on FSDir to return 0 > > instead of throwing exception, that will break his app. > > > > Backwards is always tricky. This does not result in compilation error, > but a > > runtime change. We might be able to get away with it if we think users > run > > some tests before they deploy a new Lucene .jar ... but otherwise, we > should > > create a new method, w/ clear semantics? Something like: > > > > /** > > * @deprecated the method will become abstract when #fileLength(name) has > > been removed. > > */ > > public long getFileLength(String name) throws IOException { > > long len = fileLength(name); > > if (len == 0 && !fileExists(name)) { > > throw new FileNotFoundException(name); > > } > > return len; > > } > > > > The first line just calls the current impl. If it throws exception for a > > non-existing file, we're ok. The second line verifies whether a 0 length > is > > for an existing file or not and throws an exception appropriately. > > > > That is of course only if everybody else agree w/ these semantics. > > > > Shai > > > > On Sat, Mar 13, 2010 at 1:21 PM, Marcelo Ochoa <marcelo.oc...@gmail.com> > > wrote: > >> > >> Uwe: > >> > That is not true, the API says: > >> > "Creates a new File *instance* from a parent pathname string and a > child > >> > pathname string." > >> > > >> > Please note "instance", so it will never create the file on disk. New > >> > File() just creates a file instance but no file on disk. You can check > this > >> > with a simple test. > >> OK but what the about the exception? > >> If the creation of the File instance do not throw an exception and > >> the method File.length() returns 0 if a file does not exists > >> RAMDirectory and other classes which also override this method should > >> be modified to return 0. > >> Best regards, Marcelo. > >> > >> -- > >> Marcelo F. Ochoa > >> http://marceloochoa.blogspot.com/ > >> http://mochoa.sites.exa.unicen.edu.ar/ > >> ______________ > >> Want to integrate Lucene and Oracle? > >> > >> > http://marceloochoa.blogspot.com/2007/09/running-lucene-inside-your-oracle-jvm.html > >> Is Oracle 11g REST ready? > >> http://marceloochoa.blogspot.com/2008/02/is-oracle-11g-rest-ready.html > >> > >> --------------------------------------------------------------------- > >> To unsubscribe, e-mail: java-dev-unsubscr...@lucene.apache.org > >> For additional commands, e-mail: java-dev-h...@lucene.apache.org > >> > > > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: java-dev-unsubscr...@lucene.apache.org > For additional commands, e-mail: java-dev-h...@lucene.apache.org > >