lucenenet-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Uwe Schindler" <>
Subject FSDirectory and creating directory
Date Wed, 04 Feb 2015 09:03:40 GMT

on the Lucene.NET mailing list there were some issues with porting over Lucene 4.8's FSDirectory
class to .NET. In fact the following comment on a method caused confusion:

  // returns the canonical version of the directory, creating it if it doesn't exist.
  private static File getCanonicalPath(File file) throws IOException {
    return new File(file.getCanonicalPath());

In fact, the comment is not correct (and the whole method is useless - one could call file.getCanonicalFile()
to do the same. According to Javadocs and my tests, this method does *not* generate the directory.
If the directory does not exists, it just returns a "synthetic" canonical name (modifying
only "known" parts of the path). In fact we should maybe fix this comment and remove this
method in 4.10.x (if we get a further bugfix release).

We also have a test that validates that a directory is not created by FSDirectory's ctor (a
side effect of some IndexWriter test).

Nevertheless, in Lucene 5 we changed the behavior of the FSDirectory CTOR with NIO.2:

  protected FSDirectory(Path path, LockFactory lockFactory) throws IOException {
    Files.createDirectories(path);  // create directory, if it doesn't exist
    directory = path.toRealPath();

The question is now: Do we really intend to create the directory in Lucene 5 ? What about
opening an IndexReader on a non-existent directory on a read-only filesystem? I know that
Robert added this to make path.getRealPath() to work correctly?

I just want to discuss this before we release 5.0. To me it sounds wrong to create the directory
in the constructor...


Uwe Schindler 
Apache Lucene PMC Member / Committer
Bremen, Germany

View raw message