Since we moved delete to IndexWriter, I strongly feel that IndexReader SHOULD be always read-only,
so your patch makes perfect sense to me.
In 3.0, we are switching IndexReader.open to return a readOnly reader
by default (it's now read/write).
I know that there are still some operations that IndexWriter can't do, and real-time search needs them,
so that's why
LUCENE-1516 was created, right? But those guys don't need to open previous commit point,
they need latest & greatest, so the patch should work for them too.
Right, once realtime search is released, proves stable, etc.,
IndexReader should no longer need any write operations (I think?).
But in the end (lucene4, or maybe sooner?), could it be possible to move all modifying methods
to IndexWriter and let IndexReader to be what it says it is: a READER?
LUCENE-1516 won't land until after 3.0 (though, it's making
fast progress now, so it could be we get initial version into 2.9).
Then sometime in 3.x, we deprecate all write methods in IndexReader
and add anything missing (setNorm, undeleteAll) into IndexWriter.
Then in 4.x we would remove IndexReader's deprecated methods.
Beside this totally random talk, the patch looks good, I'll try to test it in a day or two and let you know if there are any problems.
Excellent, thanks – I'll hold off on committing until we hear back
how your tests go!