Hi

While working on LUCENE-2402, I've noticed what I think is a confusing
behavior of Dir.deleteFile. Its signature declares throwing an IOException,
but w/ no documentation to when and why will this be thrown. And then of
course there are the two different implementations by FSDir and RAMDir:
FSDir throws an IOException if File.delete() returns false while RAMDir
throws FNFE if the file does not exist.
In either case, an IOE is not thrown from the lower-level API (File in FSDir
case).

Then, IFD.deleteFile declares "throws IOException", but never really throws
it. Instead, it calls directory.deleteFile(), catches IOE, and calls
dir.fileExists. If the latter returns true it adds the file to the list of
pending to delete files, otherwise simply ignores the exception (!?).

My feeling is that this exception should not be declared on Directory, but
rather have deleteFile return true or false (like Java's File). In both
current implementations, it's not a real IO error, and if there is any
custom Dir impl out there, which really throws IOE, then IFD clearly ignores
it, and will try to delete the file again next time.

So it's more that Dir.deleteFile is confusing, than IFD is broken. And I
think clarity is important.

What do you think?

Shai

Reply via email to