1. subdirectories currently are a foreign concept to Directory, we would have
to make some serious changes there to support subdirectories.
2. Lucene 3.x and Lucene4-alpha indexes still need to be supported, and we
dont want to leave behind baggage when we merge, so the transition would be
The way I imagined this working (short of looking at the code and proposing a
patch) was to just append something like "lucene.index" to the directory path
given by the user and pretend that's what the user gave it (and create that
subdirectory). Code deleting the index files becomes simpler, it's just a
recursive delete of that subdirectory Lucene created.
That name, "lucene.index", could be in fact an additional parameter to the
Directory class so that one could pick different names and store multiple
indexes in the directory part.
Having that extra name parameter would make it harder to a just use c:\ or c:\tmp which, while apparently silly, is also easy to hit accidentally. Imagine a shell script that puts together an index directory path with, say, some environment variables or command line parameters, and because of a bug there or some human error some inputs making up that path are now missing. Fancy generated path /home/fred/$(indexes) is now shorter all of a sudden, /home/fred gets used instead and later (partially) wiped. Ouch. No, I didn't just make this up
3. the user could also do this on their own right? e.g. we still have the same situation we have currently, where anything in that directory can get deleted by lucene, its just underneath another layer.
Of course they could, but the difference is that if Lucene is the one creating
a directory, I expect it to more or less control the files in it, whereas if I
create a directory myself, that is not the case. I don't expect Lucene to take
it over by deleting files in it it didn't create.
With the extra index name parameter, one would make it much less likely to stomp over something not belonging to Lucene. As for backwards compatibility, one could tolerate for the next release cycle, that this extra name be empty (which would be equivalent to the situation we have now, bug 4190).